Integrar o Test Lab ao seu sistema de CI/CD

1. Introdução

Última atualização:07/04/2022

Como executar testes de dispositivos móveis com sistemas de CI/CD

Realizar testes em dispositivos móveis pode ser difícil: muitos apps são executados em diferentes plataformas, dispositivos e versões da API. Os desenvolvedores de apps querem testar o maior número possível de configurações para detectar problemas antes dos usuários. 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 é escalonado, especialmente para sistemas de integração/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 seus apps nos dispositivos dos usuários, o Firebase Test Lab hospeda diversos dispositivos móveis físicos e virtuais nos nossos data centers. Também fornecemos o Google Cloud CLI, uma ferramenta de linha de comando independente de plataforma que orquestra testes em execução nos dispositivos dos nossos data centers. A gcloud CLI simplifica a integração da solução de testes baseada na nuvem do Test Lab nos fluxos de trabalho de CI/CD.

Suporte multiplataformas

O Test Lab oferece soluções de teste para apps Android e iOS e suporte especializado para jogos para dispositivos móveis, como Unity. As opções de teste abrangem estruturas de teste conhecidas, como Android Espresso, UI Automator e iOS XCTest. Com nosso rastreador automatizado, o Robo, o Test Lab pode até executar testes sem qualquer código.

Nenhum requisito de hardware

O Test Lab hospeda dispositivos físicos nos data centers do Google e hospeda dispositivos virtuais no Google Cloud. Basta enviar os testes ao Test Lab e aguardar os resultados.

Rapidez e confiança

A execução de muitos casos de teste simultâneos pode levar muito tempo, bloqueando processos de CI/CD. Com o Test Lab, é possível fragmentar facilmente os testes e executá-los em vários dispositivos ao mesmo tempo. Também é possível detectar inconsistência, um ponto problemático comum de testes em dispositivos móveis.

Conteúdo

  • 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 de dispositivos móveis usando a CI do Jenkins
  • Como configurar testes para escalonar verticalmente 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 do zero, vai precisar do Android Studio para executar um teste do Android ou do XCode para executar um teste do iOS. Ou traga a si mesmo e nós forneceremos 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 contenha testes instrumentados para serem executados em dispositivos de hardware ou emuladores. Se você já tem uma base de código funcional, crie seus próprios APKs ou use o BasicSample para Espresso.

Para criar APKs usando comandos do Gradle, é necessário instalar o SDK do Android. Se o Android Studio não estiver instalado na máquina, instale o Android Studio e o SDK do Android e configure o ambiente ANDROID_HOME com o diretório do SDK do Android. Por exemplo, no seu 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 seguintes comandos 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 para clonar e criar, 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, você pode usar as seguintes opções para fazer o download dos 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ção app-debug-test-unaligned.apk, que estão localizados em NotePad/app/build/outputs/apk/.

Se você tiver um código-fonte funcional para um app iOS, poderá programar um XCTest e criar um arquivo ZIP usando o app e os 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 o ambiente local do SDK do Google Cloud. Para saber mais, consulte Iniciar testes com a CLI gcloud .

Configurar a CLI gcloud

  1. Faça o download do SDK Google Cloud, que inclui a ferramenta gcloud CLI.
  2. Verifique se a instalação está atualizada:
gcloud components update
  1. Faça login na CLI gcloud usando sua Conta do Google:
gcloud auth login
  1. Defina seu projeto do Firebase na CLI gcloud, em que PROJECT_ID é o ID do projeto do Firebase. É possível encontrar o ID do projeto 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 tem 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 API de nível 28. Se quiser usar um dispositivo diferente, verifique os dispositivos disponíveis.

Usando o app e testando os APKs criados em "Criar um APK de app Android e de teste", execute um teste de instrumentação do Android usando 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 qualquer uma das seguintes opções:

  • Resumo do gcloud: quando o teste é concluído, a CLI gcloud imprime um resumo básico dos resultados do teste.
  • gcloud código de saída: após a conclusão do teste, o comando sai com 0 se o teste for aprovado. Se o teste falhar, o comando sairá 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 os resultados de uma única execução de teste.
  • Arquivo XML 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 teste. Para localizar o arquivo XML 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ê usará a CI do Jenkins, um sistema conhecido de CI, 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 pacotes 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.

