Postman ist eines der am weitesten verbreiteten Tools zum Senden von HTTP-Anfragen und zum Überprüfen des API-Verhaltens. Es eignet sich für schnelle manuelle Checks, skriptbasierte Tests und Collection-Runs, die sich später auch automatisieren lassen.
In diesem Leitfaden testen Sie eine API in Postman so, wie es im Alltag typischerweise passiert: Anfrage senden, Antwort prüfen, Tests schreiben, Umgebungen verwenden und eine komplette Collection mit dem Collection Runner ausführen. Die Beispiele nutzen JSONPlaceholder, damit Sie ohne eigenes Backend mitmachen können.
Postman einrichten und die erste Anfrage senden
Laden Sie Postman von der offiziellen Website herunter und installieren Sie die Desktop-App. Sie können Postman lokal auch ohne Konto verwenden. Ein Konto ist vor allem nützlich, wenn Sie Collections geräteübergreifend synchronisieren möchten.
Erstellen Sie danach eine neue HTTP-Anfrage:
- Öffnen Sie Postman.
- Klicken Sie auf New.
- Wählen Sie HTTP Request.
- Stellen Sie die Methode auf
GET. - Tragen Sie diese URL ein:
GET https://jsonplaceholder.typicode.com/users/1
Klicken Sie auf Send. Postman zeigt Ihnen danach:
- den Response-Body
- den Statuscode, z. B.
200 OK - die Antwortzeit
- die Response-Größe
- Header und Cookies
Wechseln Sie im Body-Bereich zwischen Pretty, Raw und Preview, um die Antwort unterschiedlich darzustellen.
Für eine POST-Anfrage ändern Sie die Methode auf POST, öffnen den Tab Body, wählen raw und dann JSON. Beispiel-Payload:
{
"name": "Maria Chen",
"email": "maria.chen@example.com"
}
Wenn Sie den Body-Typ auf JSON setzen, fügt Postman automatisch den Header Content-Type: application/json hinzu. Weitere Header wie Authorization können Sie im Tab Headers ergänzen.
Wenn Sie unsicher sind, welche Statuscodes eine REST-API zurückgeben sollte, hilft diese Referenz zu HTTP-Statuscodes, die REST-APIs verwenden sollten.
Anfragen in Collections organisieren
Eine einzelne Anfrage reicht für einen schnellen Check. Für echte API-Tests brauchen Sie aber zusammenhängende Abläufe, zum Beispiel:
- Benutzer erstellen
- Benutzer abrufen
- Benutzer aktualisieren
- Benutzer löschen
Dafür verwendet Postman Collections.
So legen Sie eine Collection an:
- Öffnen Sie links den Bereich Collections.
- Klicken Sie auf das +-Symbol.
- Geben Sie der Collection einen konkreten Namen, z. B.
User API Smoke Tests. - Speichern Sie Anfragen mit Strg/Cmd + S in dieser Collection.
- Benennen Sie jede Anfrage eindeutig, z. B.
Get user by ID.
Sie können zusätzlich Ordner verwenden, etwa:
User API Smoke Tests
├── Auth
│ └── Login
├── Users
│ ├── Create user
│ ├── Get user
│ ├── Update user
│ └── Delete user
Collections sind auch die Einheit, die Sie teilen oder exportieren. Sie können eine Collection als JSON exportieren oder per Link teilen, wenn Sie Postmans Cloud-Sync verwenden.
Praktisch ist außerdem, dass Sie Skripte auf Collection- oder Ordnerebene definieren können:
- Pre-request Script: läuft vor jeder Anfrage
- Tests Script: läuft nach jeder Anfrage
Beispiel für einen einfachen Test auf Collection-Ebene:
pm.test("Antwortzeit ist unter 1000ms", function () {
pm.expect(pm.response.responseTime).to.be.below(1000);
});
Damit müssen Sie allgemeine Prüfungen nicht in jeder einzelnen Anfrage duplizieren.
Tests im Scripts- oder Tests-Tab schreiben
Das manuelle Prüfen einer Antwort ist fehleranfällig. Besser ist es, Erwartungen als Tests zu formulieren. Postman führt diese Tests nach dem Empfang der Antwort aus.
Je nach Postman-Version finden Sie diese Logik im Bereich Scripts oder im älteren Tests-Tab.
Postman stellt dafür das Objekt pm bereit. Das Grundmuster lautet:
pm.test("Beschreibung des erwarteten Verhaltens", function () {
// Assertion
});
Typische Assertions:
// Statuscode überprüfen
pm.test("Statuscode ist 200", function () {
pm.response.to.have.status(200);
});
// Antwortzeit überprüfen
pm.test("Antwort ist unter 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// Feld im JSON-Body überprüfen
pm.test("Benutzer hat die erwartete E-Mail", function () {
const body = pm.response.json();
pm.expect(body.email).to.eql("maria.chen@example.com");
});
// Header überprüfen
pm.test("Content-Type ist JSON", function () {
pm.expect(pm.response.headers.get("Content-Type"))
.to.include("application/json");
});
Die Assertion-Syntax basiert auf Chai. Sie können unter anderem verwenden:
pm.expect(value).to.eql("abc");
pm.expect(value).to.include("json");
pm.expect(value).to.be.above(10);
pm.expect(value).to.be.below(500);
Nach einem Klick auf Send sehen Sie die Ergebnisse im Bereich Test Results.
Gute API-Tests sollten sich auf Verhalten konzentrieren, das für API-Konsumenten relevant ist:
- richtiger Statuscode
- erwartete Response-Struktur
- wichtige Felder im Body
- relevante Header
- sinnvolle Antwortzeit
Vermeiden Sie Tests auf Werte, die sich ständig ändern, z. B. servergenerierte Zeitstempel, sofern diese nicht explizit Teil des erwarteten Verhaltens sind.
Beispiel für einen stabileren Test:
pm.test("Antwort enthält eine Benutzer-ID", function () {
const body = pm.response.json();
pm.expect(body).to.have.property("id");
pm.expect(body.id).to.be.a("number");
});
Postman bietet außerdem ein Snippets-Panel. Dort können Sie häufige Testbausteine anklicken und in Ihr Skript einfügen.
Für mehr Details zum Design von Assertions lesen Sie die Erklärung zu API-Zusicherungen und wie man sie gut schreibt. Wenn Sie Tests als benannte Fälle strukturieren möchten, ist auch das API-Testfall-Beispiel hilfreich.
Umgebungen und Variablen verwenden
Hardcodierte URLs wie https://api.staging.example.com in jeder Anfrage werden schnell unübersichtlich. Besser ist es, Postman-Umgebungen zu verwenden.
Eine Umgebung ist eine benannte Sammlung von Variablen, z. B.:
base_url = https://jsonplaceholder.typicode.com
auth_token = ...
So richten Sie eine Umgebung ein:
- Öffnen Sie den Bereich Environments.
- Erstellen Sie eine Umgebung namens
Staging. - Fügen Sie eine Variable
base_urlhinzu. - Setzen Sie den Wert auf:
https://jsonplaceholder.typicode.com
Verwenden Sie die Variable anschließend in Ihrer Anfrage:
GET {{base_url}}/users/1
Wählen Sie oben rechts die aktive Umgebung aus. Wenn Sie später eine Umgebung Production mit einer anderen base_url erstellen, können dieselben Requests gegen ein anderes Ziel laufen.
Variablen sind auch nützlich, um Daten zwischen Anfragen weiterzugeben. Beispiel: Ein Login-Request speichert ein Token aus der Antwort:
pm.test("Auth-Token speichern", function () {
const token = pm.response.json().token;
pm.environment.set("auth_token", token);
});
Danach können spätere Requests diesen Header verwenden:
Authorization: Bearer {{auth_token}}
Wichtige Variablenbereiche in Postman:
| Bereich | Verwendung |
|---|---|
| Environment Variables | Werte pro Umgebung, z. B. base_url, auth_token
|
| Collection Variables | Werte, die zur Collection gehören |
| Global Variables | Werte, die überall verfügbar sind |
| Local Variables | Werte nur für eine einzelne Ausführung |
Wählen Sie den kleinsten passenden Scope. Das reduziert Seiteneffekte, wenn Sie zwischen Staging, Produktion und lokalen APIs wechseln.
Eine komplette Collection mit dem Collection Runner ausführen
Wenn Sie jede Anfrage einzeln über Send ausführen, wird das schnell langsam. Der Collection Runner führt alle Requests einer Collection der Reihe nach aus und zeigt am Ende eine Zusammenfassung.
So starten Sie einen Run:
- Öffnen Sie Ihre Collection.
- Klicken Sie auf Run oder öffnen Sie das Drei-Punkte-Menü und wählen Sie Run collection.
- Prüfen Sie die Reihenfolge der Requests.
- Wählen Sie die passende Umgebung.
- Legen Sie optional Iterationen fest.
- Fügen Sie optional eine CSV- oder JSON-Datendatei hinzu.
- Klicken Sie auf Run.
Postman führt nun jede Anfrage aus und wertet die zugehörigen Tests aus.
Die Reihenfolge ist wichtig. Typischer Ablauf:
1. Login
2. Create user
3. Get user
4. Update user
5. Delete user
Wenn Login ein Token speichert, können alle nachfolgenden Requests dieses Token verwenden:
pm.environment.set("auth_token", pm.response.json().token);
Für datengetriebene Tests können Sie im Runner eine CSV- oder JSON-Datei verwenden.
Beispiel users.csv:
email,expected_status
maria.chen@example.com,200
invalid-email,400
empty@example.com,400
In der Anfrage verwenden Sie dann Variablen:
{
"email": "{{email}}"
}
Und im Test prüfen Sie den erwarteten Statuscode:
pm.test("Statuscode entspricht Testdaten", function () {
pm.response.to.have.status(Number(pm.iterationData.get("expected_status")));
});
So testen Sie mehrere Eingabekombinationen, ohne Requests zu duplizieren.
Mehr dazu finden Sie im Artikel über datengetriebenes API-Testen mit CSV und JSON. Wenn Sie dieselbe Collection ohne GUI in CI ausführen möchten, nutzen Sie Newman. Der Unterschied wird im Vergleich Newman versus Postman erklärt.
Postman in CI mit Newman ausführen
Für automatisierte API-Tests in einer Pipeline exportieren Sie Ihre Collection und Umgebung als JSON-Dateien und führen sie mit Newman aus.
Installation:
npm install -g newman
Ausführung:
newman run collection.json -e environment.json
Wenn ein Test fehlschlägt, beendet Newman den Prozess mit einem Nicht-Null-Exit-Code. Dadurch kann Ihre CI-Pipeline fehlschlagen.
Ein minimales Beispiel für GitHub Actions:
name: API Tests
on:
push:
branches:
- main
jobs:
postman-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Newman
run: npm install -g newman
- name: Run Postman collection
run: newman run collection.json -e environment.json
Der Leitfaden zum Automatisieren von API-Tests in CI/CD zeigt, wie Sie diesen Ansatz in eine Pipeline integrieren.
Wo Postman komplex wird
Postman ist stark für exploratives Testen und kleine bis mittlere Testsuiten. Bei wachsenden Projekten treten häufig zwei Punkte auf:
Assertions sind JavaScript-basiert
Das ist flexibel, kann aber für QA-Teams oder nicht-technische Beteiligte eine Hürde sein.Design, Tests, Mocking und Dokumentation liegen oft getrennt
Dadurch können API-Vertrag, Testdaten und Dokumentation auseinanderlaufen.
Apidog ist eine All-in-One-API-Plattform, die diese Punkte adressiert. Postman-Collections können importiert werden. Assertions lassen sich visuell ohne Code erstellen, während Skripte bei Bedarf weiterhin möglich sind. Design, Debugging, Mocking, Testen und Dokumentation teilen eine gemeinsame Quelle der Wahrheit.
Wenn Sie Alternativen vergleichen möchten, bietet die Übersicht zu Postman-Alternativen für API-Tests einen Einstieg. Sie können außerdem Apidog herunterladen und eine bestehende Collection importieren, um den Workflow direkt zu vergleichen.
Das heißt nicht, dass Sie Postman ersetzen müssen. Für schnelle Prüfungen und Teams, die bereits mit Postman arbeiten, bleibt es eine solide Wahl. Wichtig ist, den passenden Workflow für Projektgröße, Teamstruktur und Automatisierungsgrad zu wählen.
Häufig gestellte Fragen
Muss ich Code schreiben, um APIs in Postman zu testen?
Zum Senden von Requests und Lesen von Responses: nein. Für automatisierte Assertions: ja, zumindest etwas JavaScript. Postman verwendet dafür das pm-Objekt im Tests- oder Scripts-Bereich. Viele Muster können Sie aus dem Snippets-Panel übernehmen.
Wenn Sie Assertions visuell ohne Code erstellen möchten, kann eine dedizierte Plattform wie Apidog helfen.
Was ist der Unterschied zwischen einer Postman Collection und einer Umgebung?
Eine Collection enthält Requests und Tests. Eine Umgebung enthält Variablen wie base_url, auth_token oder client_id.
Kurz gesagt:
Collection = was gesendet wird
Environment = gegen welches Ziel und mit welchen Werten gesendet wird
So können Sie dieselbe Collection gegen Staging, Produktion oder lokale Systeme ausführen.
Wie führe ich Postman-Tests automatisch in CI aus?
Verwenden Sie Newman:
newman run collection.json -e environment.json
Newman gibt einen Fehlercode zurück, wenn ein Test fehlschlägt. CI-Systeme wie GitHub Actions, GitLab CI oder Jenkins können diesen Exit-Code auswerten.
Kann Postman mehr als REST-APIs testen?
Ja. Postman unterstützt neben HTTP und REST auch GraphQL, gRPC, WebSocket und SOAP. Die genaue Konfiguration hängt vom Protokoll ab, aber das Prinzip bleibt gleich: Anfrage definieren, Antwort prüfen, Tests ergänzen.
Wie viele Assertions sollte eine Anfrage haben?
So viele wie nötig, aber nicht mehr. Eine sinnvolle Basis ist:
- Statuscode
- Antwortzeit
- wichtige Header
- relevante Felder im Body
Halten Sie jeden pm.test-Block möglichst fokussiert. Dadurch sehen Sie bei einem Fehler schneller, was genau gebrochen ist.
Top comments (0)