Seien Sie am 30. April dabei: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Registrierung

Was ist API-Testen? Leitfaden für API-Tests

Parasoft-Würfel-Logo 300x300
23. Februar 2021
9 min lesen

Das Verständnis der Grundlagen von API-Tests hilft Ihnen, die Funktionalität jeder Integration zu validieren, die Sie über API an Ihrer Software vornehmen. In diesem Leitfaden wird ausführlich erläutert, wie Sie die richtigen Strategien und Tools für API-Tests auswählen können.

API-Tests auf sinnvolle Weise zu verstehen, kann die Kraft freisetzen, eine wirklich effektive Teststrategie zu entwickeln. In diesem Leitfaden erfahren Sie, was API-Tests sind, einschließlich der vielen verschiedenen Arten von API-Tests, um sicherzustellen, dass Sie es wissen wie man API effektiv testet.

Bei einer kürzlich durchgeführten Bereitstellung arbeitete ich mit einem Kunden zusammen, um eine API-Teststrategie zu entwickeln, als ich aus heiterem Himmel gefragt wurde: "Was ist API-Test?" Ich erkannte dann, dass API-Tests überraschend schwierig zu beschreiben sind, und selbst wenn Sie es beschreiben, klingt es eher langweilig und kompliziert.

Nun, ich bin hier, um Ihnen zu sagen, dass API-Tests NICHT langweilig oder kompliziert sind. Es macht tatsächlich sehr viel Spaß und ist sehr leistungsfähig. Wenn Sie es auf sinnvolle Weise verstehen, können Sie eine wirklich effektive Teststrategie entwickeln. Lesen Sie weiter, um wirklich zu verstehen, wie API-Tests durchgeführt werden.

Was ist eine API und wie verwende ich sie?

In der Serviceentwicklung ist eine Anwendungsprogrammschnittstelle (Application Program Interface, API) eine Möglichkeit für verschiedene Anwendungen, in einer gemeinsamen Sprache miteinander zu kommunizieren, die häufig durch einen Vertrag definiert wird. Beispiele hierfür wären ein Swagger-Dokument für RESTful-Services oder eine WSDL für SOAP-Services. Sogar Datenbanken haben eine Schnittstellensprache, dh SQL.

Ähnlich wie eine Benutzeroberfläche es einem Menschen ermöglicht, mit einer Anwendung zu interagieren, ermöglichen APIs Maschinen eine effiziente Kommunikation untereinander.

APIs sind großartig, da sie Bausteine ​​darstellen, mit denen Entwickler alle Arten von Interaktionen einfach zusammenstellen können, ohne jedes Mal eine Schnittstelle neu schreiben zu müssen, wenn sie Maschinen für die Kommunikation benötigen. Da APIs Verträge haben, können Anwendungen, die miteinander kommunizieren möchten, auf völlig unterschiedliche Weise erstellt werden, sofern sie gemäß dem API-Vertrag kommunizieren. Auf diese Weise können verschiedene Entwickler aus verschiedenen Organisationen in verschiedenen Teilen der Welt hochverteilte Anwendungen erstellen, während dieselben APIs erneut verwendet werden.

Wenn ein Benutzer mit dem Frontend einer Anwendung (z. B. einer mobilen App) interagiert, führt dieses Frontend API-Aufrufe an Backend-Systeme durch und vereinfacht so den Entwicklungsprozess im Wesentlichen auf zwei Arten:

  1. Der Entwickler muss sich nicht um die Erstellung einer benutzerdefinierten Anwendung für jedes mobile Gerät oder jeden Browser kümmern.
  2. Verschiedene Backend-Systeme können aktualisiert oder geändert werden, ohne dass jedes Mal die gesamte Anwendung erneut bereitgestellt werden muss.

Infolgedessen können Entwickler Zeit sparen, indem sie sich auf den einzelnen Service konzentrieren, um eine einzelne Aufgabe zu erledigen, anstatt Zeit damit zu verbringen, die Logik in ihre Anwendung zu schreiben.

Ein gutes Beispiel für die Verwendung von Standard-APIs

Amazon Shopping Services ' dokumentierte APIs Entwickler können beim Erstellen ihrer Anwendungen mit Amazon Shopping kommunizieren. Der Entwickler kann die Amazon-APIs zu den entsprechenden Zeiten in seiner Benutzererfahrung verwenden, um eine nahtlose Customer Journey zu erstellen.