Ative a CLI gcloud para 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 CLI gcloud.

Adicionar uma conta de serviço do Google Cloud para o Jenkins

As contas de serviço são contas limitadas 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 suas versões de CI.

Para criar uma conta de serviço, siga estas etapas:

  1. Abra a página Contas de serviço no Console do Google Cloud.
  2. Clique em Criar conta de serviço, adicione um Nome e uma Descrição e clique em Criar e continuar.
  3. No menu suspenso Selecionar um papel, clique em Básico e depois em Editor.
  4. 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 que você criou.

Para criar e fazer o download da chave da conta de serviço, siga estas etapas:

  1. Na página Contas de serviço do console do Google Cloud, clique no e-mail associado à conta que você criou.
  2. Selecione Chaves, clique em Adicionar chave e em Criar nova chave.
  3. Selecione JSON e clique em Criar.
  4. Quando for solicitado que você faça o download do arquivo, clique em OK. Faça o download do arquivo para um local seguro no seu computador. Você vai precisar desse arquivo mais tarde ao configurar o Jenkins.

Para saber mais sobre a criação de 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 quando concluiu a execução de um teste com a CLI gcloud. Com a API Cloud Tool Results, é possível acessar os resultados do teste de maneira programática.

  1. Abra a biblioteca de APIs do Google Developers Console.
  2. 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 é exibida.
  3. Clique em Ativar API na página de visão geral de cada API.

Instalar e configurar o Jenkins

Você pode instalar e configurar a CI do Jenkins no Linux, no macOS, no Windows e em muitos outros ambientes. Alguns detalhes deste codelab são específicos para instalar e executar a 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 Linux ou Windows, siga as instruções para instalar o Jenkins. Depois de instalar o Jenkins, siga as mesmas instruções de instalação do Jenkins para concluir a configuração e acessar o painel do Jenkins usando http://localhost:8080.

Verificar os plug-ins instalados

O Jenkins oferece suporte a 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, você precisa instalar o plug-in do SDK do GCloud.

  1. No painel do Jenkins, clique em Manage Jenkins e, em seguida, clique em Manage Plugins.
  2. Pesquise e instale os plug-ins Git e GCloud SDK, caso eles ainda não tenham sido instalados.

Configurar o local dos SDKs do Android e do Google Cloud

Agora você vai instruir o Jenkins a encontrar o SDK Google Cloud e o SDK do Android.

Para configurar os SDKs do Google Cloud e do Android para o Jenkins, siga estas etapas:

  1. No painel do Jenkins, clique em Manage Jenkins e, em seguida, clique em Global Tool Configuration.
  2. Na seção SDK Google Cloud, clique em Adicionar SDK Google Cloud.
  3. No campo Nome, insira um nome para a instância do SDK Google Cloud que seja fácil de lembrar, por exemplo, GCloud-SDK.
  4. Insira o diretório inicial do SDK do Google Cloud, por exemplo, /opt/google-cloud-sdk.
  5. Clique em Salvar.
  6. Para configurar as propriedades do sistema para os SDKs do Android e do Google Cloud, abra Painel > Gerenciar Jenkins > Configurar sistema.
  7. Marque a caixa de seleção Variáveis de ambiente e clique em Adicionar.
  8. No campo Nome, digite ANDROID_HOME. No campo Value, insira o local do SDK do Android, por exemplo, /opt/Android/Sdk.
  9. Marque a caixa de seleção Tool Locations e clique em Add. No menu suspenso Nome, selecione o nome da instância do SDK Google Cloud que você adicionou em "Global Tool Configuration".
  10. No campo Home, insira o local do SDK Google Cloud, por exemplo, /opt/google-cloud-sdk.
  11. Clique em Salvar.

Adicionar as credenciais da sua 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 os comandos da CLI gcloud.

  1. No painel do Jenkins, clique em Manage Jenkins e, em seguida, clique em Manage Credentials.
  2. Na seção Stores scope to Jenkins, clique no link de domínio (global) e depois em Add Credentials.
  3. No menu suspenso Tipo, selecione Conta de serviço do Google da chave privada.
  4. No campo Nome do projeto, insira o nome do projeto do Firebase.
  5. Selecione Chave JSON e clique em Procurar e navegue até o local onde você salvou a chave da conta de serviço.
  6. Clique em Criar.

