Contract Testing — Cheat Sheet

Tag: contract testing, pact, api, integration, microservices

Livello: intermedio

TL;DR: Il Contract Testing verifica che due servizi indipendenti (Consumer e Provider) comunichino correttamente, garantendo che le richieste del Consumer e le risposte del Provider rispettino un accordo condiviso (il "contratto"). Evita i test end-to-end fragili.

Concetti chiave

Consumer: L'applicazione o il servizio che effettua la richiesta (es. Frontend).

Provider: Il servizio che riceve la richiesta e fornisce i dati (es. Backend API).

Contract (Pact): L'accordo formale tra Consumer e Provider su come deve essere fatta la richiesta e come deve essere strutturata la risposta (formato JSON, headers, status code).

Consumer-Driven Contracts: Il paradigma in cui è il Consumer a definire le sue aspettative (il contratto), e il Provider verifica di riuscire a soddisfarle.

Isolamento: I test vengono eseguiti indipendentemente: il Consumer testa contro un mock del Provider, il Provider testa contro richieste simulate basate sul contratto.

Pact Broker: Un repository centrale per archiviare e condividere i contratti (Pacts) generati.

Domande tipiche e risposte pronte

Q: Perché usare il Contract Testing invece dei Test di Integrazione o End-to-End?

R: Perché i test end-to-end sono lenti, fragili e difficili da mantenere. Il contract testing mi permette di testare i servizi in isolamento in modo molto più veloce, senza dover avviare l'intero sistema.

Q: Cosa succede se il Provider rompe il contratto?

R: La pipeline CI/CD del Provider fallirà durante la fase di verifica contro il contratto (che sta sul Pact Broker), bloccando il deploy di una versione incompatibile.

Insidie e errori comuni

Usare il Contract Testing per testare la logica di business o i casi limite del Provider (quello va fatto negli Unit Test).

Creare contratti per API pubbliche (Third-party) che non si possono controllare; il contract testing è ideale per servizi interni.

Snippet e comandi

# Avvio di un Pact Broker locale tramite Docker per testare i contratti
docker run -d -p 9292:9292 -e PACT_BROKER_DATABASE_URL="sqlite:////tmp/pact_broker.sqlite3" pactfoundation/pact-broker

Da ripassare

[ ] Workflow di pubblicazione e verifica dei Pact tramite CI/CD.

[ ] Configurazione di webhooks nel Pact Broker.

Jarvis Interviews
Jarvis