Rest API testen mit Postman: Vorgehensweise und Strategien

Das Testen von Rest APIs ist mit die wichtigste Aufgabe in der Entwicklung von Anwendungen. Dabei kann eine gute Strategie der Vorgehensweise viele Fehler vor Release der Anwendung schon aufdecken.

Zum Testen von Rest APIs gibt es mittlerweile viele Tools im Internet. Die wichtigsten Funktionen haben dabei sicherlich alle Tools. Ich nutze Postman, da mir das Programm einfach am sympathischsten ist und es sehr intuitiv und dabei komplett kostenlos ist. Zusätzlich möchte ich Dir zeigen wie Du gute Testfälle auswählst und was dabei unbedingt zu beachten ist.

Wenn Du mit mehreren Leuten an einer gemeinsamen Rest API arbeitest, bietet Postman ein Abonnement an, um das Arbeiten im Team deutlich zu vereinfachen. Ich beziehe mich hier nur auf die kostenlose Variante.

Postman kannst Du hier herunterladen (verfügbar für Windows, Mac & Linux).

Rest APIs lassen sich gut mit Hilfe von Node.js entwickeln. Wenn Du mehr dazu wissen möchtest, kannst Du gerne meinen Node.js Anfänger Leitfaden durcharbeiten.

Nur zur Wiederholung, was eine Rest API eigentlich ist:
Eine Rest API ist die Schnittstelle zwischen Client und Server, welche über einfache HTTP Anfragen Daten anfordern und versenden können. Jedes Mal wenn Du eine URL im Browser aufrufst passiert im Hintergrund mindestens eine HTTP Anfrage an den Server.

1. Auswahl der optimalen Testfälle

Bevor wir die Requests in Postman eintragen und anfangen zu testen müssen wir im ersten Schritt die Testfälle auswählen. Das erfordert ein wenig Gehirnschmalz und auch ein wenig Übung – ist allerdings extrem wichtig, damit wir alle potenziellen Bugs aufdecken.

Besonders genau müssen wir uns über Randfälle Gedanken machen. Randfälle sind dabei Testeingaben, die am wahrscheinlichsten eine fehlerhafte Ausgabe oder sogar einen Programmfehler auslösen können. Davor müssen wir aber noch zwei Grundbegriffe klären:

1.1. HTTP Request Methoden

Die einzelnen URLs einer Rest API (Routen in der Programmierung) haben alle eine bestimmte HTTP Request Methode. Davon gibt es eine ganze Reihe. Das sind die vier wichtigsten einer Rest API:

  • GET: Zum Abrufen von Informationen vom Server, z.B. Benutzername einer bestimmten ID
  • POST: Zum Senden von Informationen an den Server, welcher dann z.B. einen neuen Benutzer in der Datenbank anlegt
  • PUT: Zum Erstellen oder Aktualisieren einer Entität auf dem Server
  • DELETE: Zum Löschen einer Entität auf dem Server

Eine komplette Auflistung aller HTTP Request Methoden findest Du hier.

Bei der Entwicklung der Rest API solltest Du bereits darauf achten, dass Du für jede Route die richtige Methode auswählst. Wie das aussehen kann, erkläre ich Dir in meinem Tutorial zum Erstellen einer Rest API für ein Login System.

1.2. HTTP Status Codes

Zu jedem HTTP Request antwortet der Server mit einer HTTP Response, welcher immer einen HTTP Status Code beinhaltet. Dieser gibt den Status der angefragten Operation zurück. Meistens ist das 200 (OK). Damit sagt der Server, dass alles in Ordnung ist.

Diese Status Codes solltest Du bei der Entwicklung Deiner Rest API bereits im richtigen Anwendungsfall zurückgeben und damit auch das Testen erleichtern. Ein weiteres Beispiel: Wenn ein Benutzer eine URL anfragt, für die er keine Berechtigungen hat, weil er nicht autorisiert (nicht eingeloggt) ist, sollte Deine Rest API auch den Status Code 401 (Unauthorized) mit entsprechender Fehlermeldung zurückliefern.

Die meist-verwendesten Status Codes sind:

  • 200 (OK) – Beispiel: Anfrage wurde ohne Probleme ausgeführt
  • 201 (Created) – Beispiel: Neuer Benutzer wurde in der Datenbank angelegt
  • 400 (Bad Request) – Beispiel: Fehlende Parameter beim Aufruf
  • 401 (Unauthorized) – Beispiel: Benutzer hat keine Berechtigung für eine URL

Eine ausführliche Liste wichtiger HTTP Status Codes gibt es hier.

