Ich arbeite an einem neuen Projekt, das Daten von einer REST-API eines Drittanbieters abfragt. Dies ist für einen Echtzeit-Sportdaten-Feed gedacht, sodass der Feed nur funktioniert, wenn tatsächlich ein Spiel stattfindet.
Obwohl die Drittanbieter eine gute Dokumentation (XSD usw.) bereitstellen, haben sie keine Möglichkeit, ein Spielgeschehen zu simulieren. Um den Code zu testen, den ich mit dieser API geschrieben habe, müsste ich warten, bis ein tatsächliches Spiel stattfindet.
Ich kann nur Code schreiben, um ein Spiel selbst zu simulieren, aber es scheint eine Menge Arbeit zu sein. Wie würden Sie das angehen?
Antworten:
Dies ist der perfekte Anwendungsfall für ein Scheinobjekt . Es gibt Spottbibliotheken für jede populäre Sprache. Sie möchten das Objekt verspotten, das die REST-Serviceantworten zum Zurückgeben von Testdaten bereitstellt. Sie können die Testdaten entweder manuell generieren oder sie aus früheren Aufrufen des Live-Systems erfassen.
quelle
Warten Sie, bis ein Spiel stattfindet. Erfassen Sie jedes Ereignis aus dem Feed. Schreiben Sie einen Simulator, der die Ereignisse zu den entsprechenden Zeiten wiederholt . Voila, du hast einen Futtersimulator mit echten Daten.
quelle
Ich empfehle Ihnen, Ihren eigenen Simulator zu schreiben. Sie können damit alle möglichen Szenarien testen.
Wenn ich dies in der Vergangenheit getan habe, habe ich "spezielle" Werte in den Anforderungsnachrichten verwendet, um den Simulator aufzufordern, das zu tun, was ich brauche. Auf diese Weise können Sie auch End-to-End-Tests ausführen, ohne Ihre Entwicklungsumgebung zu verlassen.
Bearbeiten: Wenn Ihr Projekt beispielsweise XML an einen Drittanbieterdienst sendet, enthält die Anforderung möglicherweise z
<value>50.00</value>
. Der Simulator kann so codiert (oder besser so konfiguriert) werden, dass 50.00 => explodieren, 60.00 => Müll, 70.00 => Verbindung schließen und so weiter. Die Idee ist, dass das Verhalten des Simulators von seiner Eingabe abhängt, die Sie in jedem Testfall steuern.quelle
In Anbetracht der Tatsache, dass der Buchmacher möglicherweise einige Beispieldaten bereitstellt (und diese während der Integrationsphase gespeichert werden können), empfehle ich, diese Feeds folgendermaßen zu organisieren:
Wahrscheinlich bietet der Anbieter zwei Arten von Updates an: Push (POST) und Pull (GET).
An diesem Punkt sollten Sie
Verwalten Sie die Entwicklung und das Testen
Ohne auf die Details der zu verwendenden Technologie eingehen zu müssen, erhalten Sie einen Mini-Server , der nur auf 4 URLs reagiert (oder die, die je nach Anbieter erforderlich sind), und einen Mini-Push-Dienst .
Persönlich würde ich einen einfachen Perl-Server oder den gleichen aber mit Nodejs machen. Im Hinblick auf die Einspeisung von Daten wird ein Timer ausreichen, der einen Offline-Browser ( CURL , WGET ) aufruft.
quelle
Ich habe die REST-API mithilfe einer Kombination aus cucumberjs und phantomjs simuliert, wobei der Proxy-Server auf 127.0.0.1 gesetzt und ein node.js-Prozess mit
http-proxy
und verknüpft wurdenock
dort zu . CucumberJS ist nicht der wichtige Teil, Sie können Testszenarien auf jede Art und Weise schreiben, der Rest ist der Schlüssel zur Simulation. Es ist in der Lage, einfach durch Match-Request-Return-Daten zu verspotten, aber Sie können auch nach Mustern und Hook-Callback-Funktion filtern, um eine Antwort zu erstellen, so dass Sie jeden Grad an Granularität simulieren können, den Sie benötigen (im Extremfall mit a vollständiger Demo-Server, aber Sie können dies schrittweise tun).Es funktioniert gut:
http-proxy
. So funktioniert jedes "normale" Laden (Seiten, Bilder).nock
diese.In meinem Szenario habe ich es in demselben Prozess mit js-Tests für Gurken kombiniert.
nock
HTTP-Mocking für das getestete Szenario ein.Der Rest ist wie oben in diesem Abschnitt gezeigt (das heißt, es ist ein kleiner Zyklus, ich als Testläufer befehle Phantomjs, eine Seite zu laden, die alle Anfragen an mich zurückleitet, und ich leite sie an das Netz weiter oder fange ab sie, wenn es die getestete API ist).
quelle