Agora você está pronto para configurar a versão automatizada do Jenkins para o Test Lab.

4. Executar testes do Test Lab com a CI do Jenkins

Agora que o Jenkins está configurado, vamos juntar tudo e executar o mesmo teste usando o Jenkins.

Configure o Jenkins para executar versões automatizadas e testes sempre que as atualizações do seu app forem verificadas. Você também pode configurar o Jenkins para executar builds periodicamente. Para saber mais sobre como configurar versões no Jenkins, consulte Como configurar versões automáticas.

Criar e configurar o projeto do Jenkins

Crie um projeto para executar o teste de integração contínua do seu app com o Test Lab.

Criar um projeto do Jenkins

  1. Abra o painel do Jenkins em http://localhost:8080.
  2. No painel do Jenkins, clique em New Item.
  3. 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.
  4. Clique em OK. Para concluir as configurações do projeto, conclua as seções restantes em sequência.

Configurar o gerenciamento do código-fonte

  1. Na guia Gerenciamento de código-fonte, selecione Git.
  2. Digite 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. Ative a autenticação do Google Cloud seguindo estas etapas:

  1. Na guia Build Environment, marque a caixa de seleção GCloud SDK authentication e selecione o nome da instalação que você escolheu ao adicionar as informações de instalação do Google Cloud.
  2. 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

  1. Role para baixo até a seção Build, clique em Add build step e selecione Execute shell.
  2. Adicione uma etapa de build para executar os seguintes comandos no diretório principal do seu aplicativo:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Adicionar uma etapa de criação da CLI gcloud ao Jenkins

Agora você já pode adicionar uma etapa de versão 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 Execute 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 até a parte de baixo da página e salve. Você será redirecionado para a página inicial do novo projeto.

Executar testes com o Jenkins

Agora você está pronto para criar o projeto do Jenkins e executar um teste manual como o realizado com a CLI gcloud.

Para executar o teste com o Jenkins, siga estas etapas:

  1. Para acionar o build manualmente, clique em Build Now (criar agora).
  2. Verifique o progresso e os resultados clicando no novo build > Console Output.

Caso não veja 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 conjuntos de testes

Quando quiser executar muitos testes simultâneos, siga estas práticas recomendadas para garantir que seus testes sejam executados de maneira rápida e confiável.

Aumente a cobertura em várias configurações de dispositivos

É fácil adicionar vários dispositivos à etapa de build da CLI gcloud. Além disso, 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 o nível 30 da API na orientação retrato e em inglês.
  • Um Samsung Galaxy S20 físico com nível 29 da API na orientação paisagem e localidade em francês
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 os argumentos em um só lugar ou com o sistema de controle de origem, especifique esses argumentos em um arquivo de argumentos formatado em 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 a fragmentação.

Para ativar a fragmentação, use o canal gcloud beta e adicione a sinalização -num-uniform-shards ou -test-targets-for-shard à etapa de build da CLI gcloud. Por exemplo, para fragmentar seus testes em cinco execuções e executá-los 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 inconsistência

Os testes em dispositivos móveis muitas vezes podem ser instáveis. Às vezes, os testes são aprovados e outras vezes podem falhar, mesmo com a mesma configuração. Para detectar se um teste com falha estava instável, use a sinalização –num-flaky-test-attempts da gcloud CLI. Essa sinalização especifica o número de vezes que uma execução de teste precisa ser repetida se um ou mais dos casos de teste falharem por qualquer motivo.

Por exemplo, para executar novamente casos de teste com falha mais três vezes após a falha inicial, 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 apps e fez testes de APKs e executou um teste de instrumentação com o Test Lab usando a CLI gcloud. Você também configurou um projeto do Jenkins para automatizar esse mesmo teste.

Agora você conhece as principais etapas para integrar o Test Lab ao seu sistema de CI/CD.

A seguir

Consulte Como configurar a CI usando o Pacote de emuladores do Firebase.

Sugestões de leitura

Documentos de referência