Tutorial de teste de integração com Bitbucket pipelines

Saiba como executar testes de integração com o Bitbucket Pipelines fazendo vários serviços serem executados em paralelo em contêineres do Docker separados em um pipeline.

Sten Pittet Sten Pittet

O teste é uma parte fundamental da integração contínua e da entrega contínua. E se você está praticando a implementação contínua, ele vai ser a última linha de defesa contra bugs antes que as alterações sejam lançadas para os clientes. Os testes de unidade que validam métodos e classes individuais são um ótimo começo para evitar problemas, mas você também vai precisar executar testes de integração que garantam que os diferentes módulos usados pelo aplicativo (servidor de aplicativos, banco de dados, cache) interajam sem erros. Este tutorial mostra como executar testes de integração com o Bitbucket Pipelines executando vários serviços em contêineres do Docker separados em um pipeline.

Requisitos

Etapa 1: como executar o aplicativo de exemplo no local

Vamos usar um aplicativo Node.js básico que exibe uma mensagem na página inicial e registra as visitas a um banco de dados. Para focar a configuração do Bitbucket Pipelines, basta clonar o aplicativo do terminal.

git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.git

Agora acesse o repositório local e execute npm install para instalar as dependências exigidas pelo aplicativo.

cd bitbucket-pipelines-services-tutorial/ npm install

Antes de executar o aplicativo, precisamos iniciar uma nova instância do MongoDB. Graças ao Docker, você pode iniciar a instância no terminal.

docker run --name mongodb -d -p 27017:27017 mongo

Depois, inicie o aplicativo e acesse http://localhost:3000 para vê-lo em ação.

npm start

Você pode acessar http://localhost:3000/visits para verificar se o registro correto de uma visita foi feito no banco de dados.

Por fim, vamos garantir que os testes sejam concluídos com sucesso localmente usando o comando npm test. Você deve ver os testes serem concluídos após executar esse comando.

npm test

Este aplicativo de exemplo está executando dois testes diferentes:

  • Um teste que verifica se o aplicativo exibe Hello World na página inicial.
  • Um teste que verifica se uma nova visita é registrada no banco de dados sempre que alguém acessa a página inicial.

O primeiro teste vai ser aprovado mesmo que o banco de dados esteja inativo, mas o segundo é um teste de integração que verifica se a interação do aplicativo web com o servidor de banco de dados está correta. Esse teste também pode ser entendido como funcional, pois verifica alguns dos requisitos de negócios do aplicativo. Saiba mais sobre os diferentes tipos de testes neste guia.

Agora vamos ver como usar o Bitbucket Pipelines para automatizar o teste do aplicativo e configurá-lo para funcionar bem com um banco de dados.

Etapa 2: como executar testes automáticos com o Bitbucket Pipelines

Comece criando um repositório na conta do Bitbucket e atualize a URL remota da origem para apontar o repositório Bitbucket.

git remote set-url origin git@bitbucket.org:<my account>/<my repository>.git git push origin main 

Acesse a seção Pipelines do repositório para habilitar o Bitbucket Pipelines.

Você pode usar o template Javascript padrão na próxima tela. Ele já tem os comandos npm install e npm test necessários para instalar as dependências e executar o conjunto de testes.

Não altere nada na configuração do YML e faça commit do arquivo bitbucket-pipelines.yml. O serviço de banco de dados está faltando, mas vamos adicioná-lo mais tarde.

Depois de fazer commit do arquivo, você vai ser redirecionado para a seção Pipelines do repositório, que mostra o primeiro pipeline em andamento. O pipeline vai falhar porque o segundo teste não pode ser executado corretamente sem uma conexão de banco de dados. Se você clicar no pipeline, vai ver uma tela semelhante a esta abaixo, informando que 1 teste for aprovado e 1 falhou.

Na próxima seção, vamos corrigir esse problema adicionando uma nova definição de serviço à configuração do Pipelines.

Etapa 3: como adicionar uma definição de serviço para o banco de dados

Com o Bitbucket Pipelines, você pode executar até 3 contêineres do Docker adicionais além do aplicativo principal em execução em um pipeline. Você pode usar esses contêineres para executar serviços como armazenamento de dados, ferramenta analítica ou qualquer serviço de terceiros que o aplicativo precise para concluir o pipeline. Neste caso, vamos usar um contêiner de serviço separado para executar o MongoDB.

Acesse a seção de origem do repositório para ver a lista de arquivos.

Clique no arquivo de configuração bitbucket-pipelines.yml para acessá-lo. Você vai encontrar o botão Editar no canto superior direito que permite editar o arquivo e fazer commit usando o navegador.

Precisamos adicionar uma definição de serviço para o banco de dados na parte inferior do arquivo de configuração.

bitbucket-pipelines.yml

# This is a sample build configuration for Javascript (Node.js). # Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: node:4.6.0   pipelines:   default:     - step:         script: # Modify the commands below to build your repository.           - npm install           - npm test definitions:   services:     database:       image: mongo  

No caso do MongoDB, não precisamos de configurações extras na definição da imagem, mas algumas imagens do Docker para armazenamentos de dados e serviços podem exigir a especificação de algumas variáveis de ambiente. Veja uma lista de exemplos de banco de dados na documentação do Bitbucket Pipelines.

Antes de fazer commit do arquivo, você precisa adicionar o novo serviço à etapa que está executando os testes. A configuração final do Pipelines deve estar como o código abaixo.

bitbucket-pipelines.yml

# This is a sample build configuration for Javascript (Node.js). # Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: node:4.6.0   pipelines:   default:     - step:         script: # Modify the commands below to build your repository.           - npm install           - npm test         services:           - database definitions:   services:     database:       image: mongo

Acesse a seção Pipelines depois de fazer commit do arquivo para ver o pipeline em andamento. Ele deve ser concluído com sucesso.

Clique na guia banco de dados no painel de logs para ver os logs do contêiner do MongoDB.

Acabou! Agora você sabe como adicionar serviços ao pipeline para executar testes de integração. Não se esqueça de ler a documentação para saber mais sobre como usar esses serviços.