Definition

API-Test

API-Tests sind eine Art von Softwaretests, bei denen eine Programmierschnittstelle (Application Program Interface, API) analysiert wird, um zu überprüfen, ob sie die erwartete Funktionalität, Sicherheit, Leistung und Zuverlässigkeit erfüllt. Die Tests werden entweder direkt an der API oder als Teil von Integrationstests durchgeführt. Eine API ist Middleware-Code, der es zwei Softwareprogrammen ermöglicht, miteinander zu kommunizieren. Der Code legt auch fest, wie eine Applikation Dienste vom Betriebssystem (OS) oder anderen Applikationen anfordert.

Applikationen bestehen häufig aus drei Schichten: einer Datenschicht, einer Serviceschicht – der API-Schicht – und einer Präsentationsschicht – der Benutzeroberfläche (User Interface, UI). Die Geschäftslogik der Anwendung – die Anleitung, wie Benutzer mit den Diensten, Funktionen und Daten innerhalb der App interagieren können – befindet sich in der API-Schicht. API-Tests konzentrieren sich auf die Analyse der Geschäftslogik sowie auf die Sicherheit der Anwendung und der Datenreaktionen. Ein API-Test wird im Allgemeinen durchgeführt, indem Anfragen an einen oder mehrere API-Endpunkte gestellt werden und die Reaktionen mit den erwarteten Ergebnissen verglichen wird.

API-Tests werden häufig automatisiert und von DevOps-, Qualitätssicherungs- (QS) und Entwicklungsteams für kontinuierliche Testverfahren verwendet.

Wie man API-Tests angeht

Ein API-Testprozess sollte mit einem klar definierten Umfang des Programms sowie mit einem vollständigen Verständnis der Funktionsweise der API beginnen. Einige Fragen, die die Tester berücksichtigen sollten, sind:

  • Welche Endpunkte sind zum Testen verfügbar?
  • Welche Antwortcodes werden für erfolgreiche Anfragen erwartet?
  • Welche Antwortcodes werden für erfolglose Anfragen erwartet?
  • Welche Fehlermeldung wird im Body einer erfolglosen Anfrage erwartet?

Sobald Faktoren wie diese verstanden sind, können die Tester mit der Anwendung verschiedener Testtechniken beginnen. Testfälle sollten auch für die API geschrieben werden. Diese Testfälle definieren die Bedingungen oder Variablen, unter denen die Tester feststellen können, ob ein bestimmtes System korrekt arbeitet und angemessen reagiert. Sobald die Testfälle spezifiziert sind, können die Tester sie durchführen und die erwarteten Ergebnisse mit den tatsächlichen Ergebnissen vergleichen. Der Test sollte Antworten analysieren, die Folgendes umfassen:

  • Antwortzeit,
  • Datenqualität,
  • Bestätigung der Autorisierung,
  • HTTP-Statuscode und
  • Fehlercodes.

API-Tests können mehrere Endpunkte analysieren, zum Beispiel Webdienste, Datenbanken oder Webbenutzeroberflächen. Die Tester sollten auf Ausfälle oder unerwartete Eingaben achten. Die Antwortzeit sollte innerhalb eines akzeptablen, vereinbarten Limits liegen, und die API sollte gegen potenzielle Angriffe gesichert sein.

Die Tests sollten auch so aufgebaut sein, dass sichergestellt ist, dass

  • Benutzer die Anwendung nicht auf unerwartete Weise beeinflussen können;
  • die API die erwartete Benutzerlast bewältigen kann;
  • die API über mehrere Browser und Geräte hinweg funktioniert.

Der Test sollte auch die Ergebnisse der nicht-funktionalen Tests analysieren, einschließlich Leistung und Sicherheit.

API-Strategie
Abbildung 1: Bei der Entwicklung neuer Anwendungen muss auch geklärt sein, wer an einer API-Strategie beteiligt ist.

Arten von API-Tests

Es gibt verschiedene Arten von API-Tests, die sicherstellen, dass die Programmierschnittstelle der Anwendung ordnungsgemäß funktioniert. Sie reichen von allgemeinen bis hin zu spezifischen Analysen der Software. Hier sind Beispiele für einige dieser Tests.

Validierungstests umfassen ein paar einfache Fragen, die das gesamte Projekt betreffen. Die erste Gruppe von Fragen betrifft das Produkt: Wurde das richtige Produkt erstellt? Ist die entwickelte API das richtige Produkt für das Problem, das sie zu lösen versucht? Gab es während der gesamten Entwicklung irgendwelche größeren Code-Aufblähungen – zum Beispiel die Produktion von Code, der unnötig lang, langsam und ressourcenintensiv ist – die die API in eine nicht nachhaltige Richtung treiben würden?

