Pact Logo

Exemplos de uso de Testes de Contrato com Pact Framework

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

Contributors Display

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.

Abaixo um desenho que representa bem como o teste de contrato é realizado.

Pact Workflow

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ório jenkins_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.