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 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.