TwinStub bringt zustandsbehaftete, deterministische API-Simulation in lokale Tests
Ein neues Open-Source-Tool bildet komplexe Integrationsabläufe als Zustandsmaschinen ab und ermöglicht es Entwicklern, seltene Webhook-Ereignisse und Sonderfälle lokal ohne Cloud-Abhängigkeiten zu testen.
Automatisch aus dem englischen Original übersetzt.
Das neue Open-Source-Projekt TwinStub ist aufgetaucht, um Entwicklungsteams bei der lokalen Simulation komplexer API-Integrationen zu unterstützen. Das Tool wurde im Oktober 2026 auf GitHub veröffentlicht und ermöglicht es Ingenieuren, zustandsbehaftete Szenarien in YAML-Dateien zu definieren, die als echte HTTP-Server abgespielt werden. Es wurde speziell für Teams entwickelt, die Software erstellen, die mit externen Anbietern wie Zahlungs-Gateways oder Logistikplattformen interagiert.
Was passiert ist
TwinStub adressiert einen häufigen Schmerzpunkt in der Softwareentwicklung: das Testen der ungünstigen Pfade (Unhappy Paths) von Drittanbieter-Integrationen. Wenn Unternehmen Systeme bauen, die auf externen APIs basieren, treten die schwierigsten Fehler oft nicht während des Standardbetriebs auf, sondern bei seltenen Ereignissen wie Rückbuchungen, Identitätsverifizierungsfehlern oder verzögerten Webhooks. Traditionelle Mock-Server verarbeiten in der Regel nur eine Anfrage gleichzeitig und haben kein Gedächtnis, was es schwierig macht, eine Abfolge von Ereignissen zu simulieren, die sich über Tage oder Wochen erstreckt.
Dieses neue Tool modelliert eine Integration als Zustandsmaschine. Es hält den Sitzungsstatus aufrecht, was bedeutet, dass ein bestimmter Endpunkt je nach vorherigen Interaktionen unterschiedliche Antworten zurückgeben kann. Beispielsweise könnte eine Anfrage zur Überprüfung eines Zahlungsstatus zunächst "processing" (in Bearbeitung), dann "succeeded" (erfolgreich) und schließlich "chargeback" (Rückbuchung) zurückgeben, wenn die simulierte Zeitlinie fortschreitet. Dies ermöglicht es Entwicklern, langfristige Prozesse für Testzwecke auf Sekunden zu komprimieren. Das Tool läuft als einzelne Binärdatei, geschrieben in Go, erfordert keine Cloud-Registrierung oder externe Dienste und wird unter einer MIT-Lizenz verteilt.
Der Kernnutzen besteht darin, dass TwinStub als Stellvertreter für den externen Anbieter fungiert. Der Code, der getestet wird, ist die Client-Anwendung selbst, die Anfragen bearbeiten, Antworten parsen, Webhook-Signaturen verifizieren und interne Kontobücher aktualisieren muss. Durch die Simulation des Anbieters können Entwickler Verzweigungen in ihrem Code auslösen, die sonst schwer zu erreichen sind, wie etwa die Handhabung von Ereignisübermittlungen außerhalb der Reihenfolge oder die Verifizierung von HMAC-Signaturen bei eingehenden Webhooks. Das Projekt umfasst eine Befehlszeilenschnittstelle zum Bereitstellen von Simulationen, Validieren von Konfigurationsdateien und Initialisieren von Demo-Szenarien.
Wichtige Details
- Zustandsbehaftete Simulationen: Im Gegensatz zu statischen Mocks verwendet TwinStub Sitzungen, die durch Header, Query-Parameter oder Body-Felder identifiziert werden, um den Status jeder Client-Interaktion über die Zeit hinweg zu verfolgen.
- Webhook-Ketten: Es unterstützt verzögerte, HMAC-signierte Webhooks mit exponentiellen Wiederholungsversuchen und Jitter, um das Verhalten großer Anbieter wie Stripe nachzuahmen.
- Zeitkompression: Entwickler können einen Time-Scale-Flag verwenden, um langandauernde Abläufe zu beschleunigen und so Dreißig-Tage-Prozesse für schnelle Tests in Stunden oder Minuten zu verwandeln.
- Single-Binary-Bereitstellung: Das Tool ist eine eigenständige Go-Binärdatei, die lokal oder in Continuous-Integration-Pipelines läuft, ohne Java, Electron oder Cloud-Konnektivität zu erfordern.
- Diagnostisches Feedback: Wenn eine Anfrage keinem definierten Szenario entspricht, gibt der Server eine detaillierte Fehlermeldung zurück, die erklärt, welche Matcher fehlgeschlagen sind und warum, was beim Debugging hilft.
- Chaos-Engineering-Funktionen: Benutzer können Latenzen injizieren, TCP-Verbindungen fallen lassen oder beliebige Serverfehler zurückgeben, um zu testen, wie ihre Anwendung Transportfehler behandelt.
Hintergrund
Um den Nutzen von TwinStub zu verstehen, hilft es, zwischen einfachem Mocking und zustandsbehafteter Simulation zu unterscheiden. Ein grundlegender Mock-Server antwortet auf eine spezifische URL mit einer vordefinierten Payload. Er erinnert sich nicht daran, was in vorherigen Anfragen passiert ist. Dies funktioniert gut für das Testen der Happy Paths, bei denen eine einzelne Anfrage eine einzelne erwartete Antwort liefert. Moderne Integrationen sind jedoch oft ereignisgesteuert und zustandsbehaftet. Eine Zahlung kann autorisiert, erfasst, erstattet und dann Wochen später rückgebucht werden. Jeder Schritt ändert den Status der Transaktion.
Webhooks sind asynchrone Benachrichtigungen, die von externen Diensten an Ihre Anwendung gesendet werden, wenn ein Ereignis eintritt. Das Testen von Webhooks ist berüchtigt schwierig, da sie eine öffentlich erreichbare URL erfordern und kryptografische Signaturen beinhalten, um die Authentizität sicherzustellen. In einer lokalen Entwicklungsumgebung erfordert der Empfang dieser Webhooks normalerweise Tunnel-Dienste oder komplexe Netzwerkkonfigurationen. TwinStub vereinfacht dies, indem es als Sender fungiert und signierte Webhooks generiert, die gemäß dem definierten Szenario ausgelöst werden. Dies ermöglicht es Entwicklern, ihre Webhook-Handler zu testen, einschließlich Signaturverifizierung und Idempotenzlogik, ohne auf den tatsächlichen Drittanbieterdienst angewiesen zu sein.
Warum es wichtig ist
Für Teams, die ihre eigene Software betreiben, ist die Zuverlässigkeit von Integrationen entscheidend. Fehler im Integrationscode führen oft zu finanziellen Unstimmigkeiten, wie doppelten Belastungen von Kunden oder dem Nichtfreigeben reservierter Bestände nach einer fehlgeschlagenen Zahlung. Diese Probleme sind teuer in der Korrektur in Produktion und schwer in Staging-Umgebungen zu reproduzieren. Indem TwinStub eine deterministische Möglichkeit bietet, diese seltenen Ereignisse zu simulieren, ermöglicht es Entwicklern, diese Fehler vor dem Deployment zu erkennen. Es verlagert die Testlast von manueller Verifizierung gegen Live-Sandboxes zu automatisierten Tests, die in jedem Build laufen können.
Darüber hinaus verbessert die Fähigkeit, diese Simulationen lokal ohne Cloud-Abhängigkeiten auszuführen, Sicherheit und Geschwindigkeit. Entwickler müssen keine API-Keys oder sensiblen Daten mit externen Mocking-Diensten teilen. Das Design des Tools stellt sicher, dass der Status im Speicher gehalten wird, was bedeutet, dass jeder Testlauf frisch startet und eine Kontamination zwischen Tests verhindert. Diese Deterministik ist für Continuous-Integration-Pipelines essenziell, wo flaky Tests die Entwicklungsgeschwindigkeit verlangsamen können. Die Aufnahme eines Validierungsbefehls ermöglicht es Teams, ihre Szenariodefinitionen vor der Ausführung auf Fehler zu prüfen, um sicherzustellen, dass die Simulation das beabsichtigte Verhalten genau widerspiegelt.
Es gibt jedoch eine Einschränkung, die anerkannt werden muss. Die Genauigkeit der Simulation hängt vollständig von der Qualität der YAML-Szenariodefinition ab. Wenn das Szenario das reale Verhalten des Anbieters falsch abbildet, bestehen die Tests auch dann, wenn der Code für die reale Welt inkorrekt ist. Daher wird empfohlen, die Antwortstrukturen einmal gegen die Sandbox des Anbieters zu validieren und dann TwinStub zu nutzen, um die Sonderfälle zu erkunden, die die Sandbox nicht leicht auslösen kann.
Was Sie tun können
- Installieren Sie TwinStub über die Go-Toolchain oder Docker, um API-Interaktionen in Ihrer lokalen Umgebung zu simulieren.
- Definieren Sie Ihre Integrationsszenarien in YAML und konzentrieren Sie sich dabei auf Zustandsübergänge und Webhook-Sequenzen statt nur auf statische Antworten.
- Nutzen Sie die Time-Scale-Funktion, um langlaufende Prozesse zu beschleunigen, sodass Sie monatelange Workflows in Minuten testen können.
- Implementieren Sie die Signaturverifizierung in Ihren Webhook-Handlern und nutzen Sie Twinstubs HMAC-Signierung, um sicherzustellen, dass Ihre Sicherheitslogik korrekt funktioniert.
- Führen Sie den Validierungsbefehl in Ihrer CI-Pipeline aus, um Konfigurationsfehler frühzeitig zu erkennen und zu verhindern, dass fehlerhafte Simulationen Builds blockieren.
- Testen Sie Chaos-Szenarien, indem Sie Latenzen oder Verbindungsabbrüche injizieren, um zu überprüfen, ob Ihre Anwendung Netzwerkfehler angemessen behandelt.



