Comece a testar com a CLI gcloud

Este guia descreve como executar um teste de instrumentação, Robo ou Game Loop usando a CLI gcloud .

Para obter uma lista completa dos comandos gcloud que você pode usar com seu aplicativo Android no Test Lab, visite a documentação de referência do gcloud firebase test android .

Antes de você começar

Adicione o Firebase ao seu projeto Android , caso ainda não o tenha feito.

Etapa 1. Configurar a CLI gcloud

  1. Baixe o SDK do Google Cloud
  2. Isso inclui a ferramenta CLI gcloud.

  3. Certifique-se de que sua instalação esteja atualizada:
    gcloud components update
    
  4. Faça login na CLI gcloud usando sua Conta do Google:
    gcloud auth login
    
  5. Defina seu projeto do Firebase no gcloud, onde PROJECT_ID é o ID do seu projeto do Firebase:
    gcloud config set project PROJECT_ID
    

Passo 2. Verifique os dispositivos de teste disponíveis

Use os comandos gcloud a seguir para visualizar dispositivos de teste e localidades disponíveis para seu teste.

Como opção, você também pode baixar o aplicativo Notepad de amostra para começar a executar os comandos imediatamente. Use o arquivo binário app-debug-unaligned.apk e o arquivo de testes de instrumentação app-debug-test-unaligned.apk , que estão localizados em NotePad/app/build/outputs/apk/ .

  • models list : obtenha uma lista atual de dispositivos Android disponíveis para você testar.

    gcloud firebase test android models list
    

    Na saída do comando:

    • A coluna MODEL_ID contém o identificador que você pode usar posteriormente para executar testes no modelo do dispositivo.
    • A coluna OS_VERSION_ID contém as versões do sistema operacional suportadas pelo dispositivo.

    Exemplo de saída

    gcloud firebase test android models list output

  • models describe : Obtenha mais informações sobre um MODEL_ID Android específico.

    gcloud firebase test android models describe MODEL_ID
    

    A saída contém a marca do modelo do dispositivo, o fabricante, as versões do sistema operacional, os níveis de API compatíveis, as interfaces binárias de aplicativo (ABI) compatíveis, as datas de lançamento e se o dispositivo é físico ou virtual.

  • versions list : obtenha uma lista de versões de sistema operacional atualmente disponíveis para testar.

    gcloud firebase test android versions list
    

    Você pode usar um identificador de qualquer uma das duas primeiras colunas da saída do comando ( OS_VERSION_ID e VERSION ) para executar testes posteriormente em uma versão do sistema operacional Android. Se você não especificar as versões do sistema operacional Android para testar, o padrão indicado na coluna TAGS será usado.

    Exemplo de saída

    gcloud android versions list

  • locales list : obtenha a lista atual de localidades disponíveis para teste.

    gcloud firebase test android versions list
    

    A primeira coluna da saída do comando, LOCALE , contém o identificador que você pode usar posteriormente para executar testes em um código de idioma. Se você não especificar as localidades para testar, o inglês será usado como localidade padrão.

Etapa 3. Execute seu teste

Agora que você conhece a variedade de modelos de dispositivos, localidades e versões de sistema operacional disponíveis para testar seu aplicativo, você pode especificar dispositivos usando o comando gcloud firebase test android run e a sinalização --device para executar testes Robo ou de instrumentação.

Execute um teste Robo

Mesmo que você não tenha nenhum teste de instrumentação, ainda poderá procurar bugs no seu aplicativo. Use o teste Robo para realizar uma revisão automatizada da interface do usuário do seu aplicativo. O teste Robo exercita o aplicativo realizando uma análise estática dos vários caminhos através da interface do usuário do aplicativo e, em seguida, rastreia o aplicativo para encontrar falhas e outros problemas potenciais.

Para executar um teste Robo, execute o seguinte comando de exemplo:

