Android App Performance Testing: An End-to-end Approach

[원문] http://www.developer.com/ws/android/development-tools/android-app-performance-testing-an-end-to-end-approach.html

안드로이드 앱 성능 시험 : 종단간 접근법

2012년 6월 1일

안드로이드 애플리케이션 성능 테스트는 포함된 각 구성요소의 다양한 모든 시나리오를 테스트하는 종단간 애플리케이션 전달 모델을 따라야 한다. 그 방법은, 안드로이드 앱 개발자는 안드로이드 앱이 최종 사용자가 자신을 인식하는 것과 같이 주어진 단말에서 동작하는 방법에 대한 진정한 이해를 할 수 있다.

최근 DevX 기사에서 우리는 이러한 모바일 애플리케이션 성능 테스트용 종단간 접근법을 제안했다. 이 글에서 안드로이드 개발자가 샘플 뱅킹 앱을 사용한 안드로이드 애플리케이션 성능 테스트를 다루는 방식이 적합한지 살펴본다.

안드로이드 앱 성능 테스트 구성요소

안드로이드 앱 성능 테스트는 아래 구성요소와 도구를 포함한다.

안드로이드 애플리케이션

샘플 안드로이드 앱은 뱅킹 트랜잭션을 처리하는 하이브리드 애플리케이션이다. 하이브리드 모바일 애플리케이션은 네이티브 모바일 앱처럼 모바일 단말에 설치되나 사용자는 설치된 앱이나 단말 브라우저를 통해서 접근할 수 있다. 그 의도는 이 애플리케이션의 성능을 테스트하고 색다른 성능 지점을 찾는 것이다.

서버 구성요소

서버 구성요소(자세한 내용은 아래 참조)는 두꺼운/얇은 모바일 클라이언트나 데스크톱 웹 브라우저에서 초기화된 뱅킹 트랜잭션용 비즈니스 로직을 처리한다.

  • 운영 체제 : 윈도우즈 서버 2000
  • JDK : 1.6
  • 웹 서버 : 아파치 톰캣
  • 데이터베이스 서버 : MySQL

네트워크 에뮬레이터

네트워크 에뮬레이터는 개발자가 광역망(WAN)이나 무선 랜, GPRS, 3G, 2G, IPoR, RoIP, 위성 혹은 MPLS망 같은 환경을 시뮬레이트할 수 있도록 대기 시간과 지터, 패킷 손실/오류/재정렬, 대역폭 제한 같은 폭넓은 네트워크 조건을 재생성한다. 네트워크 에뮬레이터는 색다른 네트워크 조건 하에서 애플리케이션이 생성한 트래픽 부하를 판단한다. 우리는 이 성능 테스트를 위해 인포시스 랩이 개발한 사내 도구인 인포시스 윈드터널을 사용했다.

부하 생성기

부하 생성기 도구는 테스트 중인 애플리케이션에 부하를 유발하고 부하 시간를 측정한다. 이는 환경 설정이 부하를 늘리고 동시 사용자를 증가시키고 초당 트랜잭션을 증가시키고 URL를 전달인자로 표시하도록 활성화하고 각 URL에 이름을 줄 수 있도록 해준다. 우리는 JMeter를 사용해 샘플 애플리케이션에 다양한 전달 모드로 부하를 재생성했다.

안드로이드 단말

우리는 성능이 다양해서 테스트에 하이 엔드와 로우 엔드 단말 둘 다 사용했고 동일한 플랫폼에서 다양한 단말 환경 설정의 중요성을 증명하고 싶었다.

성능 모니터

Perfmon은 윈도와 매핑되는 성능 모니터링 도구다. 필요한 성능 카운터는 테스트를 실행하기 전에 설정돼 있다. 설정된 데이터 수집기 집합을 시작한 후 시나리오가 진행되는 동안 자동으로 결과 데이터를 수집한다.

안드로이드 디버그 브리지

