Pular para o conteúdo
Tecnologia

Contract testing valida integração entre services. Consumer define expectativa, Provider valida. Detecta breaking changes antes de deploy.

Conceitos Principais

Consumer Contract

Consumer define expectativa: "GET /users retorna array com id, name". Gera contract file.

Provider Verification

Provider valida contract. API real atende expectativa? Falha se quebra contrato.

Contract Broker

Pact Broker armazena contracts. Versiona. Garante compatibilidade antes de deploy.

Consumer-Driven

Consumers definem necessidades. Providers implementam. Previne over-engineering.

Passo a Passo

  1. Consumer Test: Install @pact-foundation/pact. Define interaction: provider.addInteraction({ state: "users exist", request: { method: "GET", path: "/users" }, response: { status: 200, body: [{id: 1}] } }).
  2. Generate Contract: Run consumer test. Gera contract JSON em pacts/. Commit no git ou publish para broker.
  3. Provider Verification: Install @pact-foundation/pact. verifyPacts({ provider: "UserService", pactUrls: ["./pacts/consumer-provider.json"] }).
  4. Pact Broker: Docker: pactfoundation/pact-broker. Publish contracts. Provider verifica latest. can-i-deploy antes de release.
  5. CI Integration: Consumer: publish contract. Provider: verify contracts. Block deploy se breaking change.

Boas Praticas

Recomendacoes

• Consumer-driven (não provider-driven)

• Contracts pequenos e focados

• Use Pact Broker em prod

• can-i-deploy antes de release

• Version contracts

Erros Comuns

Evite estes erros

• Contract testing para tudo (use integration quando possível)

• Provider-driven contracts

• Não usar broker (contracts desatualizados)

• Contracts muito genéricos

• Não integrar no CI/CD

Checklist

  • Pact instalado
  • Consumer contracts criados
  • Provider verification funcionando
  • Pact Broker configurado
  • CI publicando e verificando
  • can-i-deploy integrado