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.
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.
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.
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.
# 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
[ ] Workflow di pubblicazione e verifica dei Pact tramite CI/CD.
[ ] Configurazione di webhooks nel Pact Broker.