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 máximo de configurações possível para detectar problemas antes que seus usuários o façam. Porém, as restrições de custos 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 enquanto minimiza o custo e o esforço de manutenção.

Para ajudar você a entender o desempenho dos seus aplicativos nos dispositivos dos 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 a execução de testes nos dispositivos em nossos data centers. A CLI gcloud simplifica a integração da solução de testes 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 em data centers do Google e dispositivos virtuais no Google Cloud. Basta 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 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 instabilidade, um problema 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 o 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 e blocos de código não relevantes são encobertos e fornecidos para você simplesmente copiar e colar.

O que você precisará

Se preferir construir coisas do zero, você precisa do Android Studio para executar um teste do Android ou do XCode para executar um teste do iOS. Ou traga você mesmo e nós forneceremos os artefatos.

2. Execute um teste com a CLI gcloud

Crie um APK de aplicativo Android e teste o APK

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á tem uma base de código funcional, pode criar seus próprios APKs ou usar o BasicSample para Espresso .

Para criar APKs usando comandos 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 do aplicativo:

  • Para criar APKs no Android Studio, siga as instruções em Testar no Android Studio .
  • Baixe o aplicativo 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 código-fonte funcional para um aplicativo iOS, poderá escrever um XCTest e criar um arquivo zip 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 SDK do Google Cloud. Para saber mais, consulte Iniciar testes com a CLI gcloud .

Configurar a CLI gcloud

  1. Faça download do SDK do Google Cloud , que inclui a ferramenta CLI gcloud.
  2. Verifique se sua 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, onde PROJECT_ID é o ID do 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 Firebase Console .

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 os APKs de teste que você criou em Criar um APK de aplicativo Android e um APK 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

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 gcloud imprime um resumo básico dos resultados do teste.
  • Código de saída gcloud - após a conclusão do teste, o comando termina 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.
  • 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 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. Configure com Jenkins CI

Nesta seção você usa Jenkins CI, um sistema de CI popular, 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 conjuntos de testes e a documentação para outros sistemas de CI, como Bitrise e Circle CI . Você pode usar o Flank como uma alternativa à CLI gcloud.

Ativar a CLI gcloud para Jenkins

Antes de usar o Test Lab com 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ç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, 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 Criação de uma conta de serviço .

Ativar APIs obrigatórias do Google Cloud

A API Cloud Testing 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 programaticamente os resultados dos seus testes.

  1. Abra a biblioteca de APIs do Google Developers Console .
  2. Na barra de pesquisa na parte superior do Firebase Console, 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 Habilitar 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 a instalação e execução do Jenkins CI no Linux, incluindo o uso de barras (/) em caminhos de arquivo.

Para baixar e instalar o Jenkins em um computador executando 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 .

Verifique os plug-ins instalados

Jenkins oferece suporte a 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 Gerenciar plug-ins .
  2. Procure os plug-ins Git e GCloud SDK e instale-os (se ainda não estiverem instalados).

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

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

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 global da ferramenta .
  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 SDK do Google Cloud, por exemplo, /opt/google-cloud-sdk .
  5. Clique em Salvar .
  6. Configure as propriedades de todo o sistema para os SDKs do Android e do Google Cloud 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 Locais de ferramentas e clique em Adicionar . Na lista suspensa 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 SDK do Google Cloud, por exemplo, /opt/google-cloud-sdk .
  11. Clique em Salvar .

Adicione as credenciais da sua conta de serviço ao Jenkins

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

  1. No painel do Jenkins, clique em Gerenciar Jenkins e em Gerenciar credenciais .
  2. Na seção Lojas com escopo definido para Jenkins , clique no link do domínio (global) e clique em Adicionar credenciais .
  3. No menu suspenso Tipo , selecione Google Service Account from private key .
  4. No campo Nome do projeto , insira o nome do seu projeto 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 sua compilação automatizada do Jenkins para o Test Lab.

4. Execute testes de laboratório de testes 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 testes sempre que for feito check-in de atualizações no seu aplicativo. 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.

Crie 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 Freestyle para criar um projeto que use uma única configuração de construção.
  4. Clique OK . Para concluir as configurações do projeto, conclua as seções restantes em sequência.

Configurar o gerenciamento de 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 construção

A seção Build Environment permite configurar características de build. Ative a autenticação do Google Cloud seguindo estas etapas:

  1. Na guia Build Environment , marque a caixa de seleção de autenticação do GCloud SDK e selecione o nome de instalação que você escolheu quando adicionou 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.

Adicione etapas de compilação do Gradle para reconstruir 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 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 compilação da CLI gcloud ao Jenkins

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

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

Execute 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 new build > Console Output .

Se você não encontrar 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. Melhores práticas avançadas para executar grandes conjuntos de testes

Quando você quiser executar vários 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 configurações de vários 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 comando a seguir executa testes em dois dispositivos:

  • Um Google Pixel 2 virtual com API de nível 30 na orientação retrato e localidade em inglês
  • Um Samsung Galaxy S20 físico com API nível 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ê poderá especificar esses argumentos em um arquivo de argumentos formatado em YAML. Para saber como usar esse recurso, execute gcloud topic arg-files .

Testes de fragmentos para execução em paralelo

A fragmentação de teste divide um conjunto de testes em subgrupos (fragmentos) 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 ativar a fragmentação, use o canal gcloud beta e adicione o sinalizador –num-uniform-shards ou –test-targets-for-shard à etapa de criação 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 detecção de flacidez

Os testes 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. Você pode detectar se um teste com falha foi instável usando o sinalizador –num-flaky-test-attempts gcloud CLI. Este sinalizador especifica o número de vezes que uma execução de teste deve ser tentada novamente 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 com sucesso seu primeiro teste do Test Lab com um sistema CI!

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

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

Qual é o próximo?

Confira Como configurar o CI usando o Firebase Emulator Suite

Leitura adicional

Documentos de referência