1. Introdução
Última atualização:07/04/2022
Como executar testes em dispositivos móveis com sistemas de CI/CD
Executar testes em dispositivos móveis pode ser difícil: muitos apps funcionam em diferentes plataformas, dispositivos e versões de API. Os desenvolvedores de apps querem testar o máximo de configurações possível para detectar problemas antes que os usuários o façam. No entanto, as restrições de custo e recursos limitam o número de dispositivos de teste e a quantidade de manutenção manual em que os desenvolvedores individuais podem investir. Quando o processo de desenvolvimento aumenta, especialmente para sistemas de integração contínua/desenvolvimento contínuo (CI/CD), o processo de teste precisa ser automatizado, minimizando o custo e o esforço de manutenção.
Para ajudar você a entender o desempenho dos apps nos dispositivos dos usuários, o Firebase Test Lab hospeda uma variedade de dispositivos móveis físicos e virtuais nos nossos data centers. Também oferecemos a Google Cloud CLI, uma ferramenta de linha de comando independente de plataforma que organiza a execução de testes nos dispositivos dos nossos data centers. A gcloud CLI facilita a integração da solução de teste baseada na nuvem do Test Lab aos fluxos de trabalho de CI/CD atuais.
Suporte multiplataformas
O Test Lab oferece soluções de teste para apps Android e iOS, além de suporte especializado para jogos para dispositivos móveis, como o Unity. As opções de teste abrangem frameworks de teste conhecidos, como Android Espresso, UI Automator e iOS XCTest. Usando nosso rastreador automatizado, o Robo, o Test Lab pode até executar testes sem código de teste.
Sem requisitos de hardware
O Test Lab hospeda dispositivos físicos em data centers do Google e dispositivos virtuais no Google Cloud. Basta enviar seus testes para o Test Lab e aguardar os resultados.
Rapidez e confiança
Executar muitos casos de teste simultâneos pode levar muito tempo, bloqueando os processos de CI/CD. Com o Test Lab, é fácil fragmentar e executar testes em vários dispositivos em paralelo. Também é possível detectar instabilidade, um problema comum em testes para dispositivos móveis.
O que você vai aprender
- Como criar artefatos de teste
- Como executar um teste para dispositivos móveis usando a CLI gcloud
- Como configurar a CI do Jenkins
- Como executar testes em dispositivos móveis usando a CI do Jenkins
- Como configurar testes para aumentar a escala com sistemas de CI
Este codelab se concentra na execução de testes. Conceitos e blocos de códigos sem relevância não serão abordados. Eles são incluídos somente para você copiar e colar.
Pré-requisitos
Se você preferir criar tudo do zero, vai precisar do Android Studio para executar um teste do Android ou do Xcode para executar um teste do iOS. Ou apenas venha, e nós vamos fornecer os artefatos.
2. Executar um teste com a CLI gcloud
Criar um APK de app Android e um APK de teste
Para executar um teste com o Test Lab, comece criando um APK de app Android e um APK de teste, que contém testes instrumentados para serem executados em dispositivos de hardware ou emuladores. Se você já tiver uma base de código funcional, poderá criar seus próprios APKs ou usar o BasicSample para Espresso.
Para criar APKs usando comandos do Gradle, instale o SDK do Android. Se o Android Studio não estiver instalado na sua máquina, instale o Android Studio e o SDK do Android e defina o ambiente ANDROID_HOME
com o diretório do SDK do Android. Por exemplo, no arquivo ~/.bash_profile
, adicione a seguinte linha:
export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk # For MacOS
Em seguida, execute os comandos a seguir para clonar o código e criar APKs:
git clone https://github.com/android/testing-samples.git cd testing-samples/ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Depois de executar os comandos de clonagem e build, você pode encontrar o APK do app e o APK de teste nos seguintes locais:
app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Como alternativa, use as seguintes opções para receber os APKs de teste e do app:
- Para criar APKs no Android Studio, siga as instruções em Testar no Android Studio.
- Faça o download do app Notepad de exemplo. Use o arquivo binário
app-debug-unaligned.apk
e o arquivo de testes de instrumentaçãoapp-debug-test-unaligned.apk
, que estão localizados emNotePad/app/build/outputs/apk/
.
Se você tiver um código-fonte funcional para um app iOS, poderá gravar um XCTest e criar um arquivo ZIP do app e dos testes.
Usar a CLI gcloud para executar um teste com o Test Lab
Nesta seção, você vai criar um projeto do Firebase e configurar seu ambiente local do SDK do Google Cloud. Para saber mais, consulte Começar a testar com a gcloud CLI .
Configurar a CLI gcloud
- Faça o download do SDK do Google Cloud, que inclui a ferramenta de linha de comando gcloud.
- Verifique se a instalação está atualizada:
gcloud components update
- Faça login na CLI gcloud usando sua Conta do Google:
gcloud auth login
- Defina seu projeto do Firebase na CLI gcloud, em que
PROJECT_ID
é o ID do projeto do Firebase. O ID do projeto está no URL do console do Firebase, que segue esta convenção de nomenclatura:https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID
Se você não tiver um projeto do Firebase, crie um no Console do Firebase.
Executar um teste usando os APKs criados
Nesta seção, você vai executar um teste de instrumentação no dispositivo padrão do Test Lab, que é um Pixel 3 com nível 28 da API. Se quiser usar outro dispositivo, confira os disponíveis.
Usando o app e os APKs de teste criados em "Criar um APK de app Android e um APK de teste", execute um teste de instrumentação Android com o seguinte comando:
gcloud firebase test android run \ --type instrumentation \ --app app/build/outputs/apk/debug/app-debug.apk \ --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Analisar os resultados do teste
É possível analisar os resultados do teste usando uma das seguintes opções:
- Resumo do
gcloud
: quando o teste termina, a CLI gcloud imprime um resumo básico dos resultados. gcloud
código de saída: depois que o teste é concluído, o comando sai com 0 se o teste for aprovado. Se o teste falhar, o comando será encerrado com um código de saída diferente de zero.- Console do Firebase: a CLI gcloud imprime um link para o console do Firebase. O link segue a convenção de nomenclatura
https://console.firebase.google.com/project/PROJECT_ID/testlab/...
. Para saber mais, consulte Interpretar resultados de uma única execução de teste. - Arquivo XML do JUnit: a CLI gcloud imprime o seguinte:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]
test-lab-xxxxx/xxxxx
é o bucket do Cloud Storage que armazena artefatos e resultados de testes. Para localizar o arquivo XML do JUnit que contém os resultados do teste, abra o link e navegue até blueline-28-en-portrait/test_result_1.xml
.
3. Configurar com a CI do Jenkins
Nesta seção, você vai usar a CI do Jenkins, um sistema de CI conhecido, para executar testes com o Test Lab. Se você quiser usar um sistema de CI diferente, consulte as práticas recomendadas avançadas para executar grandes conjuntos de testes e a documentação de outros sistemas de CI, como Bitrise e Circle CI. É possível usar o Flank como alternativa à CLI gcloud.
Ativar a CLI gcloud para o Jenkins
Antes de usar o Test Lab com o Jenkins, ative as APIs necessárias e configure uma conta de serviço que o Jenkins possa usar para autenticar com a gcloud CLI.
Adicionar uma conta de serviço do Google Cloud para o Jenkins
As contas de serviço são limitadas e destinadas a integrações de serviços. Essas contas oferecem controle refinado para serviços específicos e não estão sujeitas a verificações de spam ou solicitações de captcha, o que poderia bloquear seus builds de CI.
Para criar uma conta de serviço, siga estas etapas:
- Abra a página Contas de serviço no console do Google Cloud.
- Clique em Criar conta de serviço, adicione um Nome e uma Descrição e clique em Criar e continuar.
- No menu suspenso Selecionar um papel, selecione Básico e depois Editor.
- Clique em Continuar e em Concluído.
Em seguida, crie e faça o download de uma chave de autenticação que o Jenkins pode usar para se autenticar como a conta de serviço criada.
Para criar e fazer o download da chave da conta de serviço, siga estas etapas:
- Na página Contas de serviço do console do Google Cloud, clique no e-mail associado à conta que você criou.
- Selecione Chaves e clique em Adicionar chave e Criar nova chave.
- Selecione JSON e clique em Criar.
- Quando for solicitado a fazer o download do arquivo, clique em OK. Faça o download do arquivo em um local seguro no seu computador. Você vai precisar desse arquivo mais tarde ao configurar o Jenkins.
Para saber mais sobre como criar contas de serviço, consulte Como criar uma conta de serviço.
Ativar as APIs do Google Cloud necessárias
A API Cloud Testing permite executar testes na infraestrutura do Google. Você ativou essa API ao concluir "Executar um teste com a CLI gcloud". A API Cloud Tool Results permite acessar os resultados dos testes de maneira programática.
- Abra a biblioteca de APIs do Google Developers Console.
- Na barra de pesquisa na parte de cima do console do Firebase, insira o nome de cada API necessária ( API Cloud Testing e API Cloud Tool Results). A página de visão geral da API solicitada vai aparecer.
- Clique em Ativar API na página de visão geral de cada API.
Instalar e configurar o Jenkins
A CI do Jenkins pode ser instalada e configurada no Linux, macOS, Windows e muitos outros ambientes. Alguns detalhes deste codelab são específicos da instalação e execução da CI do Jenkins no Linux, incluindo o uso de barras (/) nos caminhos de arquivos.
Para fazer o download e instalar o Jenkins em um computador com o Linux ou o Windows em execução, siga as instruções para instalar o Jenkins. Depois de instalar o Jenkins, siga as mesmas instruções de instalação para concluir a configuração e acessar o painel do Jenkins usando http://localhost:8080.
Verificar os plug-ins instalados
O Jenkins é compatível com diferentes sistemas de controle de versões. Neste codelab, você vai usar o Git para executar o teste anterior. Para ter uma experiência melhor ao executar a CLI gcloud, instale o plug-in do SDK GCloud.
- No painel do Jenkins, clique em Manage Jenkins e em Manage Plugins.
- Pesquise e instale os plug-ins Git e SDK do GCloud (se ainda não estiverem instalados).
Configurar o local dos SDKs do Android e do Google Cloud
Agora você instrui o Jenkins sobre onde encontrar o SDK do Google Cloud e o SDK do Android.
Para configurar os SDKs do Google Cloud e do Android para o Jenkins, siga estas etapas:
- No painel do Jenkins, clique em Manage Jenkins e em Global Tool Configuration.
- Na seção SDK do Google Cloud, clique em Adicionar SDK do Google Cloud.
- No campo Nome, insira um nome fácil de lembrar para a instância do SDK do Google Cloud, por exemplo, GCloud-SDK.
- Insira seu diretório inicial do SDK do Google Cloud, por exemplo,
/opt/google-cloud-sdk
. - Clique em Salvar.
- Configure as propriedades de todo o sistema para os SDKs do Android e do Google Cloud abrindo Painel > Gerenciar Jenkins > Configurar sistema.
- Marque a caixa de seleção Variáveis de ambiente e clique em Adicionar.
- No campo Nome, insira ANDROID_HOME. No campo Valor, insira o local do SDK do Android, por exemplo,
/opt/Android/Sdk
. - Marque a caixa de seleção Locais da ferramenta e clique em Adicionar. No menu suspenso Nome, selecione o nome da instância do SDK do Google Cloud que você adicionou em "Configuração global de ferramentas".
- No campo Home, insira o local do SDK do Google Cloud, por exemplo,
/opt/google-cloud-sdk
. - Clique em Salvar.
Adicionar as credenciais da conta de serviço ao Jenkins
Agora, adicione as credenciais da conta de serviço da CLI gcloud ao Jenkins para que ele possa autenticar e executar comandos da CLI gcloud.
- No painel do Jenkins, clique em Manage Jenkins e depois em Manage Credentials.
- Na seção Stores scoped to Jenkins, clique no link de domínio (global) e em Add Credentials.
- No menu suspenso Tipo, selecione Conta de serviço do Google da chave privada.
- No campo Nome do projeto, insira o nome do projeto do Firebase.
- Selecione Chave JSON, clique em Procurar e navegue até o local onde você salvou a chave da conta de serviço.
- Clique em Criar.
Agora você pode configurar o build automatizado do Jenkins para o Test Lab.
4. Executar testes do Test Lab com a CI do Jenkins
Agora que você configurou o Jenkins, vamos juntar tudo e executar o mesmo teste usando o Jenkins.
É possível configurar o Jenkins para executar builds e testes automatizados sempre que houver inserções de atualização no app. Você também pode configurar o Jenkins para executar builds periodicamente. Para saber como configurar builds no Jenkins, consulte Configurar builds automáticos.
Criar e configurar seu projeto do Jenkins
Crie um projeto para executar testes de integração contínua do seu app com o Test Lab.
Criar um projeto do Jenkins
- Abra o painel do Jenkins acessando http://localhost:8080.
- No painel do Jenkins, clique em New Item.
- Digite um nome para seu projeto no campo Item name e clique em Freestyle project para criar um projeto que usa uma única configuração de build.
- Clique em OK. Para concluir as configurações do projeto, preencha as seções restantes em sequência.
Configurar o gerenciamento de código-fonte
- Na guia Gerenciamento de código-fonte, selecione Git.
- Insira https://github.com/android/testing-samples.git no campo URL do repositório.
Configurar o ambiente de build
A seção "Ambiente de build" permite configurar as características do build. Para ativar a autenticação do Google Cloud, siga estas etapas:
- Na guia Ambiente de build, marque a caixa de seleção Autenticação do SDK gcloud e selecione o nome da instalação escolhido ao adicionar as informações de instalação do Google Cloud.
- No menu suspenso Credenciais do Google, selecione as credenciais da conta de serviço que você configurou.
Adicionar etapas de build do Gradle para recriar pacotes de APK
- Role a tela para baixo até a seção Build, clique em Add build step e selecione Execute shell.
- Adicione uma etapa de build para executar os seguintes comandos no diretório principal do aplicativo:
cd ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Adicionar uma etapa de build da CLI gcloud ao Jenkins
Agora você pode adicionar uma etapa de build ao Jenkins para executar o Test Lab usando a linha de comando da CLI gcloud.
Para adicionar a etapa de build da CLI gcloud, adicione uma nova etapa de build Executar shell e insira o seguinte comando:
gcloud config set project PROJECT_ID gcloud firebase test android run \ --app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk --test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Depois de concluir a configuração do projeto, role a tela até a parte de baixo da página e salve a configuração. Você será redirecionado para a página inicial do novo projeto.
Executar testes com o Jenkins
Agora você pode criar o projeto do Jenkins e executar um teste como o manual que você fez com a CLI gcloud.
Para executar o teste com o Jenkins, siga estas etapas:
- Para acionar a build manualmente, clique em Build Now.
- Para verificar o progresso e os resultados, clique na nova build > Saída do console.
Se não houver erros, parabéns! Você acabou de configurar um projeto e executar um teste em um dispositivo Pixel 2 com um clique. Se você encontrar erros, consulte Solução de problemas.
5. Práticas recomendadas avançadas para executar grandes pacotes de teste
Quando você quiser executar muitos testes simultâneos, siga estas práticas recomendadas para garantir que eles sejam executados de forma rápida e confiável.
Aumentar a cobertura em várias configurações de dispositivos
É fácil adicionar vários dispositivos à etapa de build da gcloud CLI. Você pode verificar e escolher dispositivos, versões, localidades e orientações disponíveis. Por exemplo, o comando a seguir executa testes em dois dispositivos:
- Um Google Pixel 2 virtual com nível 30 da API na orientação retrato e na localidade em inglês
- Um Samsung Galaxy S20 físico com API de nível 29 na orientação paisagem e a localidade francesa
gcloud firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --device model=Pixel2,version=30,locale=en,orientation=portrait \ --device model=x1q,version=29,locale=fr,orientation=landscape
Usar um arquivo de configuração YAML da CLI gcloud
Se preferir gerenciar seus argumentos em um só lugar ou com seu sistema de controle de origem, especifique-os em um arquivo de argumentos com formatação YAML. Para saber como usar esse recurso, execute gcloud topic arg-files
.
Fragmentar testes para execução em paralelo
A fragmentação de testes divide um conjunto de testes em subgrupos (fragmentos) que são executados separadamente e de forma isolada. O Test Lab executa automaticamente cada fragmento em paralelo usando vários dispositivos, o que permite que ele conclua todo o conjunto de testes mais rapidamente. Para mais informações, consulte Ativar o fragmentação.
Para ativar o sharding, use o canal gcloud beta
e adicione a flag –num-uniform-shards ou –test-targets-for-shard à etapa de build da CLI gcloud. Por exemplo, para dividir seus testes em cinco execuções e executar em paralelo, execute os seguintes comandos:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-uniform-shards 5
Ativar a detecção de instabilidade
Os testes em dispositivos móveis costumam ser instáveis. Às vezes, os testes são aprovados, e outras vezes, eles podem falhar, mesmo com a mesma configuração. É possível detectar se um teste com falha estava instável usando a flag –num-flaky-test-attempts da CLI gcloud. Essa flag especifica o número de vezes que uma execução de teste deve ser repetida se um ou mais casos de teste falharem por qualquer motivo.
Por exemplo, para executar novamente casos de teste com falha mais três vezes após a execução inicial com falha, especifique o seguinte:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-flaky-test-attempts 3
6. Parabéns
Parabéns! Você executou seu primeiro teste do Test Lab com um sistema de CI.
Você criou APKs de app e de teste e executou um teste de instrumentação com o Test Lab usando a CLI gcloud. Você também configura um projeto do Jenkins para automatizar o mesmo teste.
Agora você conhece as principais etapas para integrar o Test Lab ao seu sistema de CI/CD.
A seguir
Confira Como configurar a CI usando o Pacote do emulador do Firebase.
Leitura adicional
- Iniciar testes com sistemas de CI | Documentação do Firebase
- Iniciar testes com a gcloud CLI | Documentação do Firebase