Logo GH

API-Tests: Postman/Newman

1) Warum Postman/Newman

Postman ist eine benutzerfreundliche IDE für Skripte und Anfragesammlungen. Newman ist eine CLI-Engine, die die gleichen Sammlungen ohne GUI in CI/CD ausführt. Zusammen geben sie:
  • wiederholbare Regressionen und schnelle Smokes;
  • Parametrierung von Umgebungen/Geheimnissen;
  • Qualitätsmetriken und maschinenlesbare Berichte.

2) Basismodell

Sammlung - Eine Abfrage- und Ordnerstruktur mit freigegebenen Skripten.
Environments - set'{{vars}} 'für dev/stage/prod (URL, Schlüssel).
Pre-request script - Vorbereitung: Signaturen, Token, Datenkorrelation.
Tests - Genehmigen und Speichern von Variablen/Artefakten.
Data-files - CSV/JSON für einen datengetriebenen Lauf.
Mock/Monitor - Stapel und regelmäßige Kontrollen.

Aufbau der Sammlung (Empfehlung):

<API v1>
├─ _bootstrap (auth, health, seeds)
├─ Public
├─ Authenticated
│  ├─ Accounts
│  ├─ Payments
│  └─ Reports
└─ _teardown (cleanup)

3) Variablen und Geheimnisse

Benennen Sie die Variablen mit einem expliziten Präfix: 'baseUrl', 'tenant', 'clientId'.
Halten Sie Geheimnisse (Passwörter, client_secret, HMAC-Schlüssel) in CI-Umgebungsvariablen, nicht in das Repository.
Verwenden Sie scope: local → collection → environment → globals.

Beispiel einer Umgebung (Fragment JSON):
json
{
"name": "stage-eu",
"values": [
{"key":"baseUrl","value":"https://api. stage. example. com","type":"text","enabled":true},
{"key":"tenant","value":"eu-1","type":"text","enabled":true}
]
}

4) Authentifizierung: Vorlagen

4. 1 OAuth2/OIDC (Client Credentials)

Pre-request:
js if (!pm.environment. get("access_token")          Date. now() > pm. environment. get("token_exp")) {
pm. sendRequest({
url: pm. environment. get("authUrl"),
method: 'POST',
header: {'Content-Type':'application/x-www-form-urlencoded'},
body: { mode:'urlencoded', urlencoded:[
{key:'grant_type',value:'client_credentials'},
{key:'client_id',value:pm. environment. get('clientId')},
{key:'client_secret',value:pm. environment. get('clientSecret')},
{key:'scope',value:'payments:read payments:write'}
]}
}, (err, res) => {
pm. environment. set("access_token", res. json(). access_token);
pm. environment. set("token_exp", Date. now()+ (res. json(). expires_in-30)1000);
});
}

In der Abfrage: 'Authorization: Bearer {{access _ token}}'.

4. 2 HMAC (Webhooks/Partner)

Pre-request:
js const body = pm. request. body? pm. request. body. raw          '': '';
const ts = Math. floor(Date. now()/1000);
const msg = `${ts}.${body}`;
const sig = CryptoJS. HmacSHA256(msg, pm. environment. get('hmacSecret')). toString();
pm. variables. set('ts', ts);
pm. variables. set('sig', sig);

Überschriften: „X-Timestamp: {{ts}}“, „X-Signature: {{sig}}“.

5) Tests: Zulassungen und Korrelation

Benutze' pm. expect(...)` и `pm. test("...", fn)`.
Speichern Sie die IDs für die nächsten Schritte durch 'pm. collectionVariables. set`.

Beispiele:
js pm. test("HTTP 200", () => pm. response. to. have. status(200));
pm. test ("Scheme is valid," () => {
const schema = pm. collectionVariables. get("schema_wallet");
pm. expect(tv4. validate(pm. response. json(), JSON. parse(schema))). to. be. true;
});
pm. test ("Contains id," () => {
const id = pm. response. json(). id;
pm. expect(id). to. be. a('string');
pm. collectionVariables. set("wallet_id", id);
});

6) Schema-Validierung (OpenAPI/JSON Schema)

Speichern Sie JSON Schema in Sammlungsvariablen oder in einer separaten Datei.
Für OpenAPI: Verwenden Sie die fertigen Blätter in pre-request/test (ajv, tv4) - via 'pm. sendRequest ™ an eine raw-Datei oder eine JSON-Inline.

Beispiel für das Speichern eines Schemas:
js pm. collectionVariables. set("schema_wallet", JSON. stringify({
"type":"object",
"required":["id","currency","balance"],
"properties":{
"id":{"type":"string"},
"currency":{"type":"string","pattern":"^[A-Z]{3}$"},
"balance":{"type":"number","minimum":0}
}
}));

7) Datengetriebene Szenarien

CSV:

email, password, currency u1@example. com, P@ss1, EUR u2@example. com, P@ss2, USD

Die Abfrage verwendet'{{email}}','{{currency}}'.

Start:

newman run collection. json -e stage-eu. json -d users. csv

JSON (Array of Objects) - praktisch für komplexe Fälle/Strukturen.

8) Negativfälle und Nachhaltigkeit

Bedecken Sie:
  • 401/403 (kein Token/falscher Scope/Rolle).
  • 400/422 (Validierung des Schemas, Pflichtfelder, Grenzen).
  • 404 (BOLA/fremde Ressource).
  • 409 (Konflikte, idempotente Schlüssel).
  • 429 (Limits) - Überprüfen Sie' Retry-After'.
  • 5xx ist die korrekte Degradierung und Retraie des Kunden.
Beispiel für die Prüfung 'Retry-After':
js pm. test ("There is Retry-After at 429," () => {
if (pm. response. code === 429) pm. expect(pm. response. headers. has('Retry-After')). to. be. true;
});

