Was sind Consumer Driven Contract (CDC) Tests
Consumer Driven Contract (CDC) Tests ist eine moderne Form der leichtgewichtigen Integrationtests mit dem Schwerpunkt der Validierung der Schnittstellen-Konformität zwischen Services einer Micro Service Architektur.
CDC Tests ermöglichen eine Validierung der Korrektheit der ausgetauschten Anfrage- und Antwort-Nachrichten zwischen einem Service Konsumenten und Service Anbieter – isoliert voneinander – auf Grundlage eines Kontraktes (sog. Consumer Driven Contract).
Auf diese Weise kann jeweiliger Kommunikationspartner in Isolation getestet werden, wodurch komplexe und fehleranfällige Integrationsszenarien mit realen Web Services vermieden werden können und die Web Services weiterhin in unabhängigen Teams isoliert voneinander entwickelt und getestet werden können.
Eine weitere wichtige Eigenschaft ist, dass mit CDC Tests stests alle Validierungen aus der Sicht der konsumierenden Services (Consumer) durchgeführt werden. Dadurch stellt man sicher, dass der Anbieter des Services (Provider) die Schnittstellen auf die Art und Weise bereitstellt, dass sie von allen(!) Konsumenten richtig verarbeitet werden können. Damit testet man nicht, dass der Provider „richtig“ umgesetzt wurde (z.B. gemäß seiner Swagger/Open-API Spezifikation), sondern dass er „die richtigen“ Funktionalitäten allen Konsumenten bereitstellt und damit die Sicherstellung der zuverlässigen Nutzung dieser Schnittstellen aus der Consumer Sicht in Vordergrund bringt.
Aus diesem Grund ist Consumer Driven Contract Testing eine essenzielle Säule zur Steigerung der Qualität in agilen autonomen cross-funktionalen Teams mit vielen Micro Services.
Vorteile
- Isoliertes aber dennoch integratives Testen von Micro Services und deren Schnittstellenkompatibilität
- Optimale Unterstützung autonomer agiler Teams
- Konsumenten-orientiertes Testen in Vordergrund (höhere Kundenorientierung)
- Kein Aufwand für komplexe Testumgebung mit vollwertigen Services
- Entkoppeltes Testen vor Fertigstellung der Service Partner
- Schnelles Feedback vor erster Integration
- Unterstützt TDD Paradigma
- Schneller leichtgewichtiger und versionierbarer Compatibility Testing Ansatz für jede Umgebung inkl. Entwicklungsumgebung
Nachteile:
- Geringer Mehrwert für Projekte mit einzigem Team
- Nicht optimal zum Testen von Web Service Teilen, die außerhalb der Kontrolle des Unternehmens entwickelt werden
- Keine Option, wenn nicht alle interagierenden Teams CDC verwenden
- (Kein Ersatz für funktionales Testing auf Unit Test und End-to-End Test Ebene)
- (Kein Ersatz für Nicht-funktionales Testing)
Prinzipien
Die Arbeitsweise der CDC Tests basiert auf folgendem Prinzip: wenn es mit Contract Tests gelingt isoliert zu validieren, dass die Anfragen und die Antworten von beiden Kommunikationspartnern eines Web Service Paares gemäß der gemeinsamen Contract Spezifikation sich korrekt verhalten, dann kann darauf geschlossen werden, dass unter realen Bedingungen das Zusammenspiel der beiden Web Services hinsichtlich der Schnittstellenkorrektheit ebenfalls klappt.
Damit erfolgen die Tests der zusammenarbeitenden Services bei CDC nicht gegen einander, sondern jeweils einzeln gegen einen „Contract“. Dieser Contract wird mittels CDC Testwerkzeuge für die automatische Bereitstellung eines Mocks der jeweiligen Gegenseite herangezogen und für die Testdurchführung verwendet.
CDC Tools
Folgende Open-Source Testwerkezeuge werden besonders häufig für die Umsetzung von CDC Tests eingesetzt:
- Pact
- Spring Cloud Contract
Besonders beliebt sind die CDC Tests mit Pact, da es sich hierbei um eine Technologie und sprachenunabhängige Lösung handelt, die darüberhinaus sehr hilfreiche Werkzeuge, wie Pact Broker, zum Austausch von CDC Contracts zwischen Consumer und Provider Teams anbietet. Damit unterstützt PACT optimal die Zusammenarbeit von vielen Teams, die an Services in Microservice Landschaft (verteilt und evtl. mit verschiedenen Technologien) arbeiten.
Weitere Informationen
Erste Vorstellung von CDC durch Marin Fowler: https://www.martinfowler.com/articles/consumerDrivenContracts.html
CDC Testing mit PACT.IO: https://docs.pact.io/