Die zweite Gruppe von Fragen konzentriert sich auf das Verhalten der API: Wird auf die richtigen Daten auf die vordefinierte Weise zugegriffen? Wird auf zu viele Daten zugegriffen? Speichert die API die Daten korrekt unter Berücksichtigung der spezifischen Integritäts- und Vertraulichkeitsanforderungen des Datensatzes?

Der dritte Fragenkomplex befasst sich mit der Effizienz der API: Ist diese API die effizienteste und genaueste Methode, um eine Aufgabe auszuführen? Kann eine Codebasis geändert oder ganz entfernt werden, um Beeinträchtigungen zu reduzieren und den Service insgesamt zu verbessern?

Funktionstests stellen sicher, dass die API genau so funktioniert, wie sie soll. Dieser Test analysiert spezifische Funktionen innerhalb der Codebasis, um sicherzustellen, dass die API innerhalb der erwarteten Parameter funktioniert und mit Fehlern umgehen kann, wenn die Ergebnisse außerhalb der vorgesehenen Parameter liegen.

Lasttests werden verwendet, um zu sehen, wie viele Aufrufe eine API verarbeiten kann. Dieser Test wird oft nach der Fertigstellung einer bestimmten Unit oder der gesamten Codebasis durchgeführt, um festzustellen, ob die theoretische Lösung auch unter einer gegebenen Last in der Praxis funktioniert.

Zuverlässigkeitstests stellen sicher, dass die API konsistente Ergebnisse liefert und die Verbindung zwischen den Plattformen konstant ist.

Sicherheitstests werden oft zusammen mit Penetrationstests und Fuzz-Tests in den größeren Prozess der Sicherheitsüberprüfung eingegliedert. Sicherheitstests beinhalten Aspekte sowohl von Penetrations- als auch von Fuzz-Tests, versuchen aber auch, die von der API verwendeten Verschlüsselungsmethoden sowie das Design der Zugriffskontrolle zu validieren. Sicherheitstests beinhalten die Validierung von Autorisierungsprüfungen für den Ressourcenzugriff und die Verwaltung von Benutzerrechten.

Der Penetrationstest baut auf dem Sicherheitstest auf. Bei diesem Test wird die API von einer Person mit begrenztem Wissen über die API angegriffen. Dies ermöglicht den Testern, den Angriffsvektor aus einer Außenperspektive zu analysieren. Die bei Penetrationstests verwendeten Angriffe können sich auf bestimmte Elemente der API beschränken oder auf die API als Ganzes abzielen.

Beim Fuzz-Test werden große Mengen an Zufallsdaten – auch Rauschen oder Fuzz genannt – in das System eingegeben, um ein negatives Verhalten zu erzeugen, zum Beispiel einen erzwungenen Absturz.

Arten von APIs
Abbildung 2: Diese drei Arten von APIs existieren.

Warum sind API-Tests wichtig?

Tests der Benutzeroberfläche sind häufig ineffizient für die Validierung der Funktionalität von API-Diensten und decken nicht alle notwendigen Aspekte der Backend-Tests ab. Dies kann zu Fehlern führen, die in den Server- oder Unit-Ebenen verbleiben – ein kostspieliger Fehler, der die Produktfreigabe stark verzögern kann und oft das Neuschreiben großer Mengen an Code erfordert.

API-Tests ermöglichen es den Entwicklern, schon früh im Entwicklungszyklus mit dem Testen zu beginnen, bevor die Benutzeroberfläche fertig ist. Jede Anfrage, die auf der Server-Schicht nicht den entsprechenden Wert erzeugt, wird auf der UI-Schicht nicht angezeigt. Dies ermöglicht es den Entwicklern, mindestens die Hälfte der vorhandenen Bugs zu beseitigen, bevor sie zu ernsteren Problemen werden. Außerdem ermöglicht es Testern, Anfragen zu stellen, die über die Benutzeroberfläche nicht möglich sind – eine Notwendigkeit für die Aufdeckung von Sicherheitslücken.

Viele Unternehmen setzen Microservices für ihre Softwareanwendungen ein, weil sich damit Software effizienter bereitstellen lässt. Wenn ein Bereich der App aktualisiert wird, können die anderen Bereiche ohne Unterbrechung weiterarbeiten. Jeder Anwendungsbereich hat einen separaten Datenspeicher und unterschiedliche Befehle für die Interaktion mit diesem Datenspeicher. Die meisten Microservices verwenden APIs; daher werden API-Tests in dem Maße, in dem mehr Unternehmen die Verwendung von Microservices übernehmen, notwendig, um sicherzustellen, dass alle Teile korrekt funktionieren.