안드로이드 SDK와 함께 출시된 도구인 안드로이드 디버그 브리지(adb)는 우리가 안드로이드 단말을 제어하고 인터페이스로 연결하도록 해준다. 우리는 다양한 adb 명령을 사용해 샘플 하이브리드 안드로이드 앱을 모니터링했다.

  • adb shell top – 모든 프로세스 ID(PID)의 CPU 정보를 반환
  • adb shell dumpsys meminfo <PID> – 특정 프로세스 ID의 메모리 정보를 반환
  • adb shell procrank – 모든 프로세스 ID(PID)의 PSS와 RSS, VSS, USS를 반환
  • adb shell cat /proc/cpuinfo – 에뮬레이터의 프로세서 정보를 반환
  • adb shell cat /proc/meminfo – 모든 프로세스 ID(PID)의 메모리 정보를 반환
  • adb logcat – GC를 포함한 로그 메시지를 반환

Dalvik 디버그 모니터 서버

DDMS는 포트 포워딩 서비스와 단말의 화면 갈무리, 단말의 스레드 및 힙 정보, 로그캣과 프로세스와 라디오 상태 정보, 수신 전화와 SMS 스푸핑(spoofing), 위치 데이터 스푸핑 등을 제공하는 안드로이드 디버깅 도구다.

DDMS는 이클립스에 통합돼 있고 SDK의 tools/ 디렉터리에도 제공돼 있다. 도구를 실행하려면 다음 지침을 따르자.

  • 이클립스: 창 클릭 > 퍼스펙티브 열기 > 기타… > DDMS
  • 명령 줄: tools/ 디렉터리에서 ddms (또는 맥이나 리눅스에서 ./ddms) 입력

대표적인 안드로이드 앱 성능 테스트 시나리오를 설정하려면 아래 개별 설정의 지침을 따르자.

작업 부하 유형

  1. 서버에 대한 부하 생성 도구를 사용해 다양한 작업 부하 유형에 필요한 흐름을 스크립트로 작성하자.
    • 씬 클라이언트 – 애플리케이션 서버에 하이브리드 애플리케이션을 설치하자. JMeter를 사용해 필요한 흐름을 기록하자.
    • 팻 클라이언트 – 에뮬레이터에 하이브리드 apk 파일을 설치하자. JMeter를 사용해 필요한 흐름을 기록하자.

작업 부하 혼합

  1. 다양한 작업 부하 시나리오로 서버에 부하를 주자.
    • 씬 클라이언트에서 100%
    • 팻 클라이언트에서 100%
    • 팻 클라이언트와 씬 클라이언트 양쪽의 조합(예를 들어 씬 클라이언트에서 40% 부하와 팻 클라이언트에서 60% 부하)

네트워크 유형

  1. 우리가 테스트할 다양한 네트워크 프로파일을 확인하자. 다음 프로파일에 맞는 네트워크 에뮬레이션 도구를 설정하자.
    • Airtel * 평균 3G
    • Airtel * 최선 3G
    • Airtel * 최악 3G
    • Airtel * 평균 2G
    • Airtel * 최선 2G
    • Airtel은 * 최악 2G

    에어텔은 인도 통신 사업자다. 프로파일을 에뮬레이트하는 속도가 실제 값을 표현하진 않으나 실전 테스트 동안 표현돼야 함에 주의하자.

단말 유형

  1. 하이 엔드 단말과 로우 엔드 단말 둘 다에 안드로이드 하이브리드 apk를 설치하자.
    • 하이 엔드: 삼성 갤럭시 S
    • 로우 엔드: 삼성 갤럭시 Y

실제 성능 테스트를 하는 동안 테스트 애플리케이션의 컨텍스트에 적용할 모든 시나리오가 재생성되도록 보장하자.

Android 앱 성능 테스트 실행

