Bem vindo ao repositório de exemplos do Pact Framework!!
O objetivo deste repositório é demonstrar como fazer testes de contrato com o PACT Framework em diferentes linguagens como forma de facilitar seu entendimento.
O teste de contrato é uma abordagem utilizada para garantir uma integração entre dois sistemas. A maior vantagem da abordagem é o teste via artefato que garante que as duas pontas se validem na forma de um teste unitário. Esse teste unitário é executado para realizar o build dos dois artefatos, garantindo assim que ambas as pontas estejam de acordo com o contrato entre as duas partes.
O Pact Framework realiza testes de contrato com: Rest, Mensageria e GRPC
As integrações não necessitam ter sido desenvolvidas na mesma linguagem para que você faça o teste de contrato, ele é agnóstico a linguagem.
Caso não conheça o Pact e o conceito de testes de contratos, dê uma olhada na sessão de links úteis.
Linguagens suportadas pelo Pact:
Linguagens abordadas nos exemplos:
Zuppers contribuidores
Abaixo estão os links dos exemplos que você irá encontrar neste repositório. Neles você também irá encontrar detalhes sobre como executá-los.
- Backend
- Java - Spring Boot
- Java - Spring Boot - Validação de contrato gerado a partir da OpenApi Specification do Provider
- Kotlin - Spring Boot
- Kotlin - Micronaut
- Node
- Node - Validação de contrato gerado a partir da OpenApi Specification do Provider
- FrontEnd
- Angular
- CI/CD
- Documentos
Abaixo um desenho que representa bem como o teste de contrato é realizado.
O processo de validação dos contratos acontece da seguinte forma:
-
O Consumer cria um contrato em forma de testes BDD (Behavior Driven Development) com suas expectativas de consumo da integração com o Provider.
-
O Consumer testa suas expectativas de Consumer sobre o Provider dentro do seu próprio teste, sem necessidade de realizar comunicação com o Provider real.
-
O Consumer publica o contrato no Broker do Pact para que o Provider possa acessá-lo e testá-lo.
-
O Provider cria um código de teste unitário que obterá o contrato do Pact Broker e dado as expectativas que o Consumer descreveu, rodará em seu próprio endpoint para validar se condiz com o que esse Provider está fornecendo (Tudo isso em tempo de teste unitário) e sem a necessidade de se comunicar com o Consumer. Usando apenas o contrato gerado pelo Pact.
A vantagem dessa abordagem é que todos os testes são escritos em forma de teste unitário, portanto, é fácil automatizar a validação das integrações em uma esteira de CI, onde ela rodará seus testes e validará seus contratos de integração, assim, garantindo que suas integrações estão funcionando antes de você publicar seu artefato em qualquer ambiente. O teste no artefato assegura que nenhuma mudança seja feita sem o conhecimento de ambos os lados, isso ajuda a prevenir problemas causados por falha de comunicação entre equipes de integração de sistemas.
O Pact Broker é uma ferramenta fundamental para o gerenciamento dos contratos entre as integrações envolvidas. Ele mantém o contrato, a data de atualização e o status dessa integração, para mais informações acesse Pact Broker.
Para que você consiga utilizar o teste de contrato com o Pact, sugerimos que você tenha um container com o Pact Broker em uma infraestrutura acessível para as duas aplicações que fazem a integração.
Para qualquer um dos exemplos deste repositório, precisaremos de uma instância do Broker. A seguir explicamos como subir o seu próprio Broker.
Para configurar uma instancia do Pact Broker em sua máquina local, clone o projeto em sua máquina,
vá até o diretório infrastructure/pact-broker
e execute o seguinte comando:
Caso o exemplo for relacionado a Integração Continua, utilize o diretõrio
infrastructure/pact-broker-with-jenkins
docker-compose up
Para validar se o broker está funcionando corretamente, acesse o endereço http://localhost:9292.
Caso tudo tenha ocorrido conforme planejado, você verá a página inicial do Pact Broker.
Se estiver utilizando o compose com Jenkins, você poderá acessá-lo no endereço http://localhost:8080
Credenciais para acesso ao Jenkins:
user:admin
pass:admin
Caso tenha alguma dificuldade para subir o container
jenkins_pact_broker
, verifique se o diretóriojenkins_home
possui permissões de escrita. Caso não tenha permissão, podemos conceder da seguinte forma:
sudo chown $USER:$USER jenkins_home -R
Para demais informações, acesse a documentação do Jenkins.
Nosso repositório segue o Código de Conduta para desenvolvedores. Se você deseja participar criando códigos no nosso repositório, por favor, siga o Código de Conduta, ele pode ser lido aqui CODIGO DE CONDUTA. Qualquer código enviado para este repositório que ferir tais valores serão ignorados.
Beagle has adopted a Code of Conduct that we expect project participants to adhere to. Please read the so that you can understand what actions will and will not be tolerated.
-
Conceitos do PACT:
https://www.zup.com.br/blog/testes-de-contratos-com-pact-1-conceitos -
Conceitos do contratos dirigidos a consumidores (Consumer Driven Contract):
https://www.zup.com.br/blog/testes-de-contratos-com-pact-2-consumer-driven-contract -
Hands On com Pact:
https://www.zup.com.br/blog/testes-de-contratos-com-pact-framework-3-hands-on -
Pact com CI:
https://www.zup.com.br/blog/testes-de-contratos-com-pact-framework-4-pact-com-ci -
Documentação do Pact:
https://docs.pact.io/ -
PactFlow:
https://pactflow.io/ -
Pact Benefits:
https://pactflow.io/how-pact-works/?utm_source=ossdocs&utm_campaign=intro_animation#slide-1 -
Pact Broker:
https://github.com/pact-foundation/pact_broker -
Para mais exemplos:
https://github.com/pact-foundation?q=workshop