Die Forschung sagt uns, dass Integrationstests in Bezug auf Zeit, Aufwand und Wartung teurer sind, ohne uns weitere Garantien zu geben. An den Integrationspunkten zwischen Microservices kann etwas schiefgehen. Wenn End-to-End-Tests nicht maßstabsgetreu funktionieren, was können Sie tun, um sicherzustellen, dass Serviceinteraktionen ordnungsgemäß getestet werden? End-to-End-Funktionstests decken mehr als API-Funktionalität oder andere Microservice-Austausche ab. End-to-End-Tests decken den gesamten Endbenutzer-Workflow von Anfang bis Ende ab, unabhängig davon, welche Back-End-Systeme Sie kreuzen oder verwenden. Der Schwerpunkt eines End-to-End-Testaufwands liegt auf der Endbenutzer-Workflowfunktionalität und nicht auf der jeweiligen Schnittstelle, die die Verarbeitung dahinter durchführt. Ich frage mich immer noch über Frage Nummer 1. Es scheint, als ob das Schreiben von so etwas wie Given, dass der Benutzername “bad_username” ungültig ist, eine Art magische On-the-Fly-Manipulation / Addition von Validierungsregeln zur zu testenden API erfordern würde. Vertragstests sind eine andere Möglichkeit, Microservices zu testen. Es kann den Schmerz von Integrationstests reduzieren, indem jeder Dienst unabhängig testbar gemacht wird. Erstens erfasst der Verbraucher seine erwarteten Interaktionen (dies bildet den Vertrag zwischen den beiden Diensten oder “Pakt”). Dann teilen sie den Pakt mit dem Anbieter, der diese Interaktionen endlich wiedergibt und überprüft, ob die API die Erwartungen erfüllt. Gegen Ende des zweiten Teils der Beiträge werden wir einige Werkzeuge, die speziell für Vertragstests entwickelt wurden, praktisch einholen. Für praktische Ratschläge zu Vertragstests mit Pact, nehmen Sie an meinem Vortrag im TestBash Manchester des Ministry of Testing teil, das vom 2.
bis 3. Oktober 2019 in Manchester, Großbritannien, stattfindet. Kann es nicht nach England schaffen? Ich spreche auch über “Changing Tires on a Moving Car: A Journey to Zero-Downtime Deployments” am 7. November 2019 bei Agile + DevOps East in Orlando, Florida. Die Konferenz findet vom 4. bis 7. November statt. Ich habe eine Frage rund um das Testen! Ab sofort befinde ich mich in einer einzigartigen Situation, in der die Software, die ich schreibe, an einen Drittanbieter geht und einige Daten speichert. In diesem Fall bedeutet das Schreiben eines Tests, um zu bestätigen, dass diese Daten erfolgreich veröffentlicht werden, die Verwendung eines Produktionsendpunkts… was ich bezweifle, ist eine intelligente Art, Dinge zu schreiben.
Der Paktmakler hält die Verträge und bietet einen Mehrwert, wie z. B. die Darstellung, ob Verträge überprüft wurden, welche Wechselwirkungen zwischen Dienstleistungen bestehen und andere Funktionen. Zeichnen Sie Ihre Architektur und finden Sie Ihre Verbraucher, Ihre Anbieter und deren Integrationspunkte heraus. Wählen Sie eine Interaktion aus, überlegen Sie, wie der Vertrag aussehen könnte, und versuchen Sie, einfache Komponententests zu implementieren, um einen Vertrag zu generieren und zu validieren. Vertragstests passen in die Ebene “Servicetests”, da sie schnell ausgeführt werden und nicht in externe Systeme integriert werden müssen, um ausgeführt zu werden. Ihre Aufgabe ist es, Ihnen die Zuversicht zu geben, dass die Systeme, mit denen Sie integrieren, mit Ihrem Code kompatibel sind, bevor Sie es veröffentlichen. Pakttests sollten datenunabhängig sein. Pakttests sind am besten, wenn eine erfolgreiche Überprüfung nicht von den spezifischen Daten abhängt, die der Anbieter zurückgibt. Sie kaufen nicht zu Mocks.
Sie brauchen Vertrauen. Warum investieren Sie in all diese Tests, wenn Sie nicht sicherstellen können, dass Sie beim Produktionsstart keine API brechen, mit der ein anderes Team von Ihnen abhängig ist? End-to-End-Tests umfassen das Testen eines Benutzerworkflows von Anfang bis Ende, einschließlich aller Back-End-Verarbeitungsmodule, seien es API-Dienste oder andere Messaging- oder Datenübertragungsdienste. Dabei wird eine gesamte Anwendung vom Anfang des Benutzerworkflowprozesses bis zum Ende getestet. Sobald alle Interaktionen ausgeführt wurden, werden die Ergebnisse nach einer erfolgreichen oder fehlgeschlagenen Vertragstestsitzung an den Pakt-Broker zurückgesendet, wo sie zur Inspektion und Sichtbarkeit dieser Einsicht aufgezeichnet werden. Bevor wir in die Details dieser Teststrategien gehen, möchte ich die Bedeutung von “Integrationstest” im Kontext dieses Artikels definieren: Der Consumer-Teil definiert den API-Vertrag, indem er Erwartungen an die Anbieteranforderungs- und Antwortstruktur festlegt.