1.3. Testfälle zusammenstellen

Nun wird es etwas anstrengender. Du musst für Deine App jetzt die passenden Testfälle auswählen. Wie bereits angesprochen, müssen wir besonders die Randfälle betrachten. Um das besser zu erklären, habe ich beispielhaft folgende Anforderungen erstellt:

  1. Wir wollen eine Funktion erstellen, um einen Benutzer zu registrieren (/sign-up)
  2. Benutzername, Passwort und Passwort Wiederholung sollen abgefragt werden
  3. Der Benutzername darf noch nicht vergeben sein
  4. Der Benutzer soll eine E-Mail zur Vervollständigung der Anmeldung bekommen (Double Opt-In)

Mit ein wenig logischem Nachdenken kommen uns dabei zu erst folgende Testfälle in den Sinn:

  • Wurden alle Parameter (Benutzername, Passwort, Passwort Wiederholung) übergeben?
  • Ist der Benutzername bereits in der Datenbank vorhanden?
  • Wurde die Bestätigungs E-Mail verschickt?

Das ist alles korrekt, allerdings haben wir noch einige vergessen. Und das sind die sogenannten Randfälle:

  • Stimmt die HTTP Request Methode?
  • Stimmen Passwort und Passwort Wiederholung überein?
  • Konnte die Datenbankabfrage ohne Fehler ausgeführt werden?
  • Werden die richtigen HTTP Status Codes in Fehlerfällen zurückgegeben?
  • Ist der Benutzername nicht zu lang für das Datenbankfeld (z.B. wenn VARCHAR auf 255 Zeichen begrenzt ist)?
  • Wurde ein gültiger Token für das Double Opt-In erstellt und erfolgreich in die Datenbank gespeichert?

Ziel ist es, die Anfrage mal aus einem anderen Blickwinkel zu betrachten, um möglichst alle Randfälle abzudecken. Ich hoffe, dass ich Dich mit diesem Beispiel etwas dafür sensibilisieren kann.

Nehm‘ Dir ruhig etwas Zeit um die Testfälle auszuwählen. Das ist wichtiger, als die Tests durchzuführen. Wenn Du das einmal ordentlich gemacht hast, sparst Du Dir zukünftig viel Zeit.

2. Requests in Postman organisieren

Nachdem wir jetzt die Testfälle ausgewählt haben starten wir nun damit, die Tests in Postman einzutragen, zu strukturieren und natürlich zu testen. Wenn Du Postman installiert hast, erwartet Dich diese Oberfläche.

Du solltest Dir für jedes Projekt/jede Rest API eine eigene Collection erstellen. Die ist wie ein Ordner in dem Du deine einzelnen Requests organisieren kannst. Außerdem kannst Du dann mit einem einzigen Klick die Tests für alle darin enthaltenen Requests ausführen.

Postman - Collection erstellen
Postman – Collection erstellen

Pro Collection können wir dann beliebig viele Requests anlegen. Die wichtigsten Einstellungen habe ich mal rot markiert.

Aufbau eines HTTP Requests
Aufbau eines HTTP Requests

Zum einen sollten wir unserem Request einen Namen geben, um ihn schnell wieder zu erkennen („Login“ in diesem Fall). Dieser erscheint auch links im Collection Menü.

Als nächstes können wir für jeden Request die entsprechende HTTP Request Methode einstellen und die genaue URL der zu prüfenden Rest API Route angeben.

Ganz rechts findest Du den „Send“ Button, um eine Anfrage direkt zu senden.

2.1. Body Daten übergeben

In vielen Fällen wollen wir Daten an die Rest API senden. Das können wir entweder über den Reiter „Params“ machen. Diese werden dann entsprechend der HTTP Request Methode an den Server übermittelt oder wir nutzen den „Body“ Tab, um Daten in anderen Datenformaten zu übertragen.

Im Web wird gern auf JSON gesetzt, da es sehr flexibel einsetzbar ist und man sicher komplexe Datenstrukturen übertragen kann. Wichtig ist dabei, dass Du über dem Textfeld „raw“ auswählst und dann rechts daneben das Format „JSON“ auswählst. Sonst werden die Daten eventuell nicht korrekt übertragen.

 Body Parameter in Postman übergeben
Body Parameter in Postman übergeben

In das große Textfeld können nun die Daten im JSON-Format übergeben werden.

Das kann beispielhaft so aussehen. Postman zeigt Dir Fehler in der JSON Struktur direkt an. Genauer kannst Du es aber mit diesem JSON-Validator testen.

