Skip to content
Latchkey

O Que É Teste de Contrato?

O teste de contrato verifica se dois serviços concordam sobre o formato das mensagens que trocam, sem precisar subir os dois ao mesmo tempo.

Quando serviços se comunicam entre si, uma mudança em um lado pode quebrar silenciosamente o outro. O teste de contrato evita isso capturando os formatos acordados de requisição e resposta como um contrato e, em seguida, verificando cada lado contra ele de forma independente. Isso oferece confiança de integração sem o custo de testes completos de ponta a ponta.

O modelo consumidor-provedor

O consumidor define o que espera do provedor: quais campos envia e quais precisa receber de volta. Essa expectativa se torna um contrato. O provedor então executa seus próprios testes para provar que satisfaz o contrato. Nenhum dos lados precisa que o outro esteja rodando ao vivo.

Por que não apenas testar a integração

Testes de integração completos entre muitos serviços são lentos, frágeis e difíceis de coordenar, especialmente quando as equipes fazem deploy de forma independente. Os testes de contrato detectam a quebra mais comum, uma mudança incompatível de API, muito mais cedo e mais rápido, cada lado em seu próprio pipeline.

Um exemplo rápido

Um contrato de consumidor declara que um GET para /users/1 deve retornar um objeto com id e name, e o teste do provedor verifica se seu endpoint real respeita esse formato.

A consumer expectation
expect(response).toMatchContract({
  id: "number",
  name: "string",
});

Onde o teste de contrato se encaixa

  • Arquiteturas de microsserviços e orientadas a API.
  • Equipes que fazem deploy de serviços de forma independente.
  • Detectar mudanças incompatíveis antes que cheguem ao staging.
  • Complementar, não substituir, alguns testes E2E reais.

Teste de contrato no CI

Cada serviço executa seus testes de contrato em seu próprio pipeline, então a verificação é rápida e paralelizável em vez de exigir que todo o sistema seja iniciado. Rodar as verificações de provedor e consumidor em runners rápidos e isolados mantém o feedback entre equipes ágil mesmo à medida que o número de serviços cresce.

Principais conclusões

  • O teste de contrato verifica se os serviços concordam sobre os formatos das mensagens.
  • Cada lado verifica o contrato de forma independente, sem necessidade de integração completa.
  • Ele detecta mudanças incompatíveis de API cedo e roda rápido no CI.

Guias relacionados