Postman API-Testkonzept¶
Ziel: Postman als zweite Testschicht neben Emulator-Tests nutzen, um Backend-Flows gegen Firestore, Cloud Functions und ausgewählte Admin-Schnittstellen reproduzierbar zu prüfen.
Zielbild¶
Postman soll bei easySale nicht nur Security-Checks abdecken, sondern als praktisches API-Testwerkzeug für folgende Szenarien dienen:
- Artikel anlegen, lesen, ändern und löschen
- Kunden anlegen, lesen, ändern und löschen
- Bestellungen anlegen und verifizieren
- Berechtigungen und Claims prüfen
- Admin-/System-Flows smoke-testen
- Negative Tests gegen Regeln, Validierung und Statuswechsel
Die Leitlinie ist klar:
- Emulator-Tests bleiben das Hauptwerkzeug für harte Geschäftslogik, Trigger und deterministische Regressionen.
- Postman ergänzt diese Tests für manuelle Prüfung, Freigabe-Checks, kleinere Integrationsläufe und reproduzierbare API-Szenarien.
- Newman macht die wichtigsten Collection-Flows im CI ausführbar.
Was Postman hier leisten soll¶
1. Fixture- und Setup-Tests¶
Postman soll Testdaten anlegen, die danach in anderen Requests weiterverwendet werden.
Typische Beispiele:
- Test-Artikel mit Preis, Varianten, Sichtbarkeit und Aktiv-Status anlegen
- Test-Kunden mit Nummer, Land, Kategorie und Freigaben anlegen
- Test-Benutzer oder Test-Claims vorbereiten
- Referenzdaten und Default-Werte setzen
2. Business-Flow-Tests¶
Diese Requests prüfen komplette Abläufe statt nur einzelne Funktionen.
Typische Beispiele:
- Artikel anlegen und anschließend auslesen
- Kunden anlegen und Zuordnungen verifizieren
- Order erstellen und Ergebnis inklusive Nummer, Betrag und Positionen prüfen
- Folgeaktionen wie Statuswechsel, Benachrichtigungen oder Trigger-Auswirkungen prüfen
3. Sicherheits- und Regeltests¶
Postman bleibt ein guter Ort für kleine, reproduzierbare Security-Checks.
Typische Beispiele:
- Unautorisierte Requests werden abgelehnt
- Falsche Rollen oder fehlende Claims blockieren Schreibzugriffe
- Ungültige Payloads werden sauber zurückgewiesen
- Daten bleiben in der richtigen Mandanten- oder Kunden-Sphäre
Nicht-Ziel¶
Postman soll nicht die Unit- und Emulator-Tests ersetzen.
Nicht hier abdecken:
- komplexe Preis- und Rundungslogik
- Trigger-Ketten mit vielen DB-Interaktionen
- zeitabhängige Berechnungen wie Liefertage oder Feiertage
- tiefes Mocking von Firebase Runtime-Verhalten
Diese Dinge bleiben in den bestehenden Functions- und Emulator-Tests.
Empfohlene Architektur¶
Collections¶
Ich würde die Collection in klar getrennte Ordner aufteilen:
| Ordner | Zweck |
|---|---|
00-auth |
Login, Token-Handling, Umgebungscheck |
10-setup |
Seed-Daten, Basisdaten, Cleanup |
20-articles |
Artikel anlegen, ändern, lesen, löschen |
30-customers |
Kunden anlegen, ändern, lesen, löschen |
40-orders |
Bestellungen, Order-Status, Verifikation |
50-admin |
Admin-Aktionen, Rollen, Sonderflüsse |
90-smoke |
Kleine End-to-End-Prüfung vor Release |
Environments¶
Ich würde drei Umgebungen anlegen:
| Environment | Zweck | Sicherheit |
|---|---|---|
local-emulator |
Gegen Firebase Emulatoren testen | ungefährlich, destruktiv erlaubt |
staging |
Vor Release gegen Testsystem | produktionsnah, aber getrennte Daten |
production-readonly |
Nur sehr kleine Smoke-Checks | keine Schreibtests |
Variablen¶
Die Collection soll mit klaren Variablen arbeiten:
| Variable | Beispiel | Zweck |
|---|---|---|
baseUrl |
Emulator- oder Cloud-URL | Zielsystem |
projectId |
test-project |
Firestore- und Auth-Bezug |
apiKey |
Firebase Web API Key | Auth-Login via REST |
idToken |
JWT | Requests authentifizieren |
refreshToken |
Refresh Token | Token erneuern |
customerId |
generierte ID | Folge-Requests |
articleId |
generierte ID | Folge-Requests |
orderId |
generierte ID | Verifikation |
Auth-Konzept¶
Für Postman würde ich einen einheitlichen Auth-Flow verwenden:
- Login mit Test-Account pro Environment.
idTokenin der Environment speichern.- Alle Requests senden
Authorization: Bearer {{idToken}}. - Wenn der Token abläuft, automatisch per Pre-request-Script erneuern.
Für den Emulator können wir einen separaten Test-Account oder Emulator-Auth nutzen. Für Staging braucht es ein klares, nicht produktives Testkonto mit festen Rollen.
Wichtig:
- Keine echten Benutzerpasswörter in geteilten Collections.
- Secrets nur in lokalen oder geschützten Environments.
- Produktion nur mit Accounts, die ausdrücklich für Smoke-Tests vorgesehen sind.
Datenstrategie¶
Prinzipien¶
- Jeder Test ist möglichst selbstgenügsam.
- Jeder Test erzeugt seine eigenen IDs.
- Jeder Test räumt am Ende auf, wenn er schreibt.
- Fixture-Daten bleiben klein und nachvollziehbar.
- Unklare Seiteneffekte werden nicht toleriert.
Testdaten-Klassen¶
| Klasse | Beispiel | Nutzung |
|---|---|---|
| Basis-Fixtures | ein Standard-Kunde, ein Standard-Artikel | Smoke-Tests |
| Fach-Fixtures | Varianten, Länder, Kategorien, Preisstaffeln | Fachflüsse |
| Fehler-Fixtures | gesperrter Artikel, fehlende Variante, falsche Rolle | Negativtests |
| Cleanup-Daten | temporäre Test-IDs | Aufräumen nach Lauf |
Welche Flows ich aufnehmen würde¶
Artikel¶
- Artikel anlegen mit Pflichtfeldern
- Artikel mit Varianten anlegen
- Artikel ändern und erneut lesen
- Artikel löschen und prüfen, ob Folgeobjekte sauber reagieren
- gesperrte oder inaktive Artikel ablehnen
Kunden¶
- Kunden mit Nummer, Land und Kategorie anlegen
- Kunden aktualisieren
- Kundenfreigaben prüfen
- Kunden ohne Berechtigung blockieren
- Kundenlöschung und Folgeeffekte prüfen
Orders¶
- Order mit gültigem Kunden und Artikel anlegen
- Order mit Varianten und Mengen anlegen
- Order mit fehlerhaften Positionen ablehnen
- Ordernummer und Betrag verifizieren
- Order-Folgeobjekte oder Trigger-Effekte prüfen
Admin und System¶
- Rollenwechsel nur mit berechtigtem Account
- System- oder Job-Endpoints nur mit Admin-Berechtigung
- Smoke-Tests für wichtige Backend-Checks
Konkretes Collection-Design¶
Request-Reihenfolge für einen typischen Lauf¶
- Auth holen.
- Basisdaten anlegen.
- Artikel anlegen.
- Kunden anlegen.
- Order anlegen.
- Ergebnis aus Firestore oder API zurücklesen.
- Cleanup ausführen.
Beispielhafte Assertions¶
Postman-Tests sollten nicht nur Statuscodes prüfen, sondern auch fachliche Aussagen:
- Datensatz wurde angelegt
- Referenz-ID wurde gespeichert
- Pflichtfelder sind vorhanden
- Beträge und Status sind korrekt
- Schreibzugriff wurde nur für erlaubte Rollen zugelassen
Newman im CI¶
Ich würde Newman für zwei Arten von Läufen einsetzen:
1. Smoke-Lauf bei jedem wichtigen Merge¶
- 5 bis 10 Kernrequests
- nur Happy Path und wichtigste Negativfälle
- Ziel: schneller Rückkanal
2. Voller API-Lauf vor Release¶
- alle relevanten Collection-Ordner
- inklusive Cleanup und Negativtests
- Ziel: nachvollziehbare Freigabe gegen Staging
Empfohlene Umsetzung in Stufen¶
Phase 1: Grundgerüst¶
- Collection-Struktur anlegen
- Environment-Variablen definieren
- Auth-Flow einbauen
- 3 bis 5 Smoke-Requests bauen
Phase 2: Fachflüsse¶
- Artikel anlegen und verifizieren
- Kunden anlegen und verifizieren
- Orders anlegen und verifizieren
- Negative Tests ergänzen
Phase 3: CI-Härtung¶
- Newman-Skript in CI integrieren
- Staging-Run automatisieren
- Smoke-Run für Pull Requests oder Release-Kandidaten definieren
Meine Empfehlung für easySale¶
Ich würde das Setup bewusst zweigleisig bauen:
- Emulator-Tests für belastbare Backend-Logik, Trigger und Regressionen.
- Postman/Newman für API-Integration, manuelle Freigabe und schnelle End-to-End-Checks.
Das ist die pragmatischste Aufteilung, weil Postman sehr gut für reproduzierbare API-Flows ist, aber bei tiefer Geschäftslogik und Firebase-Triggern schnell unhandlich wird.
Nächster sinnvoller Schritt¶
Wenn du willst, kann ich als Nächstes direkt die konkrete Postman-Struktur ausarbeiten:
- Collection-Namen und Ordner
- Environment-Variablen pro Umgebung
- Auth-Flow als Pre-request-Script
- erste Requests für Artikel, Kunden und Orders
- Newman-Aufruf für CI