CICD
4. CI CD¶
Os testes de integração complementam os testes unitários ao fornecer uma visão mais abrangente e holística do sistema como um todo. Juntos, esses dois tipos de testes desempenham papéis distintos e complementam-se de várias maneiras.
A integração contínua automatiza a execução de testes sempre que há uma alteração no código-fonte. Isso permite detectar problemas rapidamente, logo após a introdução de uma mudança.
Os desenvolvedores recebem feedback imediato sobre a qualidade do código e a integração com o restante do sistema. Isso ajuda a corrigir problemas antes que possam se propagar.
A entrega contínua integra o código de diferentes desenvolvedores, reduzindo conflitos de integração que podem ocorrer quando as alterações são combinadas apenas no final do ciclo de desenvolvimento.
Assim, a tarefa repetitiva executada pelo desenvolvedor enquanto constroi os testes é executada automaticamente pela plataforma CI CD, formalizando a situação daquela versão após os testes e oferecendo feedback sobre ela. A seguir veremos como configurar a esteira utilizando a plataforma gitlab.
4.1. Configuração da esteira¶
Configurar uma esteira CI/CD (Continuous Integration/Continuous Delivery) com GitLab, separando testes unitários e testes de integração usando Maven pode ser realizado em várias etapas. Vou guiá-lo por um exemplo básico com uma estrutura de projeto Java usando Spring Boot e Testcontainers. Certifique-se de ajustar conforme necessário para suas necessidades específicas.
Estrutura de Projeto¶
-
Estrutura de Diretórios:
-
Pom.xml:
- Certifique-se de incluir as dependências necessárias do Maven para o Spring Boot e o Testcontainers.
- Aqui, estamos usando
spring-boot-starter-test
para o Spring Boot etestcontainers
para testes de integração.<!-- Dependências para Spring Boot e Testcontainers --> <dependencies> <!-- Outras dependências do Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>testcontainers</artifactId> <scope>test</scope> </dependency> </dependencies>
Configuração da Esteira CI/CD com GitLab¶
-
.gitlab-ci.yml:
- Configure o arquivo
.gitlab-ci.yml
para definir as etapas da esteira de integração contínua. - Divida as etapas para testes unitários e testes de integração.
- Utilize o
maven
para a execução dos testes e do processo de construção.
- Configure o arquivo
-
Configuração de Perfis Maven:
- No arquivo
pom.xml
, crie um perfil para os testes de integração usando Testcontainers. - Este exemplo usa o plugin Surefire para testes unitários e Failsafe para testes de integração.
<profiles> <profile> <id>integration-tests</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.0.0-M5</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
- No arquivo
Vantagens de Separar Testes Unitários e de Integração¶
Separar testes unitários de testes de integração traz várias vantagens:
-
Rapidez nos Testes Unitários:
- Os testes unitários são geralmente mais rápidos porque não envolvem a execução de serviços externos ou containers.
-
Identificação de Problemas Específicos:
- A separação permite identificar problemas específicos, seja na lógica de negócios (testes unitários) ou nas integrações entre componentes (testes de integração).
-
Melhor Escalabilidade:
- Testes unitários podem ser executados com mais frequência, proporcionando feedback mais rápido durante o desenvolvimento.
- Testes de integração, por serem mais demorados, podem ser executados com menos frequência, garantindo uma boa cobertura sem sacrificar a agilidade.
-
Facilidade de Diagnóstico:
- Falhas em testes de integração podem ser mais fáceis de diagnosticar devido à separação clara entre testes unitários e de integração.