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.
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.