Zum Beispiel könnte dies ungefähr so ​​aussehen:

BenutzererfahrungEntsprechende API-Aufrufe
1. Suchen Sie nach einem guten VideospielSuchartikel
2. Amazon schlägt Minecraft vorGetItems
3. Fügen Sie Minecraft meinem Warenkorb hinzuIn den Warenkorb legen

Der Benutzer interagiert mit der Benutzeroberfläche, während die Anwendung mit Backend-Amazon-APIs interagiert, wie vom Entwickler definiert. Alles funktioniert sehr gut, solange sich die zugrunde liegenden APIs wie erwartet verhalten.

… Aber das ist ein sehr großes Wenn.

Wir kommen also zu der Wichtigkeit, diese APIs zu testen.

Was ist API-Test?

Wie führen Sie API-Tests durch? Was bedeutet das? Wie API-Test? Im Gegensatz zum Benutzer, der nur auf der Benutzeroberfläche mit der Anwendung interagiert, muss der Entwickler / Tester die Zuverlässigkeit aller zugrunde liegenden APIs sicherstellen. Ohne die APIs selbst zu testen, würden Entwickler und Tester wie ein Benutzer beim manuellen Testen der Anwendung auf UI-Ebene stecken bleiben und warten, bis der gesamte Anwendungsstapel erstellt ist, bevor sie mit dem Testen beginnen können.

Sie können stattdessen automatisierte API-Tests durchführen, indem Sie die Anwendung auf API-Ebene testen, Testfälle entwerfen, die direkt mit den zugrunde liegenden APIs interagieren, und zahlreiche Vorteile erzielen, einschließlich der Möglichkeit, die Geschäftslogik auf einer Ebene zu testen, die in einem einfach zu automatisieren ist stabile Weise. Im Gegensatz zu manuellen Tests, die auf die Validierung einer bestimmten Benutzererfahrung beschränkt sind, geben Ihnen API-Tests die Möglichkeit, Ihre Anwendung gegen das Unbekannte abzusichern.

Wie führe ich API-Tests durch?

Verschiedene Arten von API-Tests - Wo, Warum und Wie

Der beste Weg, um API-Tests durchzuführen, besteht darin, eine solide Testpraxis von unten nach oben aufzubauen. Zu diesem Zweck ist es eine gute Möglichkeit, eine Teststrategie zu entwerfen, Martin Fowlers zu folgen Testpyramide. Der Pyramidenansatz schlägt vor, dass Sie eine breite Palette von API-Tests (z. B. Vertrag, Szenario, Leistung usw.) auf einer soliden Grundlage von Komponententests mit UI-Tests erstellen. Mit den API-Tests können Sie die Anwendungslogik auf einer Ebene testen, die Unit-Tests nicht können.

Diese Teststrategien ergänzen sich. Frühere Tests auf den unteren Ebenen der Anwendung helfen Ihnen dabei, „schnell und früh zu versagen“ und Fehler frühzeitig an der Quelle und nicht später im SDLC zu erkennen. Unit-Tests sind wichtig, aber im Moment konzentrieren wir uns auf API-Tests. Wie testet man APIs? Welche Arten von Tests können durchgeführt werden? Warum sind sie wichtig? Wie mache ich do API-Tests?

Im Folgenden sind die verschiedenen Arten von API-Tests aufgeführt, einschließlich wo, warum und wie Sie sie verwenden können.

Vertragstests

Eine API stellt einen Vertrag zwischen zwei oder mehr Anwendungen dar. Der Vertrag beschreibt, wie mit der Schnittstelle interagiert wird, welche Dienste verfügbar sind und wie sie aufgerufen werden. Dieser Vertrag ist wichtig, weil er als Grundlage für die Kommunikation dient. Wenn etwas mit dem Vertrag nicht stimmt, ist alles andere wirklich wichtig.

