O Monkey é um programa executado no emulador ou dispositivo e gera fluxos pseudoaleatórios de eventos do usuário, como cliques, toques ou gestos, bem como vários eventos do sistema. Você pode usar o Monkey para realizar testes de estresse nos aplicativos em desenvolvimento, de uma forma aleatória, mas que pode ser repetida.
Geral
O Monkey é uma ferramenta de linha de comando que pode ser executada em qualquer instância de emulador ou dispositivo. Ele envia um fluxo pseudoaleatório de eventos do usuário para o sistema, que atua como um teste de estresse no software do app em desenvolvimento.
O Monkey inclui várias opções, mas elas se dividem em quatro categorias principais:
- Opções básicas de configuração, como a definição do número de eventos a serem testados
- Restrições operacionais, como a limitação do teste a um único pacote
- Tipos e frequências de eventos
- Opções de depuração
Quando o Monkey é executado, ele gera eventos e os envia para o sistema. Ele também observa o sistema em teste e procura por três condições que recebem tratamento diferenciado:
- Se você restringiu o Monkey para ser executado em um ou mais pacotes específicos, ele observa as tentativas de navegar para qualquer outro pacote e bloqueia a tentativa.
- Se o app falhar ou receber qualquer tipo de exceção não processada, o Monkey será interrompido e informará o erro.
- Se o aplicativo gerar um erro do tipo O app não está respondendo, o Monkey será interrompido e informará o erro.
Dependendo do nível de detalhamento selecionado, você também verá relatórios sobre o progresso do Monkey e os eventos que estão sendo gerados.
Uso básico do Monkey
Você pode iniciar o Monkey usando uma linha de comando na máquina de desenvolvimento ou um script.
Como o Monkey é executado no ambiente do emulador/dispositivo, é necessário iniciá-lo a partir de um shell
nesse ambiente. Para isso, adicione o prefácio adb shell
a cada comando
ou insira o shell e os comandos do Monkey diretamente.
A sintaxe básica é:
$ adb shell monkey [options] <event-count>
Sem opções especificadas, o Monkey será iniciado em um modo silencioso (não detalhado) e enviará eventos para todos os pacotes instalados no destino. Veja a seguir uma linha de comando mais comum, que iniciará seu aplicativo e enviará 500 eventos pseudoaleatórios para ele:
$ adb shell monkey -p your.package.name -v 500
Referência de opções de comando
A tabela abaixo lista todas as opções que você pode incluir na linha de comando do Monkey.
Categoria | Opção | Descrição |
---|---|---|
Geral | --help |
Imprime um guia de uso simples. |
-v |
Cada -v na linha de comando aumenta o nível de detalhamento. O nível 0 (padrão) fornece poucas informações além da notificação de inicialização, conclusão de teste e resultados finais. O nível 1 oferece mais detalhes sobre o teste durante a execução, como eventos individuais enviados para as atividades. O nível 2 oferece informações de configuração mais detalhadas, como atividades selecionadas ou não selecionadas para teste. | |
Eventos | -s <seed> |
Valor de semente para o gerador de números pseudoaleatórios. Se você executar o Monkey novamente com o mesmo valor de "seed", ele irá gerar a mesma sequência de eventos. |
--throttle <milliseconds> |
Insere um atraso fixo entre os eventos. Use essa opção para desacelerar o Monkey. Se não for especificado, não haverá atraso, e os eventos serão gerados o mais rápido possível. | |
--pct-touch <percent> |
Ajusta a porcentagem de eventos de toque. Os eventos de toque são um evento down-up em um único lugar na tela. | |
--pct-motion <percent> |
Ajusta a porcentagem de eventos de movimento. Os eventos de movimento consistem em um evento para baixo em algum lugar da tela, uma série de movimentos pseudoaleatórios e um evento para cima. | |
--pct-trackball <percent> |
Ajusta a porcentagem de eventos do trackball. Os eventos do trackball consistem em um ou mais movimentos aleatórios, às vezes seguidos por um clique. | |
--pct-nav <percent> |
Ajusta a porcentagem de eventos de navegação "básico". Os eventos de navegação são para cima/para baixo/para a esquerda/para a direita, como entrada de um dispositivo de entrada direcional. | |
--pct-majornav <percent> |
Ajusta a porcentagem de eventos de navegação "maiores". Esses são eventos de navegação que geralmente causam ações na IU, como o botão central em um botão de 5 direções, a tecla "voltar" ou a tecla "menu". | |
--pct-syskeys <percent> |
Ajusta a porcentagem de eventos de teclas "de sistema". Essas teclas geralmente são reservadas para uso no sistema, como "Início", "Voltar", "Iniciar chamada", "Encerrar chamada" ou "Controles de volume". | |
--pct-appswitch <percent> |
Ajusta a porcentagem de inicializações de atividades. Em intervalos aleatórios, o Monkey emitirá uma chamada startActivity() como forma de maximizar a cobertura de todas as atividades dentro do pacote. | |
--pct-anyevent <percent> |
Ajusta a porcentagem de outros tipos de eventos. É um resumo de todos os outros tipos de eventos, como pressionamentos de tecla, outros botões menos usados no dispositivo e assim por diante. | |
Restrições | -p <allowed-package-name> |
Se você especificar um ou mais pacotes dessa forma, o Monkey permitirá que o sistema visite somente as atividades dentro desses pacotes. Caso seu aplicativo exija acesso a atividades em outros pacotes (por exemplo, para selecionar um contato), será necessário especificar esses pacotes também. Se você não especificar nenhum pacote, o Monkey permitirá que o sistema inicie atividades em todos os pacotes. Para especificar vários pacotes, use a opção -p várias vezes, ou seja, uma opção -p para cada pacote. |
-c <main-category> |
Se você especificar uma ou mais categorias dessa forma, o Monkey permitirá que o sistema visite apenas as atividades listadas em uma das categorias especificadas. Se você não especificar nenhuma categoria, o Monkey selecionará as atividades listadas na categoria Intent.CATEGORY_LAUNCHER ou Intent.CATEGORY_MONKEY. Para especificar várias categorias, use a opção -c várias vezes, ou seja, uma opção -c por categoria. | |
Depurar | --dbg-no-events |
Quando especificado, o Monkey executará o lançamento inicial em uma atividade de teste, mas não irá gerar mais eventos. Para conseguir resultados melhores, combine com -v, uma ou mais restrições de pacote e um limitador diferente de zero para manter o Monkey em execução por 30 segundos ou mais. Isso gera um ambiente em que é possível monitorar as transições de pacote invocadas pelo aplicativo. |
--hprof |
Se configurada, essa opção irá gerar relatórios de criação de perfil imediatamente, antes e depois da sequência de eventos do Monkey. Isso gerará arquivos grandes (~5 Mb) em dados/misc, portanto, use com cuidado. Para saber mais sobre como analisar relatórios de caracterização de perfil, consulte Caracterizar um perfil de desempenho do app. | |
--ignore-crashes |
Normalmente, o Monkey será interrompido quando o app falhar ou sofrer qualquer tipo de exceção não processada. Se você especificar essa opção, o Monkey continuará enviando eventos para o sistema, até que a contagem seja concluída. | |
--ignore-timeouts |
Normalmente, o Monkey será interrompido quando o app apresentar qualquer tipo de erro de tempo limite, como a caixa de diálogo "O app não está respondendo". Se você especificar essa opção, o Monkey continuará enviando eventos para o sistema, até que a contagem seja concluída. | |
--ignore-security-exceptions |
Normalmente, o Monkey será interrompido quando o app apresentar qualquer tipo de erro de permissão, por exemplo, caso tente iniciar uma atividade que requer permissões específicas. Se você especificar essa opção, o Monkey continuará enviando eventos para o sistema, até que a contagem seja concluída. | |
--kill-process-after-error |
Normalmente, quando o Monkey é interrompido devido a um erro, o aplicativo que apresentou falha permanecerá em execução. Quando essa opção estiver configurada, o sistema será sinalizado para interromper o processo em que o erro ocorreu. Em uma conclusão normal, isto é, realizada corretamente, os processos iniciados não são interrompidos, e o dispositivo permanece no último estado observado após o evento final. | |
--monitor-native-crashes |
Observa e informa falhas que ocorrem no código nativo do sistema Android. Se --kill-process-after-error for definido, o sistema será interrompido. | |
--wait-dbg |
Impede a execução do Monkey até que um depurador seja vinculado a ele. |