Eine Application Programming Interface (API) ermöglicht es zwei Systemen, miteinander zu kommunizieren. Im Wesentlichen bietet eine API das Vertragswerk und die Sprache, die die Kommunikation zwischen zwei Systemen regeln.
Beim API-Testing werden diese Schnittstellen geprüft, um sicherzustellen, dass sie den Anforderungen an Funktionalität, Zuverlässigkeit, Performance und Sicherheit genügen. Dies geschieht typischerweise, indem verschiedene Anfragen an die API gesendet und die Antworten ausgewertet werden. API-Testing ist für nahezu alle Entwickler oberste Priorität, wobei über 90 % der Entwickler laut Rapids weltweiter API-Umfrage 2022 angeben, ihre APIs zu testen oder dies zu planen.
API-Endpunkte sind bestimmte Pfade oder URLs, die eine API bereitstellt und über die auf verschiedene Funktionen der Softwareanwendung zugegriffen werden kann. Jeder Endpunkt entspricht einer bestimmten Funktion, wie dem Abrufen von Daten, dem Aktualisieren eines Datensatzes oder der Durchführung einer Berechnung, und ist so gestaltet, dass er bestimmte Arten von Anfragen und Antworten innerhalb der Gesamtstruktur der API verarbeitet.
Das konsequente Testen von API-Endpunkten während des gesamten Entwicklungsprozesses hilft, Probleme frühzeitig zu erkennen und spart langfristig Zeit und Ressourcen.
Also, wie kann API-Testing effizient während des gesamten Lebenszyklus der API-Entwicklung durchgeführt werden? Schauen wir es uns an!
Was sind API-Endpunkte?
Eine API ist eine Sammlung von Regeln und Protokollen für die Entwicklung und Interaktion mit Softwareanwendungen, durch die verschiedene Softwaresysteme miteinander kommunizieren können. Die Dokumentation und Spezifikationen jeder API legen fest, wie Daten ausgetauscht werden können.
APIs können HTTP-Anfragen verwenden, um Daten von einer Webanwendung oder einem Server abzurufen, ähnlich wie eine Webseite dargestellt wird.

Dienste, URLs, genau wie die, die Sie für den Besuch einer Webseite verwenden. Innerhalb einer API ist ein Endpunkt ein bestimmter Ort, der Anfragen empfängt und darauf antwortet. Durch die Übertragung und den Empfang von Daten und Befehlen über den Endpunkt ermöglicht er die Kommunikation zwischen verschiedenen Anwendungen und Systemen.
So erhalten Entwickler schnellen Zugriff auf Daten und Funktionen anderer Systeme, ohne alles in neuen Anwendungen von Grund auf neu aufbauen zu müssen.
Beispiel für einen API-Endpunkt
Schauen wir uns an, wie ein API-Endpunkt aussieht. Als Beispiel nehme ich die Cat API und deren Postman-Dokumentation:

In diesem Fall lauten die Endpunkte „images“, „favorites“, „breeds“ usw. Jeder Endpunkt ermöglicht verschiedene Aktionen, die über unterschiedliche HTTP-Request-Methoden ausgeführt werden. Die am häufigsten verwendeten Methoden sind die, die sogenannte CRUD-Aktionen ausführen: POST zum Erstellen, GET zum Lesen, PUT zum Aktualisieren und DELETE zum Löschen.
Die API-Dokumentation sollte Details zu den verfügbaren Endpunkten, der für den Endpunkt erlaubten Request-Methode und zu Modellen der Anfrage sowie der Antwort liefern. Mit diesen Informationen sollten wir in der Lage sein, das Testen der Endpunkte zu beginnen. Darauf gehen wir in einem der nächsten Abschnitte ein.
Warum sollten API-Endpunkte getestet werden?
Jede API ist darauf ausgelegt, bestimmte Funktionen auszuführen, und die Funktionalität der Anwendung hängt von den API-Transaktionen zur Antwortermittlung ab. Eine grundlegende Transaktion kann dabei viele interne API-Aufrufe ausführen; wenn einer dieser API-Aufrufe fehlschlägt, könnte das gesamte System ausfallen und nicht mehr funktionieren. Darüber hinaus können mehrere Anwendungen dieselbe API nutzen – wenn eine API nicht ordnungsgemäß arbeitet, kann dies eine Vielzahl von Anwendungen betreffen. Das Testen von API-Endpunkten hilft, Probleme zu verhindern, bevor der Kunde sie bemerkt.
Wie testet man API-Endpunkte?
API-Testing kann sowohl manuell als auch automatisiert erfolgen. Beide Testarten lassen sich mit API-Testing-Tools durchführen.
Im Gegensatz zu UI-Tests sind API-Tests nicht von einem Browser abhängig. Allerdings kann ein API-Testing-Tool, das als Client fungiert, genutzt werden.
Anhand der Dokumentation können wir den Endpunkt extrahieren, an den die HTTP-Anfrage gesendet wird, die HTTP-Methode, die Query-Parameter, den Request-Body (falls erforderlich), die möglichen HTTP-Antwort-Statuscodes und den HTTP-Response-Body. Mit diesen Informationen lassen sich die notwendigen API-Testfälle identifizieren.
Je nach Anforderungen lässt sich entscheiden, welche Tests ausgeführt werden müssen – von funktionalen Tests bis hin zu nicht-funktionalen wie Performance-, Last- oder Sicherheitstests.
Der grundlegendste API-Test besteht darin, die Anfrage zu senden und die Antwort zu validieren. Abhängig vom Anfrage-Typ und dem jeweiligen Endpunkt benötigen wir eventuell weitere Informationen, um die Anfrage zu senden. Hier eine Liste dessen, was wir zum Senden einer Anfrage benötigen:
- Endpoint/URL: Dies ist die Adresse, an die die Anfrage gesendet wird
- Der Anfragetext (Request Body): Bei Anfragemethoden wie POST und PUT ist ein Body erforderlich, der die an den Server zu übermittelnden Daten enthält
- Abfrageparameter (Query Parameters): Zusätzliche Suchparameter können verwendet werden, um die im Antwortobjekt zurückgegebenen Ergebnisse einzuschränken
- Header: Dies sind Metadaten, die mit der Anfrage gesendet werden können. Im vorherigen Katzenbeispiel kann ein API-Schlüssel als Header verwendet werden, der den Abruf von mehr Informationen als ohne Schlüssel ermöglicht:

Nachdem die Anfrage erfolgreich gesendet wurde, sollte der Test die Antwort überprüfen. Zu beachtende Punkte bei der Antwort sind:
- Der HTTP-Statuscode: Jede Antwort hat einen Statuscode. Diese können in 5 Hauptklassen unterteilt werden: Codes, die mit 1 beginnen (100-199), stellen eine Information dar, Codes, die mit 2 beginnen (200-299), stehen für eine erfolgreiche Nachricht, Codes zwischen 300 und 399 sind Weiterleitungen, Codes im Bereich 400-499 sind Client-Fehler und Codes in den 500ern sind Server-Fehler.
- Der HTTP-Antworttext (Response Body): Die Informationen, die vom Server zurückkommen. Die Dokumentation sollte angeben, welche Informationen die Antwort enthalten soll, zum Beispiel:

- Antwort-Header: Metadaten, die vom Server zurückgeliefert werden
- Antwortzeit: Falls wir auch an der Performance der API interessiert sind.
Für ein schnelles Beispiel verwende ich Postman, um zu zeigen, wie eine GET-Anfrage mit der Cat API aussieht. Ich sende eine GET-Anfrage an den Images-Endpunkt. Dazu reicht es, die Endpunkt-Adresse, die GET-Methode und die Anfrage zu senden:

Nach dem Senden der Anfrage können wir den HTTP-Statuscode, den Body und die benötigte Zeit bis zum Erhalt einer Antwort sehen:

Der Inhalt des Antwort-Bodys ist das, was eine API mit dem übergebenen Input zurückliefert, während der Statuscode den aktuellen Stand der Anfrage anzeigt.
Es gibt Unterschiede bei den Datentypen und der Größe einer API-Antwort. Der Response-Body kann reiner Text, ein XML-Dokument, eine JSON-Datenstruktur oder andere Formate enthalten. Eine hundertseitige JSON/XML-Datei oder nur eine einfache Zeichenkette aus wenigen Wörtern, sogar leer, ist möglich. Daher ist es entscheidend, eine geeignete Verifikationsmethode für eine bestimmte API auszuwählen.
Testfälle für eine API erstellen
Die funktionalen Testfälle können mithilfe von Black-Box-Testing-Techniken abgeleitet werden. Die Dokumentation gibt an, welche Datentypen jeder Parameter akzeptiert – auf Basis dessen können Äquivalenzklassen und Grenzen bestimmt werden.
Anschließend lassen sich komplexere Szenarien konstruieren, indem mehrere Anfragen zu einem Testfall kombiniert werden. Beispielsweise sendet ein Test, der eine Ressource erstellt, sie aktualisiert, liest und löscht, vier verschiedene Anfragen.
Für das API-Testing sind sowohl positive als auch negative Tests notwendig, um zu überprüfen, ob die API wie gefordert funktioniert. Da API-Testing eine Unterform des Black-Box-Tests ist, spielen Ein- und Ausgabedaten bei beiden Testarten eine entscheidende Rolle. Einige Ideen zur Erstellung von Testszenarien sind folgende:
Positive Szenarien:
- Überprüfen, ob die API die Eingabe akzeptiert und das gewünschte Ergebnis laut Anforderung liefert.
- Überprüfen, ob der Antwort-Statuscode – egal ob Fehlercode oder 2xx – wie in der Anforderung angegeben zurückgegeben wird.
- Angabe der minimalen und maximalen Anzahl einzugebender Felder.
Negative Szenarien:
- Sicherstellen, dass die API in Fällen ohne erwartete Ausgabe eine geeignete Antwort liefert.
- Durchführen eines Tests zur Eingabevalidierung.
- Überprüfen des Verhaltens der API auf verschiedenen Berechtigungsebenen.
Nicht-funktionale API-Tests
Neben funktionalen Tests können wir verschiedene nicht-funktionale Tests für APIs durchführen. Im Folgenden sind einige der wichtigsten aufgeführt:
Leistungstests
Leistungstests beziehen sich auf das Messen der Performance einer Software unter verschiedenen Arbeitslasten, Szenarien und Bedingungen. Sie können helfen, Ressourcenengpässe zu identifizieren, Stabilität und Skalierbarkeit zu gewährleisten sowie die Kapazitätsgrenzen Ihrer Anwendung auszuloten. Untertypen von Leistungstests sind Lasttests, Stresstests, Ausdauertests und Spike-Tests. Die gebräuchlichste Form der Leistungstests ist der Lasttest, bei dem durchschnittlicher oder hoher Nutzerverkehr auf Ihre Software simuliert wird. Dies hilft Ihnen, Durchsatz, Antwortzeiten und Ressourcennutzung zu bewerten. Apache JMeter ist ein Open-Source-Java-Tool, das verschiedene Anfragen an Ihre API senden und deren Resultate messen kann – eines der besten Tools für Lasttests Ihrer API.
Sicherheitstests
Der Prozess, mit dem bestätigt wird, dass Ihre Software vor böswilligen Angriffen, unbefugtem Zugriff und Datenlecks geschützt ist, wird als Sicherheitstest bezeichnet. Sicherheitstests können helfen, die Vertraulichkeit, Integrität und Verfügbarkeit der Daten in Ihrer Anwendung sicherzustellen. Sicherheitstests können auf verschiedenen Ebenen durchgeführt werden, darunter Datenbank-, Anwendungs- und Netzwerkebene. Code Reviews, Penetrationstests, Schwachstellenanalysen und ethisches Hacken gehören zu den gängigen Methoden für Sicherheitstests. Postman ist ein beliebtes plattformübergreifendes Tool, mit dem Sie Anfragen an Ihre API senden und empfangen und Sicherheitsfeatures wie Authentifizierung, Autorisierung, Verschlüsselung und Fehlerbehandlung testen können. Es zählt zu den besten Tools für Sicherheitstests Ihrer API.
Zuverlässigkeitstests
Zuverlässigkeitstests sind der Prozess, mit dem ermittelt wird, wie verlässlich und beständig Ihre Software über die Zeit und in unterschiedlichen Situationen funktioniert. Sie helfen, Wiederherstellbarkeit, Fehlertoleranz und Verfügbarkeit Ihrer Software zu gewährleisten. Solche Tests können durchgeführt werden, indem Fehler, Bugs oder Ausfälle absichtlich in die Software eingeführt werden, um zu beobachten, wie sie darauf reagiert und sich erholt. Wichtige Kennzahlen im Bereich der Zuverlässigkeitstests sind Mean Time Between Failures (MTBF), Mean Time To Failure (MTTF), Mean Time To Repair (MTTR) und die Ausfallrate. Chaos Monkey, ein Tool, das zufällig Instanzen in Ihrer Cloud-Umgebung beendet, um zu testen, wie Ihre Software auf Störungen reagiert, gilt als eines der besten Werkzeuge für Zuverlässigkeitstests Ihrer API.
Fazit
API-Tests sind eine immer wichtigere Fähigkeit für QA-Fachleute. Es ist entscheidend, API-Endpunkte gründlich zu testen, um sicherzustellen, dass sie wie vorgesehen funktionieren und die erforderlichen Standards erfüllen. Das Testen von API-Endpunkten hilft, potenzielle Probleme oder Fehler zu identifizieren und zu beheben und validiert zudem die Gesamtfunktionalität der Anwendung.
Um API-Endpunkte effektiv zu testen, sollten Best Practices wie die Entwicklung umfassender Testfälle, das Berücksichtigen verschiedener Eingaben und Ausgaben sowie die Nutzung von Automatisierungstools für effiziente und zuverlässige Tests befolgt werden. Darüber hinaus kann der Einsatz von Testumgebungen, die reale Szenarien möglichst genau simulieren, die Genauigkeit des Testens von API-Endpunkten weiter verbessern.
Umfassendes und effektives Testen von API-Endpunkten ist essenziell, um die Zuverlässigkeit, Leistung und Funktionalität moderner Anwendungen sicherzustellen. Indem Entwickler verstehen, was API-Endpunkte sind und wie sie getestet werden, können sie eine erfolgreiche Integration ihrer Anwendungen mit anderen Systemen gewährleisten und gleichzeitig ein hervorragendes Nutzererlebnis bieten.
Bitte abonnieren Sie den QA Lead Newsletter, um aktuelle Informationen zu neuen Testinhalten zu erhalten.