Die erste und grundlegendste Art von API-Tests sind Vertragstests, die den Servicevertrag selbst testen (Swagger, PACT, WSDL oder RAML). Diese Art von Test überprüft, ob der Vertrag richtig geschrieben ist und von einem Kunden verwendet werden kann. Dieser Test funktioniert, indem er eine Reihe von Tests erstellt, die den Vertrag einbeziehen und Folgendes validieren.

  • Der Servicevertrag wird nach Spezifikationen geschrieben.
  • Eine Nachrichtenanforderung und -antwort sind semantisch korrekt (Schemavalidierung).
  • Der Endpunkt ist gültig (HTTP, MQ/JMS-Thema/Warteschlange usw.).
  • Der Servicevertrag hat sich nicht geändert.

Ich betrachte dies als Ihre ersten „Rauchtests“. Sollten diese Tests fehlschlagen, gibt es wirklich keinen Grund, diesen speziellen Dienst weiter zu testen. Sollten diese Tests erfolgreich sein, können Sie mit dem Testen der tatsächlichen Funktionalität der API fortfahren.

Komponententests

Komponententests sind wie Komponententests für die API. Sie möchten die einzelnen in der API verfügbaren Methoden verwenden und jede einzelne davon isoliert testen. Sie erstellen diese Tests, indem Sie für jede Methode oder Ressource, die im Servicevertrag verfügbar ist, einen Testschritt erstellen.

Der einfachste Weg, Komponententests zu erstellen, besteht darin, den Servicevertrag zu nutzen und die Clients erstellen zu lassen. Anschließend können Sie jeden einzelnen Testfall mit positiven und negativen Daten datengesteuert, um zu überprüfen, ob die zurückgegebenen Antworten die folgenden Merkmale aufweisen:

  • Die Anforderungsnutzlast ist wohlgeformt (Schemaüberprüfung)
  • Die Antwortnutzlast ist wohlgeformt (Schemaüberprüfung)
  • Der Antwortstatus ist wie erwartet (200 OK, zurückgegebene SQL-Ergebnismenge oder sogar ein Fehler, wenn Sie dies wünschen).
  • Die Nutzdaten für Antwortfehler enthalten die richtigen Fehlermeldungen
  • Die Antwort entspricht der erwarteten Basislinie. Dies kann zwei Formen annehmen:
    • Regression / Diff - Die Antwortnutzlast sieht von Anruf zu Anruf genau gleich aus (ein Top-Down-Ansatz, bei dem Sie im Wesentlichen eine Momentaufnahme der Antwort erstellen und diese jedes Mal überprüfen). Dies kann auch ein großartiger Katalysator sein, um API-Änderungen zu identifizieren (dazu später mehr).
    • Behauptung - Die einzelnen Elemente in der Antwort entsprechen Ihren Erwartungen (dies ist ein chirurgischer Bottom-up-Ansatz, der auf einen bestimmten Wert in der Antwort abzielt).
  • Der Dienst antwortet innerhalb eines erwarteten Zeitrahmens

Diese einzelnen API-Tests sind die wichtigsten Tests, die Sie erstellen können, da sie in allen nachfolgenden Testtechniken eingesetzt werden. Warum Testfälle neu erstellen, wenn Sie diese einzelnen API-Aufrufe in all den verschiedenen zukünftigen Testtypen einfach referenzieren können? Dies fördert nicht nur die Konsistenz, sondern vereinfacht auch den Prozess der Annäherung an API-Tests.

Szenariotests

Szenariotests sind in der Regel das, woran die meisten Menschen denken, wenn sie an API-Tests denken. Bei dieser Testtechnik setzen Sie die einzelnen Komponententests zu einer Sequenz zusammen, ähnlich dem Beispiel, das ich oben für den Amazon-Dienst beschrieben habe.

Es gibt zwei großartige Techniken, um die Sequenz zu erhalten:

  1. Überprüfen Sie die User Story, um die einzelnen API-Aufrufe zu identifizieren, die ausgeführt werden.
  2. Üben Sie die Benutzeroberfläche aus und erfassen Sie den Datenverkehr zu den zugrunde liegenden APIs.

Mithilfe von Szenariotests können Sie nachvollziehen, ob durch die Kombination verschiedener Datenpunkte Fehler entstehen könnten.