API-Tests sind auch integraler Bestandteil der agilen Softwareentwicklung, in der sofortiges Feedback für den Prozessablauf erforderlich ist. In agilen Umgebungen werden Unit-Tests und API-Tests gegenüber GUI-Tests bevorzugt, da sie einfach zu pflegen und effizienter sind. GUI-Tests müssen oft intensiv überarbeitet werden, wenn sie mit den häufigen Änderungen in einer agilen Umgebung Schritt halten wollen.

Insgesamt kann die Einbindung von API-Tests in den testgetriebenen Entwicklungsprozess über den gesamten Entwicklungslebenszyklus hinweg Vorteile bringen. Diese Vorteile werden dann an die Kunden in Form von verbesserten Dienstleistungen und qualitativ hochwertigeren Produkten weitergegeben.

Vor- und Nachteile von API-Tests

API-Tests garantieren, dass die Verbindungen zwischen den Plattformen zuverlässig, sicher und skalierbar sind. Zu den spezifischen Vorteilen gehören:

  • Die Automatisierung von API-Tests erfordert weniger Code als automatisierte GUI-Tests, was zu schnelleren Tests und geringeren Gesamtkosten führt.
  • API-Tests ermöglichen Entwicklern den Zugriff auf die App ohne eine Benutzeroberfläche, was dem Tester hilft, Fehler früher im Entwicklungszyklus zu identifizieren, anstatt zu warten, bis sie zu größeren Problemen werden. Dies spart Geld, da Fehler effizienter behoben werden können, wenn man sie frühzeitig erkennt.
  • API-Tests sind technologie- und sprachunabhängig. Der Datenaustausch erfolgt über JSON oder XML und enthält HTTP-Anfragen und -Antworten.
  • API-Tests verwenden extreme Bedingungen und Eingaben bei der Analyse von Anwendungen. Dadurch werden Schwachstellen beseitigt und die App vor bösartigem Code und Fehlfunktionen geschützt.
  • API-Tests können mit GUI-Tests integriert werden. Durch die Integration kann man zum Beispiel neue Benutzer innerhalb der App anlegen, bevor ein GUI-Test durchgeführt wird.

API-Tests bringen allerdings auch Nachteile mit sich. Die häufigsten Einschränkungen bei API-Tests sind Parameterauswahl, Parameterkombination und Aufrufreihenfolge. Bei der Parameterauswahl müssen die durch API-Anfragen gesendeten Parameter validiert werden – ein Prozess, der schwierig sein kann. Es ist jedoch notwendig, dass die Tester garantieren, dass alle Parameterdaten die Validierungskriterien erfüllen, wie zum Beispiel die Verwendung geeigneter String- oder numerischer Daten, einen zugewiesenen Wertebereich und die Einhaltung von Längenbeschränkungen.

Die Kombination von Parametern kann ebenfalls eine Herausforderung sein, da jede Kombination getestet werden muss, um festzustellen, ob sie Probleme in Bezug auf bestimmte Konfigurationen birgt. Die Aufrufreihenfolge ist gleichfalls eine Herausforderung, da jeder Aufruf in einer bestimmten Reihenfolge erfolgen muss, um sicherzustellen, dass das System korrekt funktioniert. Dies wird schnell zu einem Problem, besonders wenn es sich um Multithreading-Anwendungen handelt.

API-Test-Tools

Bei der Durchführung eines API-Tests können Entwickler entweder ihr eigenes Framework schreiben oder aus einer Vielzahl von gebrauchsfertigen API-Test-Tools wählen. Das Entwerfen eines API-Test-Frameworks ermöglicht es Entwicklern, den Test individuell anzupassen; sie sind nicht auf die Fähigkeiten eines bestimmten Tools und seiner Plug-ins beschränkt. Tester können die Bibliothek hinzufügen, die sie für ihre gewählte Kodierungsplattform für angemessen halten, einzigartige und bequeme Berichtsstandards erstellen und komplizierte Logik in die Tests einbauen. Allerdings benötigen Tester ausgefeilte Kodierkenntnisse, wenn sie sich dafür entscheiden, ihr eigenes Framework zu entwerfen.

Umgekehrt bieten API-Test-Tools benutzerfreundliche Oberflächen mit minimalen Kodierungsanforderungen, die es auch weniger erfahrenen Entwicklern ermöglichen, die Tests zu implementieren. Leider sind die Tools oft darauf ausgelegt, allgemeine API-Probleme zu analysieren, und Probleme, die spezifischer auf die API des Testers zugeschnitten sind, können unbemerkt bleiben.

