Monkey para testes de IU/aplicativo

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 que está desenvolvendo, de uma maneira aleatória mas que pode ser repetida.

Visão geral

O Monkey é uma ferramenta de linha de comando que pode ser executada em qualquer instância de emulador ou em um 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 aplicativo 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 assiste 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 as bloqueia.
  • Se seu aplicativo falhar ou receber qualquer tipo de exceção não tratada, 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 a partir de 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 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. Esta é 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) traz 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 suas atividades. O nível 2 dispõe 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 novamente o Monkey com o mesmo valor de semente, ele 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 down em algum lugar da tela, uma série de movimentos pseudoaleatórios e um evento up.
--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 "basic". Os eventos de navegação consistem em up/down/left/right, como entrada de um dispositivo de entrada direcional.
--pct-majornav <percent> Ajusta a porcentagem de eventos de navegação "major". Esses são eventos de navegação que geralmente causam ações na IU, como o botão central em um teclado de 5 direções, a tecla de retorno ou a tecla de menu.
--pct-syskeys <percent> Ajusta a porcentagem de eventos de tecla "system". Essas são as chaves geralmente 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. Este é 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 maneira, o Monkey permitirá que o sistema visite somente as atividades dentro desses pacotes. Se seu aplicativo exigir 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 por 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 com a 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.
Depuração --dbg-no-events Quando especificado, o Monkey executará o lançamento inicial em uma atividade de teste, mas não gerará mais eventos. Para conseguir resultados melhores, combine com -v, uma ou mais restrições de pacote e um acelerador diferente de zero para manter o Monkey em execução por 30 segundos ou mais. Isso gera um ambiente onde é possível monitorar as transições de pacote invocadas pelo aplicativo.
--hprof Se configurada, essa opção 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 mais informações sobre como analisar relatórios de criação de perfil, consulte Definir o perfil do desempenho do aplicativo.
--ignore-crashes Normalmente, o Monkey será interrompido quando o aplicativo falhar ou sofrer qualquer tipo de exceção não gerenciada. 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 aplicativo detectar qualquer tipo de erro de tempo limite, como a caixa de diálogo "O aplicativo 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 aplicativo apresentar qualquer tipo de erro de permissão, por exemplo, se ele tentar iniciar uma atividade que requer determinadas permissões. 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 permanece em execução. Quando essa opção estiver configurada, ela sinalizará ao sistema para interromper o processo em que o erro ocorreu. Em uma conclusão normal, isto é, bem-sucedida, 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.