Bei der Arbeit mit einem Kunden bin ich auf ein sehr interessantes Beispiel dafür gestoßen. Sie nutzten eine Reihe von Diensten, um das Finanzprofil eines Kunden, verfügbare Konten, Kreditkarten und aktuelle Transaktionen abzurufen. Jeder dieser API-Aufrufe funktionierte einzeln, Aber wenn Sie sie in einer Reihenfolge zusammensetzen, beginnen sie zu scheitern. Der Grund dafür war ein einfacher Zeitstempel, der bei Rückgabe von einem API-Aufruf ein anderes Format hatte als das, das in einer nachfolgenden Anforderung erwartet wurde. Sie haben dies nicht verstanden, als sie Unit-Tests oder Rauchtests durchführten, weil sie behauptet hatten, dass ein Zeitstempel ohne Angabe des Formats zurückgegeben wurde. Erst beim Testen des Gesamtszenarios wurde klar, dass das Übertragen des Zeitstempels von einem Anruf auf einen anderen den Ausfall verursachte.

Ein weiterer Vorteil von Szenariotests ist die Möglichkeit, das erwartete Verhalten zu überprüfen, wenn Ihre APIs auf eine Weise verwendet werden, die Sie nicht erwartet haben. Wenn Sie eine API veröffentlichen, stellen Sie der Welt eine Reihe von Bausteinen zur Verfügung. Möglicherweise haben Sie Techniken zum Kombinieren dieser Blöcke vorgeschrieben, aber Kunden können unvorhersehbare Wünsche haben und APIs unerwartet miteinander kombinieren, um einen Fehler in Ihrer Anwendung aufzudecken. Um dies zu verhindern, möchten Sie viele Szenariotests mit verschiedenen API-Kombinationen erstellen, um Ihre Anwendung vor einem kritischen Ausfall zu schützen.

Da die Komponententests das Rückgrat der Szenariotests bilden, verfügt eine Organisation normalerweise über eine größere Anzahl von Szenariotests. Sie werden erstellt, wenn eine neue Funktionalität eingeführt wird, um die Reise des Kunden für die neue Funktion zu modellieren. Auf diese Weise können Sie den Zeitaufwand für das Testen erheblich reduzieren, da Sie nur Tests für die neue Funktionalität erstellen müssen und wissen, dass Sie über eine zuverlässige Bibliothek zugrunde liegender Tests verfügen, um unerwartete Ereignisse abzufangen.

Leistungstests

Leistungstests werden normalerweise in einer leistungsspezifischen Testumgebung an das Ende des Testprozesses verwiesen. Dies liegt daran, dass Leistungstestlösungen in der Regel teuer sind, spezielle Fähigkeiten erfordern und spezifische Hardware und Umgebungen erfordern. Dies ist ein großes Problem, da APIs Service Level Agreements (SLAs) haben, die erfüllt sein müssen, um eine Anwendung freizugeben. Wenn Sie bis zum letzten Moment warten, um Ihre Leistungstests durchzuführen, können Fehler bei der Einhaltung der SLAs zu großen Verzögerungen bei der Veröffentlichung führen.

Wenn Sie früher im Prozess Leistungstests durchführen, können Sie leistungsbezogene Probleme erkennen, bevor Sie Ihren vollständigen Regressionszyklus ausführen. Wenn Sie den Testprozess bis zu diesem Punkt verfolgt haben, wird dies tatsächlich ziemlich einfach sein, da Sie über alle zugrunde liegenden Testfälle verfügen, die Sie für Leistungstests benötigen. Sie können einfach Ihre Szenariotests durchführen und sie in Ihre laden Leistungstest-Toolund führen Sie sie mit einer höheren Anzahl von Benutzern aus. Wenn diese Tests fehlschlagen, können Sie den Fehler auf die einzelne User Story zurückführen und ein besseres Verständnis dafür haben, was betroffen sein wird. Manager können dieses Verständnis dann nutzen, um eine Entscheidung über die Freigabe der Anwendung zu treffen.

Sicherheitstests

Sicherheitstests sind für alle Beteiligten in Ihrem Unternehmen wichtig. Wenn eine Sicherheitslücke aufgedeckt und ausgenutzt wird, kann dies zu erheblichen Reputationsverlusten und finanziellen Sanktionen führen. Ähnlich wie ein Benutzer Ihre APIs versehentlich auf eine Weise verwenden kann, die Sie nicht erwarten würden, kann ein Benutzer auch absichtlich versuchen, Ihre APIs auszunutzen. Ein Hacker kann auf Ihre API zugreifen, Schwachstellen entdecken und diese ausnutzen.

