Integre o Test Lab ao seu sistema CI/CD

1. Introdução

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

Como executar testes móveis com sistemas CI/CD

A execução de testes móveis pode ser difícil: muitos aplicativos são executados em diferentes plataformas, dispositivos e versões de API. Os desenvolvedores de aplicativos desejam testar o maior número possível de configurações para detectar problemas antes dos usuários. Porém, 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 para ser automatizado, minimizando o custo e o esforço de manutenção.

Para ajudar você a entender o desempenho de seus aplicativos nos dispositivos de seus usuários, o Firebase Test Lab hospeda uma variedade de dispositivos móveis físicos e virtuais em 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 em nossos data centers. A CLI gcloud simplifica a integração da solução de teste baseada em nuvem do Test Lab em fluxos de trabalho de CI/CD existentes.

Suporte multiplataforma

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

Sem requisitos de hardware

O Test Lab hospeda dispositivos físicos nos data centers do Google e hospeda dispositivos virtuais no Google Cloud. Tudo o que você precisa fazer é enviar seus testes para o Test Lab e aguardar os resultados.

Rápido e confiável

A execução de muitos casos de teste simultâneos pode levar muito tempo, bloqueando os processos de CI/CD. Com o Test Lab, você pode facilmente fragmentar testes e executá-los em vários dispositivos em paralelo. Você também pode detectar descamação, um ponto problemático comum em testes móveis.

O que você aprenderá

  • Como construir artefatos de teste
  • Como executar um teste móvel usando a CLI gcloud
  • Como configurar Jenkins CI
  • Como executar testes móveis usando Jenkins CI
  • Como configurar testes para escalar com sistemas CI

Este codelab se concentra na execução de testes. Conceitos não relevantes e blocos de código são ignorados e são fornecidos para você simplesmente copiar e colar.

O que você precisará

Se você preferir criar coisas do zero, precisará do Android Studio para executar um teste do Android ou do XCode para executar um teste do iOS. Ou apenas traga você mesmo e forneceremos os artefatos.

2. Execute um teste com a CLI gcloud

Crie um APK de aplicativo Android e um APK de teste

Para executar um teste com o Test Lab, comece criando um APK de aplicativo Android e um APK de teste, que contém testes instrumentados para execução 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 for Espresso .

Para criar APKs usando comandos do Gradle, você deve instalar o Android SDK. Se o Android Studio não estiver instalado em sua máquina, instale o Android Studio e o Android SDK e defina o ambiente ANDROID_HOME com o diretório do Android SDK. Por exemplo, em 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 clone e build, você pode encontrar o APK do aplicativo 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 obter os APKs de teste e de aplicativo:

  • Para criar APKs no Android Studio, siga as instruções em Teste no Android Studio .
  • Baixe o aplicativo Notepad de amostra. 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 aplicativo iOS, poderá escrever um XCTest e criar um arquivo zip a partir do aplicativo e dos testes.

Use a CLI gcloud para executar um teste com o Test Lab

Nesta seção, você cria um projeto do Firebase e configura seu ambiente local do Google Cloud SDK. Para saber mais, consulte Iniciar testes com a CLI gcloud .

Configurar a CLI do gcloud

  1. Faça o download do Google Cloud SDK , que inclui a ferramenta gcloud CLI.
  2. Verifique se sua instalação está atualizada:
gcloud components update
  1. Faça login na CLI do 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 seu projeto do Firebase. Você pode encontrar o ID do projeto no URL do Firebase Console, 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 .

Execute um teste usando os APKs criados

Nesta seção, você executa 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 aplicativo e testando os APKs criados em Crie um APK de aplicativo Android e teste o APK, 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

Analise os resultados do teste

Você pode analisar os resultados do teste usando qualquer uma das seguintes opções:

  • Resumo gcloud - quando o teste termina, a CLI do gcloud imprime um resumo básico dos resultados do teste.
  • gcloud exit code - após a conclusão do teste, o comando sai com 0 se o teste for aprovado. Se o teste falhar, o comando sai com um código de saída diferente de zero.
  • Firebase Console - a CLI gcloud imprime um link para o Firebase Console. 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 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 intervalo 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. Configure com Jenkins CI