9) Idempotenz, Retrays, Pagination

Übergeben Sie den 'Idempotency-Key' und vergewissern Sie sich, dass die Wiederholung den gleichen 'id/status' ergibt.
Testen Sie die Paginierung: 'limit/offset '/' cursor', ein Detail von Duplikaten und Lücken.
Simulierte Retrays im Test-Skript: aufeinanderfolgende Aufrufe mit demselben Schlüssel.

js pm. test ("Idempotent repetition," () => {
pm. sendRequest(pm. request, (err, res2) => {
pm. expect(res2. code). to. eql(pm. response. code);
pm. expect(res2. json(). id). to. eql(pm. response. json(). id);
});
});

10) Newman в CI/CD

10. 1 Inbetriebnahme


newman run collection. json \
-e stage-eu. json \
-d data. csv \
--timeout-request 30000 \
--reporters cli,htmlextra,junit \
--reporter-htmlextra-export./reports/report. html \
--reporter-junit-export./reports/junit. xml

10. 2 GitHub-Aktionen (Ausschnitt)

yaml
- uses: actions/setup-node@v4 with: { node-version: '20' }
- run: npm i -g newman newman-reporter-htmlextra
- run: newman run collection. json -e stage-eu. json --reporters cli,junit --reporter-junit-export reports/junit. xml
- uses: actions/upload-artifact@v4 with: { name: newman-reports, path: reports }

10. 3 Jenkins/GitLab CI

Exportieren Sie JUnit ('--reporter-junit-export') für die native Visualisierung.
In der Pipeline trennen Sie die Jobs: Rauch (schnell), Regression (voll), Sicherheit (Negativ/Grenzen).

10. 4 Docker


docker run --rm -v $PWD:/etc/newman postman/newman \
run collection. json -e stage-eu. json

11) Moki und Überwachung

Mock-Server Postman sind schnelle Stapel für Front und Verträge.
Monitore - periodischer Lauf von Smokes aus der Cloud (Latenz, 5xx, SSL).
Bewahren Sie im Repository Beispielantwortdateien für deterministische Mocs auf.

12) Testdaten und Reinigung

Erstellen/Löschen von Entitäten (_bootstrap/_teardown).
Markieren Sie die Testobjekte mit dem Präfix' e2e _ 'und der TTL.

Verwenden Sie für Konfliktfelder zufällige Suffixe:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) Leistung „auf dem Knie“

Postman ist kein Lastwerkzeug, sondern:
  • Messen Sie' pm. response. responseTime`;
  • 5-10 Iterationen ausführen und p95/Schwellenwerte fixieren;
  • schwere Performance-Läufe - in JMeter/k6/Gatling (außerhalb dieses Artikels).

14) Lokalisierung und Multiarrangement

Variablen 'tenant', 'region', 'lang'; Wechseln Sie in der Umgebung.
Die Tests sollen überprüfen, dass die Daten nicht zwischen den Tenanten „fließen“ (BOLA-read, tenantenübergreifende Verbote).
Individuelle Sammlungen/Ordner zu regionalen Besonderheiten (Limits, Währungen).

15) Berichterstattung und Artefakte

Speichern Sie CI-Artefakte: HTML-Berichte, 'junit. xml', Protokolle fehlgeschlagener Antworten (response bodies).
Verbinden Sie Slack/Teams Benachrichtigungen auf Smokes fallen.

16) Qualität und Beschichtung

Beschichtungsmatrix:
  • CRUD per-Ressource (200/201/204 + Negative).
  • Autorisierung: Rollen/Scopes/Multi-Tenant.
  • Paginierung/Filter/Sortierung.
  • Idempotenz und Retrays.
  • Grenzen: 413/414/431/429.
  • Formate und Schemata (JSON Schema/OpenAPI).
  • Integrationen (Webhooks mit HMAC/mTLS) - Anti-Replay.

17) Antipatterns

Ein „glücklicher Weg“ ohne negative Tests.
Langlebige Token in einer Sammlung/einem Repository.
Mischen von Testdaten mit Prod-Daten.
Versteckte Abhängigkeit der Testreihenfolge ohne explizite Korrelation.
Riesige Daten-Dateien ohne Sampling.
Keine JUnit/HTML-Berichte → keine Sichtbarkeit in CI.

18) Checkliste Prod-Ready

  • Sammlungen sind nach Domains aufgeschlüsselt, es gibt'_ bootstrap/_ teardown'.
  • Umgebungen für dev/stage/prod; Geheimnisse aus dem CI-Geheimnis-Speicher.
  • Pre-request для auth (OAuth2/HMAC); Token werden zwischengespeichert und rotiert.
  • Tests: positiv + negativ, Schemata (JSON Schema), Pagination, 429/Retry-After.
  • Idempotenz: Prüfung 'Idempotency-Key', doppelter Aufruf ist äquivalent.
  • Data-driven CSV/JSON, zufällige Suffixe für Einzigartigkeit.
  • Newman in CI: JUnit/HTML-Berichte, Artefakte als Build-Outputs.
  • Moki/Monitore für Schlüsselrouten; SLA durch Smokes.
  • Dokumentation zu Variablen, Tags und Startreihenfolge.

19) TL; DR

Speichern Sie die Testlogik in Postman-Sammlungen, die Parameter in Umgebungen und führen Sie in CI durch Newman mit JUnit/HTML-Berichten. Bedecken Sie Negative, Schemata, Idempotenz, Pagination und Grenzen. Korrelieren Sie die Schritte mit Variablen, verwenden Sie datengetriebene Eingänge und Mooks/Monitore. Geheimnisse sind nur von CI, Berichte sind Artefakte des Bilds.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.