{
"username": "webdeasy.de",
"password": "f00b4r",
"password_repeat": "foob4r"
}

Ob Du URL-Parameter oder Body Daten verwendet hängt ganz von der Umsetzung deiner RestAPI ab. So greifst Du jeweils in Node.js darauf zu:

router.post('/sign-up', (req, res, next) => {
	// body data
	console.log(req.body.YOURDATA);
	
	// url parameters
	console.log(req.params.YOURPARAM)
});

2.2. Authorization Keys einfügen

Falls Du einen Login mit Bearer Token umgesetzt hast, kannst Du diesen im Reiter „Authorization“ übergeben. Wähle dazu „Bearer Token“ aus und gebe ihn rechts unter „Token“ ein.

Authorization - Bearer Token übermitteln
Authorization – Bearer Token übermitteln

Bei anderen Authentifizierungsmethoden kannst Du die passende unter „Type“ auswählen.

Tipp: Unter dem Menüpunkt „History“ findest Du Deine letzten Abfragen.

3. Testfälle in Postman programmieren

Die einzelnen Routen haben wir eingetragen und sauber strukturiert. Du kannst sie jetzt schon über den „Send“ Button ausführen und testen. Dabei musst Du aber immer nach allen Ergebnissen manuell schauen. Einfacher ist es, wenn ein Skript die Aufgabe für uns übernimmt. Das können wir unter dem Reiter „Tests“ machen.

Testfälle mit Postman erstellen
Testfälle mit Postman erstellen

Hier hast Du die Möglichkeit Deine Testfälle zu programmieren, das ist auch einfacher als es im ersten Moment klingt.

Das Abfragen des korrekten Status Codes können wir über folgenden Code realisieren:

pm.test("Status test", function () {
    pm.response.to.have.status(200);
});

So einfach kann es sein. Was Du auch oft benötigen wirst ist die Abfrage einer Response Header Variable. Hier prüfe ich, ob es sich bei der Response um ein Bild vom Typ „jpeg“ handelt:

pm.test("Content-Type is image/jpeg", function () {
   pm.response.to.have.header("Content-Type");
   pm.response.to.be.header("Content-Type", "image/jpeg");
});

Tipp: Am rechten Rand unter „Snippets“ kannst Du dir per Klick schon vorgefertigte Tests einfügen lassen.

Eine ausführlichere Dokumentation zum Erstellen der Testfälle gibt es direkt bei learning.postman.com.

4. Tests automatisiert ausführen

Unsere Testfälle haben wir manuell erstellt. Um uns aber etwas Zeit zu sparen, können wir alle Tests in einer Collection zusammen ausführen. Dazu wählst Du die Collection aus und klickst auf „Run“. Dort kannst Du dann noch die Anzahl der Iterationen (Ausführungen) und weitere Punkte einstellen.

Collection Test ausführen
Collection Test ausführen

Im Anschluss erhältst Du ein genaues Testprotokoll und kannst Fehler im Code direkt beheben und den Test erneut ausführen.

Testprotokoll der beiden Tests
Testprotokoll der beiden Tests

Zusammenfassung

Beim Testen einer Rest API (und auch generell) ist die Auswahl der Testfälle ein extrem wichtiger Schritt. Nur wenn Du hier alles richtig wählst, kannst Du auch alle Randfälle abdecken und alle potenziellen Fehler in deiner Anwendung beheben. Postman bietet Dir hierbei eine einfache Oberfläche zum Testen und Ausprobieren. Mit wenigen Handgriffen kannst Du Postman soweit individualisieren, dass Du bei Deiner nächsten Anwendung nur noch wenig anpassen musst und dadurch auch viel Zeit sparen kannst.

Hinweis: Bei großen uns sehr sensiblen Systemen müssen noch viele weitere und detailliertere Tests erstellt und ausgewertet (Integrationstests, Akzeptanztests, …) werden. Die hier gezeigten Beispiele sind meiner Erfahrung nach für viele Webanwendungen gut geeignet, um viele Fehler aufzudecken und Ergebnisse zu protokollieren – speziell nach Systemanpassungen.

Ähnliche Beiträge
Beteilige dich an der Unterhaltung

12 Kommentare

  1. Felix sagt:

    Wichtiges am Rande der einzigste Unterschied zwischen Post und Put ist, das Put idempotent ist

    1. Lorenz sagt:

      Guter Hinweis! 🙂

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

bold italic underline strikeThrough
insertOrderedList insertUnorderedList outdent indent
removeFormat
createLink unlink
code

Das könnte dich auch interessieren