Bitrise CI — criando Workflow de testes unitários com cobertura de código

Neste artigo irei explicar como criar um Workflow, para fazer validações dos testes unitários e em seguida, iremos disponibilizar o resultado da cobertura de código, gerada a partir do Jacoco.

Relembrando, um Worflow é constituído pelo conjunto de blocos de códigos denominados Steps, que serão executados de maneira Top-Down após a build ser inicializada. Definimos nesta outra publicação o que é um Workflow e suas características.

O objetivo deste Workflow será:

  1. Validar os testes unitários, garantindo que novas mudanças no código não invalidem os testes previamente criados. E caso isto ocorra, o desenvolvedor terá que corrigi-los;
  2. Gerar um relatório contendo o resultado dos testes e sua cobertura de código. A métrica de cobertura de código, poderá ser considerada como um padrão de qualidade a ser seguido e que devemos estar sempre aumentando, para garantirmos que o código está sendo testado e validado.

Configuração do arquivo bitrise.yml

bitrise.yml

1. Autenticação e Clone do Repositório

Devemos definir o step "Activate SSH key" que é utilizado para autenticar a comunicação entre o Bitrise e o seu repositório no Git. Em seguida, devemos utilizar o step "Git Clone Repository", para clonar o repositório do projeto a ser testado.

2. Instalar componentes do SDK

Devemos definir o step "Install missing Android SDK components" para instalar dependências do SDK, que serão utilizadas pelo gradle.

3. Adicionar o passo de Teste Unitário

O step “Android Unit Test" pode ser substituído por tasks do gradle (testDebugUnitTest). Ele irá validar todos os testes unitários e disponibilizar os resultados no log da Build. Devemos configurar ele com a variante do projeto, neste caso, usaremos o Build Type de Debug.

4. Adicionando Jacoco (CodeCoverage)

Para obtermos a cobertura de código testado, é necessário configurar o plugin do Jacoco no projeto Android, para isso, iremos seguir este passo a passo. Ele irá gerar um relatório chamado: testDebugUnitTest.exec, que conterá todos os dados analisados baseado nas configurações do seu projeto.

5. Executando a Task do Jacoco pelo Graddle Runner

Mas, para realizar gerar este relatório, devemos executar a task do gradle que foi definida no projeto (jacocoTestReport). Para isso, teremos que utilizar o step "Gradle Runner", devemos alterar a task que irá ser inicializada por este step para a definida no projeto.

6. Deploy dos resultados no CI

Por último, devemos definir o step "Deploy to Bitrise.io — Apps, Logs, Artifacts", que será responsável por disponibilizar os relatórios gerados pelos testes. Recomendo ler as opções de customizações deste step, para não tornar seus relatórios públicos.

Por padrão, os relatórios html/xml do jacoco serão gerados no caminho: projeto/app/build/reports/tests/testDebugUnitTest, devemos definir esse caminho como o diretório de deploy. Para analisarmos através dos artefatos gerados pelo step.

No final o Workflow ficará assim: