So führen Sie externe API-Tests durch (Blackbox)

14

Angenommen, Sie verwenden APIs eines Herstellers. Wie können Sie sicherstellen, dass deren API wie erwartet funktioniert?

Mein Hauptanliegen ist manchmal, dass der Hersteller die Änderungen an seinem Code vorgenommen und die API zerstört hat. Wir möchten eine Art automatische Software, um sie kontinuierlich zu testen. Wie gehe ich damit um?

user34401
quelle
Je nach Sprache gibt es möglicherweise Tools, die Abhilfe schaffen (ich denke an Pex für C # -Bibliotheken / APIs).
Steven Evers

Antworten:

10

Kurze Antwort: Sie benötigen eine Testsuite für eine Drittanbieter-API - Sie müssen also eine entwickeln.

Erwarten Sie nicht, dass dies jemand anderes für Sie erledigt, und erwarten Sie keine "Wunderwaffe", um automatisch die richtigen Tests zu generieren.

Einige Dinge, die Sie zusätzlich versuchen könnten:

  • Fragen Sie den Anbieter, ob er eine Liste der wichtigsten Änderungen für jede neue Version bereitstellt
  • Fragen Sie sie, wie ihnen die API-Kompatibilität am Herzen liegt, und informieren Sie sie, dass dies ein wichtiges Feature für Sie ist
  • Überprüfen Sie, ob die API bestimmte Test-Hooks, Protokollausgaben oder ähnliches für Teile bereitstellt, die ebenfalls nicht einfach getestet werden konnten
  • Binden Sie wichtige API-Aufrufe in Ihren eigenen Protokollcode ein, und schreiben Sie die Eingabe und die zugehörige Ausgabe der API in eine Protokolldatei. Dies erleichtert das Debuggen, wenn etwas Unerwartetes passiert
  • Fügen Sie Zusicherungen zu API-Aufrufen hinzu, um Vor- und Nachbedingungen zu überprüfen. Wenn in einer neuen Version der API ein unerwartetes Verhalten in Ihrer Anwendung auftritt, werden Sie frühzeitig durch eine Fehlermeldung informiert

Ob diese Dinge funktionieren oder nicht, hängt davon ab, wer Ihr Anbieter ist und an welche Art von API Sie denken. Eine API, die eine überprüfbare Ausgabe wie Dateien erzeugt, ist viel einfacher zu testen als eine API, die ein physisches Gerät steuert, auf dem Sie das Verhalten der Sache beobachten müssen, um zu entscheiden, ob der API-Aufruf erfolgreich war oder nicht.

Doc Brown
quelle
Ich stimme vollkommen zu, aber es scheint mir, dass der Fragesteller keine Erfahrung mit Testeinheiten hat und das Schema der Arbeit mit ihnen nicht kennt. Ich meine: kritische Punkte finden, Testeinheiten schreiben, alle Tests ausführen, debuggen, während des Debuggens neue kritische Punkte finden, neue Einheiten schreiben, die letzten 4 Schritte nach jeder API-Änderung wiederholen.
Gangnus
@Gangnus: IMHO hat uns das OP nichts über seine früheren Erfahrungen mit Unit-Tests erzählt. Wenn er damit Probleme hat, weiß er sicher, dass er eine spezifischere Frage stellen muss. Außerdem geht es hier nicht um "Unit Tests", sondern um "automatisierte Integrationstests". Diese erfordern in der Regel ein anderes Schema als beispielsweise Unit-Tests in TDD-Manier.
Doc Brown
Ja, das hatte er nicht gesagt. Aber wenn er fragt, "wie er sicherstellen soll, dass ihre API wie erwartet funktioniert", ohne Testeinheiten zu erwähnen, "scheint es mir", dass er sie nicht kennt. Für automatisierte Integrationstests kennt er sie auch mit höherer Wahrscheinlichkeit nicht, er erwähnte lediglich "irgendeine Art von automatisierter Software". Sie erwarten von den Leuten dasselbe Wissen wie von Ihnen, aber in diesen Themen wissen 99% der Programmierer (einschließlich mir) weit weniger. und 90% weit weit weit weniger.
Gangnus
0

Basierend auf der Formulierung des Posters ist es mehr als nur ein Test, IMO. Nachdem Sie Ihren Komponententest für die API geschrieben und sichergestellt haben, dass alles wie erwartet funktioniert, müssen Sie APIs von Drittanbietern überwachen, um Probleme zu erkennen, bevor die Benutzer dies tun. Das ist das eigentliche Risiko bei APIs von Drittanbietern - es ist nicht Ihr Code und Sie haben keine Kontrolle darüber, wie viel Tests an der API durchgeführt wurden oder wann / ob sich diese ändert.

(Haftungsausschluss: hier verwendete Produktnamen) Wenn Sie Ihre API-Tests mit soapUI schreiben, können diese Tests in AlertSite als Betriebsmonitor wiederverwendet werden, um sicherzustellen, dass die API weiterhin wie erwartet funktioniert. Wenn der Test fehlschlägt, können Sie benachrichtigt werden, bevor Ihre Benutzer Sie anrufen und sich darüber beschweren, dass Ihre App nicht funktioniert.

Lorinda Brandon
quelle
0

Implementieren Sie Lerntests für Ihr Interessengebiet (Funktionen, die Sie verwenden möchten). Lerntests sind Integrationstests, die vom Entwickler gegen den öffentlichen Vertrag der API geschrieben werden. Die Tests sollten nicht mit den internen Implementierungsdetails verglichen werden, auch wenn der Quellcode für die API verfügbar ist. Diese Art von Lerntests dient zwei Zwecken:

  1. Dies verbessert Ihr Verständnis der Drittanbieter-API erheblich.
  2. Die Tests helfen zu überprüfen, ob die beanspruchte neue Version tatsächlich abwärtskompatibel ist oder nicht.
Anand Patel
quelle
0

Es gibt 2 Ansätze für dieses Problem ...

Ihre App ist mit echtem Benutzerverkehr in Betrieb:

Wenn Sie eine App in Produktion haben, die Live-Verkehr hat und von einer externen API abhängt, müssen Sie genau überwachen und gute Schwellenwerte festlegen, um so schnell wie möglich zu wissen, wann die externe API Änderungen ohne Benachrichtigung vornimmt.

Sie sollten immer berücksichtigen, dass:

  • Apis Wandel im Laufe der Zeit
  • Der API-Anbieter kann Fehler haben
  • Die Testkits von API-Anbietern können Fehler aufweisen oder nicht die gesamte Funktionalität der Produktions-API abdecken

Ihre App ist eine Installation und verfügt über geplante Versionen / Releases:

In diesem Fall haben Sie eine Nachfrist zum Scheitern ... Live-Benutzer sind nicht sofort von den Änderungen der externen API betroffen.

meiner meinung nach ist das eine einfachere aufgabe. Schreiben Sie einen Test (vollständiger End-to-End-Test), der echte Transaktionen / http / Anforderungen an Ihre Anwendung sendet, die die externe API aufrufen, und prüfen Sie, ob keine Fehler vorliegen. Keine Test-Kits, keine Spotttransaktion.

Nachdem diese Aufgabe erledigt ist, können Sie diese alle 24 Stunden, 1 Minute usw. ausführen.

Gute Praktiken:

  • alles automatisieren
  • Habe eine Person, mit der du dich schnell beim Anbieter der externen API in Verbindung setzen kannst
  • Vertraue nicht blindlings dem Anbieter, teste alles
  • Schnell ausfallen - Wenn Ihr Service stark von der externen API abhängt, lassen Sie Ihren Service nicht abstürzen. Scheitern Sie schnell und geben Sie die richtigen Fehlermeldungen zurück

Werkzeuge:

Nimrod007
quelle