Nesta seção, você usará o Jenkins CI, um sistema popular de CI, para executar testes com o Test Lab. Se você quiser usar um sistema de CI diferente, consulte Práticas recomendadas avançadas para executar grandes suítes de teste e a documentação de outros sistemas de CI, como Bitrise e Circle CI . Você pode usar o Flank como uma alternativa ao gcloud CLI.

Ativar a CLI gcloud para Jenkins

Antes de usar o Test Lab com o Jenkins, você deve ativar as APIs necessárias e configurar uma conta de serviço que o Jenkins possa usar para autenticar com a CLI gcloud.

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

As contas de serviço são contas limitadas destinadas a integrações de serviço. 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, que poderiam bloquear suas compilaçõ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 uma função , selecione Básico e, em seguida, selecione Editor .
  4. Clique em Continuar e em Concluído .

Em seguida, você cria e baixa uma chave de autenticação que Jenkins pode usar para autenticar como a conta de serviço que você criou.

Para criar e baixar a chave da conta de serviço, siga estas etapas:

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

Para saber mais sobre como criar contas de serviço, consulte Criar uma conta de serviço .

Ativar as APIs necessárias do Google Cloud

A Cloud Testing API permite executar testes na infraestrutura do Google. Você ativou esta API quando concluiu Executar um teste com a CLI gcloud. A API Cloud Tool Results permite que você acesse seus resultados de teste de forma programática.

  1. Abra a Biblioteca de APIs do Google Developers Console .
  2. Na barra de pesquisa na parte superior 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 o Jenkins CI no Linux, macOS, Windows e muitos outros ambientes. Alguns detalhes deste codelab são específicos para instalar e executar o Jenkins CI no Linux, incluindo o uso de barras (/) em caminhos de arquivo.

Para baixar e instalar o Jenkins em um computador com Linux ou Windows, siga as instruções de instalação do 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 .

Verifique os plug-ins instalados

Jenkins suporta diferentes sistemas de controle de versão. Neste codelab, você usará o Git para executar o teste anterior. E para obter uma experiência melhor ao executar a CLI gcloud, você precisa instalar o plug-in GCloud SDK.

  1. No painel do Jenkins, clique em Gerenciar Jenkins e, em seguida, clique em Gerenciar plug-ins .
  2. Pesquise os plug-ins Git e GCloud SDK e instale-os (se ainda não estiverem instalados).

Configure a localização dos SDKs do Android e do Google Cloud

Agora você instrui Jenkins onde encontrar o Google Cloud SDK e o Android SDK.

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

  1. No painel do Jenkins, clique em Gerenciar Jenkins e, em seguida, clique em Configuração de ferramenta global .
  2. na seção Google Cloud SDK , clique em Adicionar Google Cloud SDK .
  3. No campo Nome , insira um nome para a instância do SDK do Google Cloud que seja fácil de lembrar, por exemplo, GCloud-SDK.
  4. Insira o diretório inicial do Google Cloud SDK, por exemplo, /opt/google-cloud-sdk .
  5. Clique em Salvar .
  6. Configure as propriedades de todo o sistema para Android e Google Cloud SDK abrindo Dashboard > Manage Jenkins > Configure System .
  7. Marque a caixa de seleção Variáveis ​​de ambiente e clique em Adicionar .
  8. No campo Nome , insira ANDROID_HOME . No campo Valor , insira o local do seu Android SDK, por exemplo, /opt/Android/Sdk .
  9. Clique na caixa de seleção Tool Locations e clique em Add . No menu suspenso Nome , selecione o nome da instância do SDK do Google Cloud que você adicionou na Configuração da ferramenta global.
  10. No campo Início , insira o local do Google Cloud SDK, por exemplo, /opt/google-cloud-sdk .
  11. Clique em Salvar .

Adicione suas credenciais de conta de serviço ao Jenkins

Agora você adiciona suas credenciais de conta de serviço gcloud CLI ao Jenkins para que Jenkins possa autenticar e executar comandos gcloud CLI com sucesso.

  1. No painel do Jenkins, clique em Gerenciar Jenkins e, em seguida, clique em Gerenciar credenciais .
  2. Na seção Stores com escopo para Jenkins , clique no link de domínio (global) e clique em Add Credentials .
  3. No menu suspenso Tipo , selecione Conta de serviço do Google na chave privada .
  4. No campo Nome do projeto , insira o nome do projeto do Firebase.
  5. Selecione JSON key , clique em Browse e navegue até o local onde você salvou sua chave de conta de serviço.
  6. Clique em Criar .

