Monkey는 에뮬레이터나 기기에서 실행되는 프로그램으로 여러 시스템 레벨 이벤트뿐만 아니라 클릭, 터치, 동작과 같은 사용자 이벤트의 의사 랜덤 스트림을 생성합니다. Monkey를 사용하여 개발 중인 애플리케이션을 반복 가능한 랜덤 방식으로 스트레스 테스트할 수 있습니다.
개요
Monkey는 에뮬레이터 인스턴스 또는 기기에서 실행할 수 있는 명령줄 도구입니다. 사용자 이벤트의 의사 랜덤 스트림을 시스템에 전송하여 개발 중인 애플리케이션 소프트웨어를 대상으로 하는 스트레스 테스트 역할을 합니다.
Monkey에는 네 가지 기본 카테고리로 분류되는 여러 옵션이 있습니다.
- 기본 구성 옵션(예: 시도할 이벤트 수 설정)
- 작업 제약 조건(예: 테스트를 단일 패키지로 제한)
- 이벤트 유형 및 실행 빈도
- 디버깅 옵션
Monkey가 실행되면 이벤트를 생성하여 시스템으로 전송합니다. 또한 테스트 중인 시스템을 감시하여 아래의 세 가지 조건 발생 시 특별히 처리합니다.
- 하나 이상의 특정 패키지에서 실행되도록 Monkey를 제한하면 Monkey가 다른 패키지로 이동하려는 시도를 감시하여 차단합니다.
- 애플리케이션이 다운되거나 처리되지 않은 예외를 수신하면 Monkey가 중지되고 오류를 보고합니다.
- 애플리케이션이 애플리케이션 응답 없음 오류를 생성하면 Monkey가 중지되고 오류를 보고합니다.
선택한 세부정보 수준에 따라 Monkey의 진행 상황과 생성되는 이벤트에 관한 보고서도 표시됩니다.
Monkey 기본 사용
개발 머신 또는 스크립트의 명령줄을 사용하여 Monkey를 실행할 수 있습니다.
Monkey는 에뮬레이터/기기 환경에서 실행되므로 그와 같은 환경의 셸에서 실행해야 합니다. 이렇게 하려면 각 명령어를 adb shell
로 시작하거나 셸을 입력하고 직접 Monkey 명령어를 입력하면 됩니다.
기본 구문은 다음과 같습니다.
$ adb shell monkey [options] <event-count>
지정된 옵션이 없으면 Monkey는 조용한(상세하지 않은) 모드로 실행되고 타겟에 설치된 모든 패키지에 이벤트를 전송합니다. 다음은 좀 더 일반적인 명령줄로 애플리케이션을 실행하고 의사 랜덤 이벤트 500개를 전송합니다.
$ adb shell monkey -p your.package.name -v 500
명령어 옵션 참조
아래 표에는 Monkey 명령줄에 포함할 수 있는 모든 옵션이 나열되어 있습니다.
카테고리 | 옵션 | 설명 |
---|---|---|
일반 | --help |
간단한 사용 가이드를 인쇄합니다. |
-v |
명령줄의 각 -v는 세부정보 수준을 높입니다. 레벨 0(기본값)에서는 시작 알림, 테스트 완료, 최종 결과 이외의 정보를 거의 제공하지 않습니다. 레벨 1에서는 실행되는 테스트에 관한 세부정보를 제공합니다(예: 활동에 전송되는 개별 이벤트). 레벨 2에서는 테스트에 선택되거나 선택되지 않은 활동과 같은 더 자세한 설정 정보를 제공합니다. | |
이벤트 | -s <seed> |
의사 랜덤 숫자 생성기의 시드값입니다. 같은 시드값으로 Monkey를 다시 실행하면 동일한 이벤트 시퀀스가 생성됩니다. |
--throttle <milliseconds> |
이벤트 사이에 고정 지연을 삽입합니다. 이 옵션을 사용하여 Monkey의 속도를 늦출 수 있습니다. 지정하지 않으면 지체 없이 최대한 빠르게 이벤트가 생성됩니다. | |
--pct-touch <percent> |
터치 이벤트 비율을 조정합니다 (터치 이벤트는 화면의 단일 위치에서의 다운/업 이벤트입니다). | |
--pct-motion <percent> |
모션 이벤트 비율을 조정합니다 (모션 이벤트는 화면 어딘가의 다운 이벤트와 일련의 의사 랜덤 이동, 업 이벤트로 구성됩니다). | |
--pct-trackball <percent> |
트랙볼 이벤트 비율을 조정합니다 (트랙볼 이벤트는 하나 이상의 랜덤 이동으로 구성되며, 클릭을 발생시키는 경우도 있습니다). | |
--pct-nav <percent> |
'기본' 탐색 이벤트 비율을 조정합니다 (탐색 이벤트는 방향 입력 기기의 입력처럼 위/아래/왼쪽/오른쪽으로 구성됩니다). | |
--pct-majornav <percent> |
'주요' 탐색 이벤트 비율을 조정합니다 (5방향 패드의 가운데 버튼, 뒤로 키, 또는 메뉴 키와 같이 일반적으로 UI 내에 작업을 발생시키는 탐색 이벤트입니다). | |
--pct-syskeys <percent> |
'시스템' 키 이벤트 비율을 조정합니다 (이러한 키는 홈, 돌아가기, 통화 시작, 통화 종료, 볼륨 조절과 같이 일반적으로 시스템에서 사용하도록 예약됩니다). | |
--pct-appswitch <percent> |
활동 실행 비율을 조정합니다. 랜덤 간격으로 Monkey는 startActivity() 호출을 실행하며 이는 패키지 내의 모든 활동의 적용 범위를 최대화하는 방법입니다. | |
--pct-anyevent <percent> |
다른 유형의 이벤트 비율을 조정합니다. 이는 다른 모든 유형의 이벤트를 포괄합니다(예: 키 누르기, 기기에서 덜 사용되는 다른 버튼 등). | |
제약 조건 | -p <allowed-package-name> |
이런 식으로 하나 이상의 패키지를 지정하면 Monkey는 시스템이 지정된 패키지 내의 활동만 방문하도록 허용합니다. 애플리케이션이 다른 패키지의 활동(예: 연락처 선택)에 액세스해야 한다면 그 패키지도 지정해야 합니다. 어떤 패키지도 지정하지 않으면 Monkey는 시스템이 모든 패키지에서 활동을 시작하도록 허용합니다. 여러 패키지를 지정하려면 -p 옵션을 여러 번 사용하세요(패키지당 -p 옵션 하나). |
-c <main-category> |
이 방법으로 하나 이상의 카테고리를 지정하면 Monkey는 시스템이 지정된 카테고리 중 하나와 함께 나열된 활동만 방문하도록 허용합니다. 어떤 카테고리도 지정하지 않으면 Monkey는 Intent.CATEGORY_LAUNCHER 또는 Intent.CATEGORY_MONKEY 카테고리와 함께 나열된 활동을 선택합니다. 여러 카테고리를 지정하려면 -c 옵션을 여러 번 사용하세요(카테고리당 -c 옵션 하나). | |
디버깅 | --dbg-no-events |
지정된 경우 Monkey는 테스트 활동으로 초기 실행을 이행하지만 더 이상의 이벤트를 생성하지는 않습니다. 최상의 결과를 얻으려면 -v와 하나 이상의 패키지 제약 조건, 0이 아닌 스로틀을 결합하여 Monkey가 30초 이상 계속 실행되도록 합니다. 이렇게 하면 애플리케이션에서 호출한 패키지 전환을 모니터링할 수 있는 환경을 만들 수 있습니다. |
--hprof |
설정된 경우 이 옵션은 Monkey 이벤트 시퀀스 직전 및 직후에 프로파일링 보고서를 생성합니다. 이 경우 데이터/misc에 대용량(~5Mb) 파일이 생성되므로 주의해서 사용하세요. 프로파일링 보고서 분석에 관한 자세한 내용은 앱 성능 프로파일링을 참고하세요. | |
--ignore-crashes |
일반적으로 Monkey는 애플리케이션이 비정상 종료되거나 처리되지 않은 예외 유형이 발생하면 중지됩니다. 이 옵션을 지정하면 Monkey는 계산이 완료될 때까지 시스템에 이벤트를 계속 전송합니다. | |
--ignore-timeouts |
일반적으로 Monkey는 애플리케이션에 어떠한 유형이든 시간 제한 오류가 발생하면 중지됩니다(예: '애플리케이션 응답 없음' 대화상자). 이 옵션을 지정하면 Monkey는 계산이 완료될 때까지 시스템에 이벤트를 계속 전송합니다. | |
--ignore-security-exceptions |
일반적으로 Monkey는 애플리케이션에 어떠한 유형이든 권한 오류가 발생하면 중지됩니다(예: 특정 권한이 필요한 활동을 시작하려고 하는 경우). 이 옵션을 지정하면 Monkey는 계산이 완료될 때까지 시스템에 이벤트를 계속 전송합니다. | |
--kill-process-after-error |
일반적으로 Monkey가 오류로 인해 중지되면 실패한 애플리케이션은 계속 실행됩니다. 이 옵션을 설정하면 시스템에 오류가 발생한 프로세스를 중지하라는 신호를 보냅니다. 참고: 정상적(성공적)으로 완료가 되면 실행된 프로세스는 중지되지 않으며 기기는 최종 이벤트 후 마지막 상태로 유지됩니다. | |
--monitor-native-crashes |
Android 시스템 네이티브 코드에서 발생하는 비정상 종료를 감시하고 보고합니다. --kill-process-after-error를 설정하면 시스템은 중지됩니다. | |
--wait-dbg |
디버거가 연결될 때까지 Monkey 실행을 중지합니다. |