안드로이드 앱 성능 테스트를 실제로 실행하기 위한 단계는 다음과 같다.

  1. 서버 로드 : 서버는 JMeter를 사용해 이전 절에서 확인했던 시나리오로 로드했다. 서버는 로드하는 동안 성능을 모니터링했다.
  2. 네트워크 타입과 기기 선택 : 서버 로드를 통해 확인된 네트워크 프로필이 네트워크 에뮬레이터 도구를 사용해 재생성됐다. 도구에서 우리는 3G나 2G같은 요구사항에 따라 대역폭, 지터, 패킷 드롭 전달인자를 수정했다. 기기는 에뮬레이트된 네트워크를 사용하도록 설정됐다. 기기와 서버의 POC MAC 주소는 관련 정보를 걸러내도록 네트워크 에뮬레이터 도구에 설정됐다.
  3. 실제 기기의 애플리케이션에 접근 : 하이브리드 애플리케이션은 테스트할 기기에 설치됐다. 안드로이드 애플리케이션 설치 명령(apk)은 다음과 같다.
    adb install <apk>

    설치되면 트랜잭션이 에뮬레이트된 네트워크 조건과 서버를 가진 실제 기기에서 수행됐다. 추가로 그 트랜잭션은 기기 내 브라우저에서도 수행됐다.

  4. 관련 구성요소 모니터링 : 구성요소는 기기에서 트랜잭션을 수행하는 동안 모니터링됐다.

이 단계는 앞서 언급된 모든 테스트 시나리오를 다루기 위해 반복됐다. 아래 데이터는 기기에서 adb를 사용해 갈무리했다.

  서버 에뮬레이터 기기
CPU %
메모리 정보
프로세서 정보
네트워크 정보
없음
응답 시간
없음

안드로이드 앱 성능 테스트 결과

테스트로 얻을 수 있는 샘플 결과가 몇 개 있다. 이 결과가 우리가 할 수 있는 종단간 성능 테스트라는 빙산의 일각에 불과함을 염두에 두자.

기기 성능

아래 도표는 adb 명령이 모니터링한 기기 결과다. 우리는 부하 증가에 따른 PPS나 할당된 메모리, 힙 크기, 사용된 메모리 상에서 큰 차이가 없음을 관찰했다.
 
큰 이미지로 보려면 여기를 클릭 
그림 3.  기기 성능 결과

두꺼운 클라이언트와 얇은 클라이언트의 성능 비교

아래 도표는 두꺼운 클라이언트와 얇은 클라이언트 사이의 차이를 보여준다. 이는 응답 렌더링이 최종 사용자의 관점에서 성능에 어떻게 영향을 주는지 우리가 이해할 수 있게 한다.

큰 이미지를 보려면 여기를 클릭 
그림 4. 두꺼운 클라이언트와 얇은 클라이언트의 성능 결과

네트워크 성능 비교

아래 도표는 3G와 4G 네트워크의 망속도를 나타낸다. 부하는 로드 러너 도구를 통해 생성된다. 우리는 부하를 늘리자마자 3G 응답 시간보다 2G 응답 시간이 더 길어짐을 관찰했다.
 
큰 이미지를 보려면 여기를 클릭 
그림 5. 네트워크 성능 결과 비교

보다시피 모바일 애플리케이션 전달에 관련된 다양한 구성요소로 활용 가능한 종단간 데이터를 가지고 확장 분석을 수행할 수 있다. 그런 분석은 기기가 서버/네트워크 조건에 대한 제어권 없이 고립돼 테스트됐다면 불가능했다.

결론

이 문서는 샘플 안드로이드 앱을 사용해 종단간 모바일 애플리케이션 성능 테스트 개념을 증명한 내용을 제시했다. 이는 테스트 방법 뿐만 아니라 관련된 도전 등 테스트에 필요한 모든 구성요소를 자세히 설명했다.

이 접근법을 채택한다면 우리의 안드로이드 애플리케이션 성능 테스트는 아래 조건으로 수행돼야 한다.

  • 여러 기기에서
  • 네이티브 애플리케이션 뿐만 아니라 브라우저 기반 애플리케이션으로
  • 서버에서의 전송모드 기반 작업부하 혼합 같은 제품에서
  • 서버에서의 지역 기반 작업부하 혼합 같은 제품에서
  • 다양한 네트워크 프로필에서
  • 다양한 기기 상태서

 

 

 

 


코멘트

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.