Agora você está pronto para configurar sua compilação automatizada do Jenkins para o Test Lab.

4. Execute testes de laboratório de teste com Jenkins CI

Agora que você configurou o Jenkins, vamos juntar tudo e executar o mesmo teste usando o Jenkins.

Você pode configurar o Jenkins para executar compilações automatizadas e executar testes sempre que as atualizações de seu aplicativo forem verificadas. Você também pode configurar o Jenkins para executar compilações periodicamente. Para saber mais sobre como configurar compilações no Jenkins, consulte Configurando compilações automáticas .

Crie e configure seu projeto Jenkins

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

Criar um projeto Jenkins

  1. Abra o painel do Jenkins navegando até http://localhost:8080 .
  2. No painel do Jenkins, clique em Novo item .
  3. Insira um nome para seu projeto no campo Nome do item e clique em Projeto de estilo livre para criar um projeto que usa uma única configuração de construção.
  4. Clique em OK . Para concluir as configurações do projeto, conclua as seções restantes na sequência.

Configurar gerenciamento de código-fonte

  1. Na guia Source Code Management , selecione Git .
  2. Insira https://github.com/android/testing-samples.git no campo URL do repositório .

Configurar o ambiente de compilação

A seção Build Environment permite configurar características de construção. 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 de instalação que você escolheu quando adicionou suas 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 compilação do Gradle para recriar pacotes APK

  1. Role para baixo até a seção Build , clique em Add build step e selecione Execute shell .
  2. Adicione uma etapa de compilação 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 compilação da CLI gcloud ao Jenkins

Agora você está pronto para adicionar uma etapa de compilação ao Jenkins para executar o Test Lab usando a linha de comando gcloud CLI.

Para adicionar a etapa de compilação da CLI gcloud, adicione uma nova etapa de compilação 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

Após finalizar a configuração do projeto, role até o final da página e salve a configuração. Você é redirecionado para a página inicial do novo projeto.

Executar testes com Jenkins

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

Para executar o teste com Jenkins, siga estas etapas:

  1. Para acionar a compilação manualmente, clique em Construir agora .
  2. Verifique o progresso e os resultados clicando em novo build > Console Output .

Se você não vê 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 suítes de teste

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

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

Você pode adicionar facilmente vários dispositivos à etapa de criação da CLI gcloud. E você pode verificar e escolher dispositivos, versões, localidades e orientações disponíveis. Por exemplo, o seguinte comando executa testes em dois dispositivos:

  • Um Google Pixel 2 virtual com nível de API 30 na orientação retrato e a localidade em inglês
  • Um Samsung Galaxy S20 físico com nível de API 29 na orientação paisagem e 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

Use 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, você pode especificar esses argumentos em um arquivo de argumento no formato YAML. Para saber como usar esse recurso, execute gcloud topic arg-files .

Testes de shard para rodar em paralelo

A fragmentação de teste divide um conjunto de testes em subgrupos (estilhaços) que são executados separadamente e isoladamente. O Test Lab executa automaticamente cada fragmento em paralelo usando vários dispositivos, o que permite que o Test Lab conclua todo o conjunto de testes mais rapidamente. Para obter mais informações, consulte Habilitar fragmentação .

Para habilitar a fragmentação, use o gcloud beta channel e adicione o sinalizador –num-uniform-shards ou –test-targets-for-shard à etapa de criação da gcloud CLI. Por exemplo, para fragmentar 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 detecção de descamação

Os testes móveis geralmente podem ser esquisitos. Às vezes, os testes passam e, outras vezes, podem falhar, mesmo com a mesma configuração. Você pode detectar se um teste com falha foi irregular usando o sinalizador CLI gcloud –num-flaky-test-attempts . Este sinalizador 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 reexecutar casos de teste com falha mais três vezes após a execução com 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 com sucesso seu primeiro teste de laboratório de teste com um sistema CI!

Você criou APKs de aplicativos e testes e executou um teste de instrumentação com o Test Lab usando a CLI gcloud. Você também configura um projeto Jenkins para automatizar o mesmo teste.

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

Qual é o próximo?

Confira Como configurar o CI usando o Firebase Emulator Suite

Leitura adicional

Documentos de referência