Este guia descreve como executar um teste de instrumentação, Robo ou loop de jogo usando a CLI gcloud .
Para obter uma lista completa de comandos gcloud
que você pode usar com seu aplicativo Android no Test Lab, visite a documentação de referência para gcloud firebase test android
.
Antes de você começar
Se ainda não o fez, adicione o Firebase ao seu projeto Android .
Etapa 1. Configurar a CLI gcloud
- Baixe o SDK do Google Cloud.
- Certifique-se de que sua instalação esteja atualizada:
gcloud components update
- Faça login na CLI do gcloud usando sua conta do Google:
gcloud auth login
- Defina seu projeto Firebase em gcloud, onde PROJECT_ID é o ID do seu projeto Firebase:
gcloud config set project PROJECT_ID
Isso inclui a ferramenta gcloud CLI.
Etapa 2. Verifique os dispositivos de teste disponíveis
Use os comandos gcloud a seguir para ver os dispositivos de teste e as 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.
Saída de exemplo
- A coluna
models describe
: Obtenha mais informações sobre umMODEL_ID
Android específico.gcloud firebase test android models describe MODEL_ID
A saída contém a marca do modelo do dispositivo, fabricante, versões do sistema operacional, níveis de API compatíveis, interfaces binárias de aplicativo (ABI) compatíveis, datas de lançamento e se o dispositivo é físico ou virtual.
versions list
: obtenha uma lista das versões do 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
eVERSION
) 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 observado na colunaTAGS
será usado.Saída de exemplo
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 uma localidade. Se você não especificar as localidades para testar, o inglês será usado como a localidade padrão.
Executando testes
Agora que você conhece a variedade de modelos de dispositivos, localidades e versões de SO disponíveis para testar seu aplicativo, pode especificar dispositivos usando o gcloud firebase test android run
e o sinalizador --device
para executar testes Robo ou de instrumentação.
Executando o teste Robo
Mesmo se você não tiver nenhum teste de instrumentação, ainda poderá procurar por bugs em seu aplicativo. Use o teste Robo para realizar uma revisão automatizada da interface do usuário do seu aplicativo. O teste Robo testa o aplicativo realizando uma análise estática dos vários caminhos por meio da interface do usuário do aplicativo e, em seguida, rastreando o aplicativo para encontrar travamentos e outros possíveis problemas.
Vamos começar executando um 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
O parâmetro --type robo
é implícito se nenhum valor --type
for especificado. 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 para especificar todos esses argumentos na linha de comando, você pode opcionalmente especificar seus argumentos em um arquivo de argumento no formato YAML. Execute gcloud topic arg-files
para saber como usar esse recurso.
Consulte a seção Analisar os resultados do teste para saber como investigar os resultados do teste Robo.
Executando seus testes de instrumentação
Agora, use a ferramenta de linha de comando gcloud
para executar os testes Espresso do aplicativo Notepad nas configurações de seu dispositivo Android especificado. Use o tipo de teste de instrumentation
para executar os testes em app-debug-test-unaligned.apk
da seguinte forma:
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
O parâmetro --type instrumentation
estará implícito se um APK de teste tiver sido especificado com --test
. Como alternativa para especificar todos esses argumentos na linha de comando, você pode opcionalmente especificar seus argumentos em um arquivo de argumento no formato YAML. Execute gcloud topic arg-files
para saber como usar esse recurso.
A CLI gcloud é compatível com Android Test Orchestrator . Orchestrator requer AndroidJUnitRunner v1.1 ou superior. Para habilitá-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 --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 teste que falhou foi realmente instável ou não usando --num-flaky-test-attempts
, que especifica o número de vezes que uma execução de teste deve ser repetida 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 à compilação 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:
- Abra o link do Firebase console que a ferramenta
gcloud
imprimiu acima da tabela de resultados do teste em seu terminal. - Clique em uma execução de teste na lista desse link para abrir a página de detalhes dessa execução.
- Clique em Test results para acessar o bucket do Cloud Storage com os resultados do teste dessa execução.
- 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:
A saída de sua execução de 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 o Firebase Test Lab para resultados do Android .
Login personalizado e entrada de texto com teste Robo
O teste Robo conclui 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 concluir telas de login personalizadas usando credenciais de 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 campos de texto em seu aplicativo, use o parâmetro --robo-directives
e forneça uma lista separada por vírgulas de pares key-value
, em que a key
é o nome do recurso Android do elemento de interface 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"). Campos EditText
são suportados, mas não campos de texto em elementos de interface do usuário WebView
.
Por exemplo, você pode 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 sinalizações disponíveis que permitem executar testes com diferentes especificações:
Android Test Orchestrator sinalizador : um sinalizador para habilitar o Orchestrator, uma ferramenta que permite executar cada um dos testes de 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 de loop de jogo : um conjunto de sinalizadores de configuração que ativam e controlam um "modo de demonstração" para simular as ações do jogador em aplicativos de jogos. Saiba mais sobre como executar testes de loop de jogo com o Test Lab .
Sinalizador Uniform Sharding (em beta) : um sinalizador que especifica o número de estilhaços 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 que você teste o desempenho do seu aplicativo em redes não confiáveis ou imprevisíveis.
Como criar scripts de comandos gcloud com o 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, seriam executados usando a linha de comando gcloud. O script bash de exemplo a seguir executa um teste de instrumentação com um tempo limite de dois minutos e relata 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 do 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.
Códigos de saída de script 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. Esse erro pode 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. |