Es gibt eine große Auswahl an API-Test-Tools, die von kostenpflichtigen Abonnement-Tools bis hin zu Open-Source-Angeboten reichen. Einige spezifische Beispiele sind:

  • SoapUI. Das Tool konzentriert sich auf das Testen der API-Funktionalität in SOAP- und REST-APIs und Webservices.
  • Apache JMeter. Ein Open Source Tool für Last- und Funktionstests von APIs.
  • Apigee. Ein Cloud-API-Testing-Tool von Google, das sich auf API-Leistungstests konzentriert.
  • REST Assured. Eine quelloffene, Java-spezifische Sprache, die das Testen von REST-APIs erleichtert und vereinfacht.
  • Swagger UI. Ein Open Source Tool, das eine Webseite erstellt, die verwendete APIs dokumentiert.
  • Postman. Eine Google-Chrome-App, die zur Überprüfung und Automatisierung von API-Tests verwendet wird.
  • Katalon. Eine Open-Source-Anwendung, die bei automatisierten UI-Tests hilft.

Beispiele für API-Tests

Hier sind zwei Beispiele für Tests, die durchgeführt werden können, um zu garantieren, dass die API die richtigen Ergebnisse liefert.

Wenn ein Benutzer eine Social-Media-App öffnet, zum Beispiel Twitter oder Instagram, wird er aufgefordert, sich anzumelden. Dies kann unabhängig erfolgen – über die App selbst – oder über Google oder Facebook. Dies impliziert, dass die Social-Media-App eine bestehende Vereinbarung mit Google und Facebook hat, um auf ein gewisses Maß an Benutzerinformationen zuzugreifen, die diesen beiden Quellen bereits zur Verfügung gestellt wurden. Es muss dann ein API-Test durchgeführt werden, um sicherzustellen, dass die Social-Media-App mit Google und Facebook zusammenarbeiten kann, um die notwendigen Informationen zu ziehen, die dem Benutzer den Zugriff auf die App unter Verwendung von Anmeldeinformationen aus den anderen Quellen erlauben.

Ein weiteres Beispiel sind Reisebuchungssysteme, wie Expedia oder Kayak. Bei der Nutzung eines Reisebuchungssystems erwarten die Nutzer, dass alle Flugoptionen für bestimmte Daten verfügbar sind und ihnen auf Anfrage angezeigt werden. Dazu muss die App mit allen Fluggesellschaften kommunizieren, um die besten Flugoptionen zu finden. Dies geschieht über APIs. Folglich müssen API-Tests durchgeführt werden, um sicherzustellen, dass das Reisebuchungssystem erfolgreich mit den anderen Unternehmen kommuniziert und dem Benutzer die richtigen Ergebnisse in einem angemessenen Zeitrahmen präsentiert. Wenn der Benutzer dann einen Flug bucht und über einen Drittanbieter-Zahlungsdienst wie PayPal bezahlt, müssen API-Tests durchgeführt werden, um sicherzustellen, dass der Zahlungsdienst und das Reisebuchungssystem effektiv kommunizieren, die Zahlung verarbeiten und die sensiblen Daten des Benutzers während des gesamten Prozesses schützen.

Best Practices für API-Tests

Zu den Best Practices für API-Tests gehören:

  • Gruppieren Sie bei der Definition von Testfällen diese nach Kategorien.
  • Fügen Sie die ausgewählten Parameter in den Testfall selbst ein.
  • Entwickeln Sie Testfälle für jede mögliche API-Eingabekombination, um eine vollständige Testabdeckung zu gewährleisten.
  • Wiederverwendung und Wiederholung von Testfällen, um die API während der Produktion zu überwachen.
  • Verwenden Sie sowohl manuelle als auch automatisierte Tests, um bessere und vertrauenswürdigere Ergebnisse zu erzielen.
  • Notieren Sie beim Testen der API, was konsistent passiert und was nicht.
  • API-Lasttests sollten verwendet werden, um die Belastung des Systems zu testen.
  • APIs sollten auf Ausfälle getestet werden. Die Tests sollten so lange wiederholt werden, bis sie eine fehlerhafte Ausgabe produzieren.
  • Die API sollte so getestet werden, dass sie konsistent fehlschlägt, um die Probleme zu identifizieren.
  • Die Aufrufreihenfolge sollte mit einem soliden Plan durchgeführt werden.
  • Das Testen kann durch Priorisierung der API-Funktionsaufrufe erleichtert werden.
  • Verwenden Sie eine gute, leicht verständliche Dokumentation und automatisieren Sie die Dokumentationserstellung.
  • Halten Sie jeden Testfall möglichst in sich geschlossen und von Abhängigkeiten getrennt.
Diese Definition wurde zuletzt im Dezember 2020 aktualisiert

Erfahren Sie mehr über Business-Software