gcloud firebase test android run \
  --type robo \
  --app app-debug-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape \
  --timeout 90s \
  --client-details matrixLabel="Example matrix label"
  • O parâmetro --type robo estará implícito se nenhum valor --type for especificado.
  • Para ajudar a identificar e localizar suas matrizes de teste no Firebase Console, você pode usar o sinalizador opcional --client-details matrixLabel="Example matrix label" para rotular sua matriz de teste.
  • Você pode ver o conjunto completo de opções de linha de comando para executar testes digitando: gcloud help firebase test android run .

Como alternativa à especificação desses argumentos na linha de comando, você pode opcionalmente especificar seus argumentos em um arquivo de argumentos formatado em YAML. Execute gcloud topic arg-files para saber como usar esse recurso.

Para saber como investigar os resultados do teste Robo, consulte Analisar os resultados do seu teste .

Execute um teste de instrumentação

Agora use a ferramenta de linha de comando gcloud para executar os testes Espresso do aplicativo Notepad nas configurações especificadas do dispositivo Android. Use o tipo de teste instrumentation para executar os testes em app-debug-test-unaligned.apk da seguinte maneira:

gcloud firebase test android run \
  --type instrumentation \
  --app app-debug-unaligned.apk \
  --test app-debug-test-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape
  --client-details matrixLabel="Example matrix label"
  • O parâmetro de instrumentação --type estará implícito se um APK de teste for especificado com --test .
  • Para ajudar a identificar e localizar suas matrizes de teste no Firebase Console, você pode usar o sinalizador opcional --client-details matrixLabel="Example matrix label" para rotular sua matriz de teste.
  • Você pode ver o conjunto completo de opções de linha de comando para executar testes digitando gcloud help firebase test android run .

Como alternativa à especificação desses argumentos na linha de comando, você pode opcionalmente especificar seus argumentos em um arquivo de argumentos formatado em YAML. Execute gcloud topic arg-files para saber como usar esse recurso.

A CLI gcloud oferece suporte ao Android Test Orchestrator . O Orchestrator requer AndroidJUnitRunner v1.1 ou superior. Para ativá-lo, use gcloud firebase test android run com o
--use-orchestrator sinalizador. Para desativá-lo, use o sinalizador --no-use-orchestrator .

Você também pode controlar como o Test Lab executa seus testes de instrumentação usando sinalizadores adicionais que não são mostrados acima. Por exemplo, você pode usar a sinalização --test-targets para testar uma única classe ou um método de classe usado pelo seu APK de teste. Você também pode descobrir se o seu teste que falhou foi realmente instável ou não usando o sinalizador --num-flaky-test-attempts , que especifica o número de vezes que uma execução de teste deve ser tentada novamente se um ou mais de seus casos de teste falhar por qualquer motivo. Para saber mais, consulte gcloud firebase test android run .

Relatórios de cobertura de código para testes de instrumentação

O Test Lab oferece suporte às ferramentas de relatório de cobertura de código EMMA e JaCoCo . Se você tiver uma das ferramentas integradas ao build do seu aplicativo, poderá obter um relatório de cobertura de código para testes do Test Lab executando gcloud firebase test android run com alguns argumentos adicionais. Se o Android Test Orchestrator não estiver ativado, use o seguinte:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \
  --directories-to-pull /sdcard/Download

Se você estiver gerando relatórios de cobertura de código enquanto usa o Android Test Orchestrator, modifique suas variáveis ​​de ambiente da seguinte maneira:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \
  --directories-to-pull /sdcard/Download

Quando o Test Lab terminar de executar seus testes, encontre seus relatórios de cobertura de código no Google Cloud Storage:

  1. Abra o link do console do Firebase que a ferramenta gcloud imprimiu acima da tabela de resultados do teste em seu terminal.
  2. Clique em uma execução de teste na lista desse link para abrir a página de detalhes dessa execução.
  3. Clique em Resultados do teste para acessar o intervalo do Cloud Storage com os resultados do teste dessa execução.
  4. Abra artifacts/coverage.ec para ver seu relatório de cobertura de código.

Analise os resultados do seu teste

Após alguns minutos, um resumo básico dos resultados do seu teste é impresso pela ferramenta gcloud:

Command test results

