Pact ist das Referenzwerkzeug für konsumentengesteuertes Vertragstesting. Konsumenten erzeugen mit Unit-Tests Pact-Dateien, Provider verifizieren diese gegen ihren echten Code, ein Pact Broker speichert die Ergebnisse und can-i-deploy entscheidet, ob eine Version ausgeliefert werden darf. Das erkennt Integrationsfehler, die isolierte Unit-Tests übersehen. Der operative Aufwand ist jedoch hoch: sprachspezifische Test-DSLs, Provider-Zustände, Broker-Betrieb und schwer reproduzierbare Provider-Verifizierungsfehler. Für eine einzelne fehlerhafte Integration betreiben Teams dadurch schnell eine eigene Vertragstest-Plattform.
Die direkte Einordnung: Apidog ist eine Pact-Alternative für Teams, deren Hauptproblem Schema-Drift zwischen Produzent und Konsument ist. Statt Pact-Dateien verwendet Apidog eine OpenAPI-Spezifikation als zentrale Quelle der Wahrheit, validiert Antworten gegen das Schema, stellt spezifikationsbasierte Mocks bereit und lässt sich über die Apidog CLI in CI ausführen.
Apidog repliziert jedoch nicht den Broker-Workflow von Pact: Es gibt keine Pact-Dateien, keine Verifizierungsmatrix und kein can-i-deploy. Wenn viele Teams unabhängig deployen und genau dieses Matrix-Gating benötigen, bleibt Pact die passendere Lösung.
Was Pact tatsächlich tut – und gut tut
Pact ist ein code-zentriertes Werkzeug für HTTP- und Nachrichtenintegrationen. Das Modell ist konsumentengesteuert:
- Ein Konsument testet gegen einen Pact Mock Provider.
- Der Test zeichnet konkrete Anfrage-/Antwortpaare in einer Pact-Datei auf.
- Der Provider spielt diese Interaktionen gegen seine echte Implementierung ab.
- Provider-Zustände bereiten die Daten für jede Interaktion vor.
- Der Broker speichert Verifizierungsergebnisse und bewertet Deployments.
Der Vorteil: Pact zeichnet nur die Felder auf, die ein Konsument tatsächlich verwendet. Provider können andere Teile ihrer API ändern, ohne Konsumenten zu beeinträchtigen.
Der Pact Broker macht daraus Deployment-Logik. Für jedes verifizierte Konsumenten-/Provider-Versionspaar entsteht ein Eintrag in einer Matrix. can-i-deploy prüft dann, ob die Version gegen alle relevanten, bereits in der Zielumgebung laufenden Versionen verifiziert wurde:
can-i-deploy \
--pacticipant catalog-service \
--version "$GIT_SHA" \
--to-environment production
- Exit-Code
0: Deployment möglich - Exit-Code
1: Deployment blockieren
Pact unterstützt mehr als 10 Sprachen, darunter JVM, JavaScript, Go, .NET, Python, Ruby, Rust, PHP und Swift. Für Teams, die keinen Broker selbst betreiben wollen, bietet SmartBear mit PactFlow einen verwalteten Broker an.
Wo sich der Aufwand ansammelt
Der Nutzen von Pact ist klar. Die Kosten entstehen beim Betrieb der gesamten Schleife.
Jedes Konsumenten-Team schreibt DSL-Code
Pacts entstehen aus Testcode. Jedes Team muss deshalb die Pact-DSL seiner Sprache lernen und pflegen. In polyglotten Organisationen bedeutet das mehrere DSLs, unterschiedliche Matcher und verschiedene Test-Setups.
Typisch ist zusätzlicher Code wie:
await provider
.given("Benutzer 42 existiert mit offener Rechnung")
.uponReceiving("eine Anfrage nach offenen Rechnungen")
.withRequest({
method: "GET",
path: "/users/42/invoices"
})
.willRespondWith({
status: 200,
body: {
invoices: eachLike({
id: like(123),
status: term({
generate: "open",
matcher: "open|paid"
})
})
}
});
Dieser Code ist Testinfrastruktur, die Teams dauerhaft überprüfen und refaktorisieren müssen.
Provider-Zustände werden zur versteckten Test-Suite
Jede Interaktion kann einen eigenen Zustand benötigen:
„Benutzer 42 existiert mit einer unbezahlten Rechnung.“
Der Provider muss einen Handler implementieren, der diesen Zustand zuverlässig herstellt. Mit steigender Zahl von Konsumenten wächst ein Katalog von Zuständen und Fixtures, deren Datenformen der Provider nicht selbst kontrolliert.
Der Broker ist zusätzliche Infrastruktur
Selbst gehostete Broker benötigen unter anderem:
- Datenbankbetrieb
- Updates und Backups
- Authentifizierung
- Webhooks
- CI-Integration
- Regeln für Branches, Tags und Umgebungen
Ein verwalteter Dienst reduziert den Betriebsaufwand, bleibt aber ein zusätzlicher Anbieter und Workflow.
Provider-Verifizierung kann schwer debugbar sein
Die Provider-Verifizierung führt Konsumenteninteraktionen gegen eine laufende Provider-Instanz aus. Damit hängt der Build oft an:
- Datenbank-Seeds
- Authentifizierungs-Stubs
- Hintergrundjobs
- Testdaten
- Netzwerkabhängigkeiten
Wenn ein Build fehlschlägt, stammt der auslösende Test möglicherweise aus einem anderen Team. Das blockiert dann dessen Deployment über can-i-deploy.
PactFlows bidirektionales Vertragstesting reduziert diese Wiederholungslogik: Provider veröffentlichen ein OpenAPI-Dokument, Konsumenten veröffentlichen aus Mocks abgeleitete Verträge, und PactFlow vergleicht beide statisch. Für viele Integrationen reicht genau dieser Schemavergleich aus. Die zugrunde liegende Idee behandeln wir auch im bidirektionalen Vertragstesting.
Die Alternative: Apidog
Apidog ist eine API-Entwicklungsplattform mit OpenAPI als zentralem Artefakt. Aus der Spezifikation entstehen Dokumentation, Mock-Server, Validierungsregeln und automatisierte Tests.
Der Ansatz für API-Vertragstesting lautet: Definieren Sie den Vertrag als Spezifikation und erzwingen Sie ihn in Entwicklung und CI.
1. Ein Vertrag statt mehrerer DSLs
Die OpenAPI-Spezifikation ist die Vereinbarung zwischen Provider und Konsumenten. Teams bearbeiten ein gemeinsames Dokument – im Editor oder als Code – statt für jede Sprache Pact-DSLs zu schreiben.
Beispiel:
openapi: 3.0.3
paths:
/users/{userId}:
get:
responses:
"200":
description: Benutzer gefunden
content:
application/json:
schema:
type: object
required:
- id
- email
properties:
id:
type: integer
email:
type: string
format: email
2. Schema-Validierung bei jedem Lauf
Bei Tests gegen die reale API wird die Antwort gegen die OpenAPI-Spezifikation validiert. Umbenannte Felder, falsche Typen oder fehlende Pflichtfelder lassen den Lauf fehlschlagen, ohne dass jede einzelne Assertion manuell geschrieben werden muss.
Beispiel für einen fehlerhaften Provider-Response:
{
"id": "42",
"mail": "dev@example.com"
}
Der Vertrag erwartet id als Integer und email als Pflichtfeld. Die Validierung schlägt deshalb fehl.
3. Konsumenten können sofort gegen Mocks entwickeln
Sobald ein Endpunkt spezifiziert ist, kann der Smart Mock schema-basierte Antworten liefern. Konsumenten müssen nicht warten, bis der Provider implementiert ist, und Provider-Zustände nicht als Test-Handler skripten.
4. CI-Durchsetzung ohne Broker
Mit apidog run lassen sich Testszenarien in CI ausführen:
apidog run \
--project-id "$APIDOG_PROJECT_ID" \
--environment production \
--reporter cli
Wenn die reale Implementierung gegen die Spezifikation verstößt, schlägt der Provider-Build fehl, bevor ein Deployment erfolgt. Das ist kein Matrix-Gating, aber eine direkte Durchsetzung der Vertragskonformität im jeweiligen Service.
Der Wechsel von Pact zu Apidog – Schritt für Schritt
Der Vertrag selbst
Bei Pact ist der Vertrag eine generierte JSON-Datei mit Beispielinteraktionen. Bei Apidog ist die OpenAPI-Spezifikation der Vertrag: Typen, Pflichtfelder, Enums, Fehlerantworten und Endpunkte werden zentral versioniert.
Der Kompromiss ist wichtig:
- Pact zeigt genau, welche Felder einzelne Konsumenten nutzen.
- Eine gemeinsame OpenAPI-Spezifikation enthält dieses konsumentenspezifische Nutzungssignal nicht.
- Dafür erhalten alle Teams ein gemeinsames Artefakt für Dokumentation, Mocks, Tests und Clients.
Weitere Grundlagen finden Sie unter Was ist ein API-Vertrag.
Provider-seitige Verifizierung
Statt Pact-Interaktionen gegen einen Live-Provider abzuspielen, führen Sie Testszenarien gegen die reale Implementierung aus und aktivieren die Schema-Validierung.
Praktischer Ablauf:
- Definieren Sie Endpunkte und Responses in OpenAPI.
- Erstellen Sie Testszenarien für Erfolgs- und Fehlerfälle.
- Führen Sie diese Szenarien bei jedem Provider-Build aus.
- Blockieren Sie das Deployment bei Schemaabweichungen.
Damit bleibt die Provider-Verifizierung erhalten, ohne einen Katalog konsumentengesteuerter Provider-Zustände zu pflegen.
Konsumenten-seitige Entwicklung
Pact stellt pro Konsument einen Mock Provider innerhalb von Unit-Tests bereit. Apidog stellt eine laufende, gemeinsam nutzbare Mock-URL bereit, die aus der Spezifikation erzeugt wird.
Verwenden Sie die Mock-URL beispielsweise in einer lokalen Frontend-Konfiguration:
API_BASE_URL=https://mock-api.example.com
Frontend- und Downstream-Teams können so gegen den Vertrag entwickeln, bevor der Provider produktiven Code liefert. Mehr dazu: Vertragstesting und Mock-Server.
Deployment-Gating
Pacts größte Stärke ist die dienstübergreifende Matrix mit can-i-deploy. Apidog kopiert dieses Modell nicht.
Stattdessen steuern Sie Änderungen über den Vertrag:
- Provider-Änderungen müssen die Spezifikation erfüllen.
- Spezifikationsänderungen werden als überprüfbare Änderungen auf einem Branch behandelt.
- Mocks und Dokumentation werden aus der aktualisierten Spezifikation abgeleitet.
- Provider-CI blockiert nicht konforme Implementierungen.
Für wenige koordinierte Pipelines reicht dieses Vertragsebene-Gating oft aus. Bei vielen unabhängig deployenden Teams behält Pact mit Matrix-Gating seinen Vorteil.
Pact und PactFlow vs. Apidog auf einen Blick
| Pact + PactFlow | Apidog | |
|---|---|---|
| Vertragsartefakt | Generierte Pact-Dateien pro Konsument | Eine OpenAPI-Spezifikation |
| Wer schreibt Vertragscode? | Jedes Konsumenten-Team, sprachspezifische DSL | Niemand; Spezifikation wird visuell oder als Code bearbeitet |
| Provider-Verifizierung | Interaktionen und Provider-Zustände wiedergeben | Testszenarien und automatische Schema-Validierung |
| Konsumenten-Mocks | Mock Provider innerhalb des Tests | Gehosteter Smart Mock aus der Spezifikation |
| Drift-Erkennung | Bei Verifizierungsläufen | Bei jeder Anfrage und jedem CI-Lauf |
| Deployment-Gating | Broker-Matrix und can-i-deploy
|
Vertragskonformitäts-gesteuertes CI pro Dienst |
| Infrastruktur | Broker, selbst gehostet oder PactFlow SaaS | Keine zusätzliche Broker-Infrastruktur; Cloud-Arbeitsbereich enthalten |
| Dokumentation und Design | Nicht im Umfang | Interaktive Dokumentation und visueller Spezifikationseditor |
| Kosten | OSS kostenlos; PactFlow kostenlos für 2 Integrationen, Team 127 $/Monat | Kostenlos für bis zu 4 Benutzer; kostenpflichtig ab 9 $ pro Benutzer/Monat |
Kosten und Passung
Die Pact-Bibliotheken sind Open Source. Die eigentlichen Kosten entstehen durch Koordination:
- Broker-Hosting oder PactFlow
- Pact-DSLs in mehreren Sprachen
- Provider-Zustands-Handler
- Provider-Verifizierungs-Builds
- Teamübergreifendes Debugging
PactFlow bietet einen kostenlosen Starter-Tarif für zwei Integrationen. Der Team-Tarif kostet 127 $ pro Monat für 50 Integrationen, Enterprise-Optionen werden individuell bepreist.
Der kostenlose Plan von Apidog deckt vier Benutzer, Spezifikationsbearbeitung, Mock-Server, Testszenarien, Schema-Validierung und CLI-Läufe ab. Kostenpflichtige Pläne beginnen bei 9 $ pro Benutzer und Monat.
Die relevante Frage ist daher nicht nur die Lizenzgebühr:
Möchten Sie eine separate Vertragstest-Maschinerie betreiben oder Vertrag, Mocking, API-Client und Dokumentation über eine Spezifikation zusammenführen?
Wenn Sie Tools konsolidieren möchten, lesen Sie auch die beste Postman-Alternative. Für einen Spec-First-Ansatz zeigt der Contract-First-Entwicklungs-Toolstack, wie die Bausteine zusammenspielen.
Migration von Pact
Sie konvertieren Pact-Dateien nicht direkt. Stattdessen machen Sie die Spezifikation zum Vertrag.
1. Eine belastbare OpenAPI-Spezifikation bereitstellen
Wenn bereits eine Spezifikation existiert, importieren Sie sie in Apidog. Sie wird sofort zur Basis für Dokumentation, Mocks und Validierungsregeln.
Falls keine Spezifikation existiert:
- Generieren Sie sie aus Code-Annotationen.
- Verwenden Sie bestehende Pact-Dateien als Checkliste.
- Dokumentieren Sie die Endpunkte und Felder, die Konsumenten tatsächlich verwenden.
- Ergänzen Sie Pflichtfelder, Fehlerantworten, Enums und Formate.
2. Schema-Validierung in CI aktivieren
Erstellen Sie Testszenarien für die wichtigsten Provider-Endpunkte und führen Sie sie in jedem Build aus.
Ein minimaler Pipeline-Schritt könnte so aussehen:
contract-test:
stage: test
script:
- apidog run --project-id "$APIDOG_PROJECT_ID"
Dieser Schritt ersetzt die Pact-Provider-Verifizierung für Integrationen, bei denen Schema-Konformität das zentrale Ziel ist.
3. Konsumenten auf den Smart Mock umstellen
Ersetzen Sie pro-Konsumenten-Pact-Mocks schrittweise durch die gehostete Mock-URL.
Empfohlene Reihenfolge:
- Einen Konsumenten auswählen.
- Seine lokale Pact-Mock-Konfiguration durch die Mock-URL ersetzen.
- Spezifische Sonderfälle als benutzerdefinierte Erwartungen definieren.
- Pact-DSL und zugehörige Test-Helfer entfernen.
- Mit dem nächsten Konsumenten fortfahren.
4. Spezifikationsänderungen prüfen
Behandeln Sie OpenAPI-Änderungen wie Code:
- Änderungen erfolgen über Branches.
- Pull Requests zeigen Schema-Diffs.
- Breaking Changes werden explizit überprüft.
- Konsumenten erhalten aktualisierte Mocks und Dokumentation.
5. Den Broker zuletzt abschalten
Behalten Sie can-i-deploy für Integrationen, bei denen unabhängige Deployment-Zeitpunkte ein reales Risiko sind. Entfernen Sie den Broker nur dort, wo er hauptsächlich Zeremonie erzeugt und die Spezifikationsvalidierung ausreichend ist.
Wann Pact weiterhin sinnvoll ist
Pact bleibt eine gute Wahl, wenn:
- viele Teams unabhängig deployen,
- Services zu unterschiedlichen Zeiten in Produktion gehen,
- Sie eine maschinell überprüfbare Antwort auf „Kann Version X jetzt deployt werden?“ benötigen,
- die genaue Konsumentennutzung einzelner Felder entscheidend ist,
- Sie Nachrichtenwarteschlangen und asynchrone Verträge testen.
Für diese Fälle sind Broker-Matrix und can-i-deploy gebaut.
PactFlows bidirektionaler Modus ist ein möglicher Zwischenschritt, wenn Sie Replay-Tests reduzieren möchten, aber im Pact-Ökosystem bleiben wollen. Wenn Ihr Hauptproblem jedoch Schema-Drift, Mocks und CI-Validierung ist, ist ein spezifikationsbasierter Workflow oft einfacher zu betreiben.
Häufig gestellte Fragen
Ist Apidog ein Vertragstestwerkzeug wie Pact?
Apidog setzt Verträge anders durch. Pact generiert pro-Konsumenten-Verträge aus Testcode und spielt sie gegen Provider ab. Apidog macht die OpenAPI-Spezifikation zum Vertrag und validiert Anfragen sowie CI-Läufe dagegen. Das deckt Schema-Drift ohne Broker-Workflow ab. Details finden Sie im Beitrag zum API-Vertragstesting.
Unterstützt Apidog can-i-deploy oder einen Pact Broker?
Nein. Apidog bietet keine Verifizierungsmatrix und kein dienstübergreifendes Deployment-Gate. Das Gate ist die Vertragskonformität: Builds, die gegen die Spezifikation verstoßen, schlagen in ihrer eigenen Pipeline fehl.
Teams mit Bedarf an Matrix-Gating sollten Pact für diese Integrationen behalten. Eine Zwischenoption ist der statische Vergleich im bidirektionalen Vertragstesting.
Kann Apidog die Consumer Mocks von Pact ersetzen?
Für die meisten Fälle: ja. Der Smart Mock erzeugt schema-konforme Antworten aus der Spezifikation und unterstützt benutzerdefinierte Erwartungen für spezifische Testfälle. Konsumenten entwickeln gegen eine laufende Vertrags-URL, statt Mock-Provider-DSL zu schreiben.
Mehr Kontext bietet Vertragstesting und Mocking-Tools.
Was ist mit Provider-Fuzzing gegen die Spezifikation?
Kombinieren Sie Apidog-Szenariotests mit einem spezifikationsbasierten Property-Tester, um auch negative Fälle breiter abzudecken. Die Spezifikation kann beide Werkzeuge antreiben. Eine mögliche Option behandelt Was ist Schemathesis.
Wie viel kostet PactFlow im Vergleich zu Apidog?
PactFlows Starter-Tarif ist für zwei Integrationen kostenlos. Team kostet 127 $ pro Monat für 50 Integrationen, Enterprise wird individuell bepreist.
Apidog ist für bis zu vier Benutzer kostenlos. Bezahlte Pläne beginnen bei 9 $ pro Benutzer und Monat; Vertragswerkzeuge sind enthalten und werden nicht als separater Broker abgerechnet.
Wenn Sie auch Capture-Replay-Tools vergleichen, lesen Sie die beste Keploy-Alternative.
Schaffen Sie die Zeremonie ab, behalten Sie den Vertrag
Wenn Ihre Pact-Installation hauptsächlich Schema-Drift erkennen soll, können Sie diese Prüfung aus einer einzigen OpenAPI-Spezifikation ableiten:
- OpenAPI-Datei in Apidog importieren.
- Testszenarien für die reale Implementierung erstellen.
-
apidog runin CI integrieren. - Konsumenten die Mock-URL bereitstellen.
- Spezifikationsänderungen als überprüfbare Änderungen behandeln.
Laden Sie Apidog herunter oder starten Sie im Browser. Für kleine Teams ist der Einstieg kostenlos – und der Broker, den Sie nicht mehr betreiben müssen, ist oft der wichtigste Gewinn.
Top comments (0)