Um sich vor dieser Art von Verhalten zu schützen, müssen Sie Testfälle erstellen, die versuchen, diese Art von böswilligen Angriffen durchzuführen. Dazu können Sie Ihre vorhandenen Testfälle nutzen, da ein Szenariotest den Angriffsvektor in die Anwendung liefern kann. Sie können diesen Angriffsvektor dann wiederverwenden, um Ihre Penetrationsangriffe zu starten. Ein gutes Beispiel hierfür ist die Kombination verschiedener Arten von Parameter-Fuzzing oder SQL-Injection-Angriffen mit Ihren Szenariotests. Auf diese Weise werden alle Änderungen, die sich durch die Anwendung ausbreiten, von Ihren Sicherheitstests erfasst. Besuchen Sie unsere Lösungsseite, um mehr darüber zu erfahren Best Practices für die API-Sicherheit.

Omnichannel-Tests

Aufgrund der zahlreichen Schnittstellen, mit denen Anwendungen interagieren (Mobilgeräte, Web, APIs, Datenbanken usw.), treten Lücken in der Testabdeckung auf, wenn Sie eine dieser Schnittstellen isoliert testen, wobei die Feinheiten der komplexen Interaktionen zwischen diesen Schnittstellen fehlen.

Omnichannel-Tests decken umfassend die vielen Schnittstellen der Anwendung ab, um eine umfassende Testabdeckung zu gewährleisten, indem API- und Datenbanktests in die Validierung von Mobile und Web-UI-Interaktionen. Dies bedeutet, dass Sie einen Test durchführen, der eine der Schnittstellen ausübt, und ihn mit einer anderen koordinieren – Ihre UI-Tests wie Web (Selenium) oder Mobile (Appium) ausführen und sie mit Ihren API- oder Datenbanktests verflechten, Datenpunkte aus dem System durch die Testdurchführung. Mit effektiven Omnichannel-Tests können Sie stabile, wiederverwendbare Testfälle erstellen, die sich leicht automatisieren lassen.

Bewältigung des Wandels

Änderungen sind einer der wichtigsten Risikoindikatoren für Ihre Anwendung. Änderungen können in vielen Formen auftreten, einschließlich:

  • Änderung des Protokollnachrichtenformats für einen Dienst
  • Elemente, die einer API hinzugefügt oder daraus entfernt wurden
  • Die zugrunde liegende Codeänderung wirkt sich auf das zurückgegebene Datenformat aus
  • Neuarchitektur eines Dienstes, um ihn in mehrere Teile zu zerlegen (äußerst häufig, wenn Unternehmen auf Microservices umsteigen)

Bei Änderungen müssen Testfälle erstellt werden, um die Änderung zu identifizieren und Korrekturpläne bereitzustellen. Verwenden einer Lösung, die bietet Analysen, um die Auswirkungen dieser Änderungen zu adressieren Auf diese Weise können Sie nachvollziehen, welche Änderungen aufgetreten sind, und auf die spezifischen Tests abzielen, die betroffen sind.

Änderungen können dann in Form einer Vorlage erfasst werden, um alle zugrunde liegenden Komponenten- oder Szenariotests mit neuen Funktionen zu aktualisieren. Da sich der Rest Ihrer Tests auf diese Tests bezieht, werden die Auswirkungen von Änderungen verringert.

Zusammenfassung

Der Aufbau einer soliden automatisierten API-Teststrategie ist der beste Weg, um sicherzustellen, dass Ihre Anwendungen „heute genauso funktionieren wie gestern“ (das ist mehr als nur ein einprägsamer Satz). Mit API-Tests können Sie ein solides Framework zum Identifizieren von Fehlern auf mehreren Ebenen Ihrer Anwendung erstellen. Diese Tests können alle automatisiert und ausgeführt werden ständigSo können Sie sicherstellen, dass Ihre Anwendung den Geschäftserwartungen entspricht und gleichzeitig funktional präzise ist. Da API-Tests auf einer viel niedrigeren Ebene als UI-Tests funktionieren, wissen Sie, dass Sie konsistent sind und die von Ihnen erstellten Tests noch lange dauern werden.

API-Tests: Herausforderungen und Best Practices