A saída da execução do teste de linha de comando também inclui um link para visualizar os resultados do teste. Para saber mais sobre como interpretar esses resultados, consulte Analisando resultados do Firebase Test Lab para Android .

Login personalizado e entrada de texto com teste Robo

O teste Robo completa automaticamente as telas de login que usam uma conta do Google para autenticação, a menos que você use o parâmetro --no-auto-google-login . Ele também pode preencher telas de login personalizadas usando as credenciais da conta de teste fornecidas por você. Você também pode usar esse parâmetro para fornecer texto de entrada personalizado para outros campos de texto usados ​​pelo seu aplicativo.

Para preencher os campos de texto no seu aplicativo, use o parâmetro --robo-directives e forneça uma lista separada por vírgulas de pares key-value , onde a key é o nome do recurso Android do elemento de IU de destino e o value é a string de texto . Você também pode usar esse sinalizador para dizer ao Robo para ignorar elementos específicos da interface do usuário (por exemplo, botão "logout"). Os campos EditText são suportados, mas não os campos de texto nos elementos da UI WebView .

Por exemplo, você poderia usar o seguinte parâmetro para login personalizado:

--robo-directives username_resource=username,password_resource=password

Comandos e sinalizadores disponíveis

A CLI gcloud do Test Lab tem vários comandos e sinalizadores disponíveis que permitem executar testes com especificações diferentes:

  • Sinalização do Android Test Orchestrator : uma sinalização para ativar o Orchestrator, uma ferramenta que permite executar cada um dos testes do seu aplicativo em sua própria invocação de Instrumentation . O Test Lab sempre executa a versão mais recente do Orchestrator.

  • Sinalizadores de teste do Game Loop : um conjunto de sinalizadores de configuração que ativam e controlam um "modo de demonstração" para simular ações do jogador em aplicativos de jogos. Saiba mais sobre como executar testes de Game Loop com o Test Lab .

  • Sinalizador de fragmentação uniforme (em beta) : um sinalizador que especifica o número de fragmentos nos quais você deseja distribuir uniformemente os casos de teste. Os fragmentos são executados em paralelo em dispositivos separados.

  • Sinalizador de fragmentação manual (em beta) : um sinalizador que especifica um grupo de pacotes, classes e/ou casos de teste a serem executados em um fragmento (um grupo de casos de teste). Os fragmentos são executados em paralelo em dispositivos separados.

  • Sinalizador de perfis de tráfego de rede (em beta) : um sinalizador que especifica qual perfil de rede seus testes usam com dispositivos físicos. Os perfis de rede emulam uma variedade de condições de rede, permitindo testar o desempenho do seu aplicativo em redes não confiáveis ​​ou imprevisíveis.

Script de comandos gcloud com Test Lab

Você pode usar scripts de shell ou arquivos em lote para automatizar comandos de teste de aplicativos móveis que, de outra forma, você executaria usando a linha de comando gcloud. O exemplo de script bash a seguir executa um teste de instrumentação com um tempo limite de dois minutos e informa se a execução do teste foi concluída com êxito:

if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

Códigos de saída de script

O Test Lab fornece vários códigos de saída que você pode usar para entender melhor os resultados dos testes executados usando scripts ou arquivos em lote.

Script de códigos de saída para Test Lab

Código de saída Notas
0 Todas as execuções de teste foram aprovadas.
1 Ocorreu uma falha geral. As possíveis causas incluem: um nome de arquivo que não existe ou um erro de HTTP/rede.
2 O teste foi encerrado porque foram fornecidos comandos ou argumentos desconhecidos.
10 Um ou mais casos de teste (classes testadas ou métodos de classe) em uma execução de teste não foram aprovados.
15 O Firebase Test Lab não conseguiu determinar se a matriz de teste foi aprovada ou reprovada devido a um erro inesperado.
18 O ambiente de teste para esta execução de teste não é suportado devido a dimensões de teste incompatíveis. Este erro poderá ocorrer se o nível de API do Android selecionado não for compatível com o tipo de dispositivo selecionado.
19 A matriz de teste foi cancelada pelo usuário.
20 Ocorreu um erro de infraestrutura de teste.