DEV Community

Cover image for Apidog: If/Else-Verzweigung und Kontrollfluss für API-Tests implementieren
Emre Demir
Emre Demir

Posted on • Originally published at apidog.com

Apidog: If/Else-Verzweigung und Kontrollfluss für API-Tests implementieren

Die meisten API-Tests laufen linear ab: Login, Checkout, Beleg abrufen, Ergebnisse prüfen. Das funktioniert nur, solange ein Fehler in einem Schritt keine Folgefehler erzeugt. Gibt der Login beispielsweise 401 Unauthorized zurück, ist ein anschließender Checkout nicht aussagekräftig. Er produziert meist nur einen zweiten, irreführenden Fehler. Mit einer bedingten Verzweigung liest Ihr Test die Login-Antwort, entscheidet über den nächsten Schritt und markiert die tatsächliche Fehlerquelle.

Teste Apidog noch heute

In diesem Tutorial erstellen Sie in Apidog ein API-Testszenario mit if/else-Logik: Der Test führt Checkout nur aus, wenn Login erfolgreich war. Die linearen Grundlagen finden Sie im Leitfaden zum Erstellen eines Testszenarios mit Apidog. Für die allgemeinen Konzepte hinter Verzweigungen eignet sich der MDN-Leitfaden zu bedingten Anweisungen.

Was Flusskontrolle ist – und was nicht

Automatisierte Tests liegen in Apidog im Modul Tests. Dort erstellen Sie Testszenarien, vergleichbar mit Collections in Postman. Ein Szenario besteht aus Testschritten:

  • API-Anfragen
  • Steuerfluss-Elementen wie Verzweigungen, Schleifen und Wartezeiten

Eine Bildschirmaufnahme der Apidog-Szenarioansicht mit Steuerfluss-Elementen.

Mit Flusskontrolle verarbeitet ein Szenario nicht nur Schritte strikt nacheinander. Eine Bedingte Verzweigung prüft einen Wert und führt abhängig vom Ergebnis unterschiedliche Schritte aus:

if Login-Status == 200:
  Checkout ausführen
else:
  Fehler melden und Szenario beenden
Enter fullscreen mode Exit fullscreen mode

Die vollständige Referenz finden Sie in der Apidog-Dokumentation zu Flusskontrolle und bedingten Verzweigungen.

Verzweigung vs. Schleife

Eine Verzweigung und eine Schleife lösen unterschiedliche Probleme:

Element Zweck
Bedingte Verzweigung Entscheidet einmal zwischen Pfaden (if/else)
For Loop / ForEach Loop Wiederholt Schritte über Werte oder Array-Elemente

Wenn Sie beispielsweise mehrere Bestell-IDs abarbeiten müssen, verwenden Sie eine Schleife. Dafür gibt es das ForEach-Schleifen-Tutorial.

Die Dokumentation nennt keine separaten Plan-, Cloud- oder Self-Hosting-Beschränkungen für Flusskontrolle, Verzweigungen, Schleifen oder Datenübergabe. Wenn Sie ein Testszenario anlegen können, können Sie darin auch Verzweigungen verwenden.

Ziel: Checkout nur nach erfolgreichem Login ausführen

Sie bauen folgenden Ablauf:

  1. Benutzer anmeldet sich an.
  2. Das Szenario prüft den Login-Statuscode.
  3. Bei 200 OK wird Checkout ausgeführt.
  4. Bei jedem anderen Status wird der Fehlerpfad ausgeführt.

So verhindern Sie, dass ein ungültiger Login einen Folgefehler im Checkout erzeugt.

Schritt 1: Testszenario erstellen

  1. Öffnen Sie in Apidog das Modul Tests.
  2. Klicken Sie neben der Suche auf +.
  3. Wählen Sie ein Verzeichnis für das Szenario.
  4. Legen Sie bei Bedarf eine Priorität fest.
  5. Erstellen Sie das Szenario.

Sie starten mit einem leeren Ablauf und können nun Testschritte hinzufügen.

Schritt 2: Login-Anfrage hinzufügen

Fügen Sie die Login-Anfrage als ersten Testschritt ein. Sie können eine vorhandene API-Spezifikation, einen gespeicherten Endpoint-Fall, cURL oder eine benutzerdefinierte Anfrage verwenden.

Für ein Beispiel erstellen Sie eine POST-Anfrage:

POST https://api.your-store.com/v1/login
Content-Type: application/json

{
  "email": "dana@example.com",
  "password": "correct-horse-battery-staple"
}
Enter fullscreen mode Exit fullscreen mode

Führen Sie den Schritt zunächst separat aus. Ein erfolgreicher Login könnte beispielsweise folgende Antwort liefern:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "userId": "usr_10482"
}
Enter fullscreen mode Exit fullscreen mode

Prüfen Sie dabei insbesondere:

  • Statuscode ist 200
  • Das erwartete Token ist im Response-Body vorhanden
  • Das Response-Format passt zu den späteren Referenzen

Schritt 3: Orchestrierungsmodus öffnen

Klicken Sie auf einen beliebigen Schritt, um in den Orchestrierungsmodus zu wechseln.

In dieser Ansicht:

  • zeigt das linke Panel den Ablauf des gesamten Szenarios,
  • zeigt das rechte Panel die Konfiguration des ausgewählten Schritts,
  • können Sie Schritte über das Symbol per Drag-and-drop umsortieren.

Hier fügen Sie auch die Verzweigung zwischen Login und Checkout ein.

Schritt 4: Bedingte Verzweigung hinzufügen

  1. Klicken Sie auf Schritt hinzufügen.
  2. Wählen Sie Bedingte Verzweigung.
  3. Konfigurieren Sie eine if-Bedingung für die Login-Antwort.

Apidog bietet dafür unter anderem diese Operatoren:

  • Ist gleich
  • Ist nicht gleich
  • Existiert
  • Existiert nicht
  • Kleiner als
  • Kleiner als oder gleich
  • Größer als
  • Größer als oder gleich
  • Stimmt mit Regex überein
  • Enthält
  • Enthält nicht
  • Ist leer
  • Ist nicht leer
  • In Liste
  • Nicht in Liste

Für den Login verwenden Sie folgende Logik:

Status der Login-Antwort Ist gleich 200
Enter fullscreen mode Exit fullscreen mode

Schritt 5: Status der vorherigen Antwort referenzieren

Für Werte aus vorigen Schritten gibt es zwei praktikable Ansätze.

Option A: Daten des vorherigen Schritts abrufen

Diese Methode benötigt keine zusätzliche Variable.

  1. Klicken Sie in das Wertfeld der Bedingung.
  2. Öffnen Sie das Zauberstab-Symbol.
  3. Wählen Sie Daten des vorherigen Schritts abrufen.
  4. Wählen Sie den Status der Login-Anfrage.

Intern verwendet Apidog dafür Referenzen wie:

{{$.<step id>.response.body.<field path>}}
Enter fullscreen mode Exit fullscreen mode

Um beispielsweise das Login-Token aus Schritt 1 zu referenzieren, verwenden Sie:

{{$.1.response.body.token}}
Enter fullscreen mode Exit fullscreen mode

Eine Bildschirmaufnahme des Apidog-Bedingungsbaukastens, der zeigt, wie man den Statuscode des vorherigen Schritts als Bedingung verwendet.

Beachten Sie dabei zwei Einschränkungen:

  • Daten des vorherigen Schritts abrufen funktioniert nur im Modul Tests, nicht im Modul APIs.
  • Die Referenz wird nur beim Ausführen des vollständigen Szenarios aufgelöst. Bei einer isolierten Ausführung eines einzelnen Schritts kann sie leer sein.

Option B: Antwortwert in eine Variable extrahieren

Wenn Sie Werte in mehreren Schritten oder auch im Modul APIs benötigen, extrahieren Sie diese nach der Login-Anfrage in eine benannte Variable.

  1. Öffnen Sie bei der Login-Anfrage die Post-Processors.
  2. Fügen Sie Variable extrahieren hinzu.
  3. Verwenden Sie einen JSONPath-Ausdruck, etwa:
$.token
Enter fullscreen mode Exit fullscreen mode
  1. Speichern Sie den Wert beispielsweise als token.

Danach können Sie ihn in späteren Anfragen verwenden:

{{token}}
Enter fullscreen mode Exit fullscreen mode

Weitere Details finden Sie im Leitfaden zum Übergeben von Daten zwischen Testschritten.

Für eine reine Statuscode-Prüfung ist Daten des vorherigen Schritts abrufen meist der kürzeste Weg.

Schritt 6: Else-Pfad konfigurieren

Fahren Sie mit der Maus über den if-Block und klicken Sie auf + Else.

Nun haben Sie zwei getrennte Pfade.

If: Checkout ausführen

Fügen Sie innerhalb des if-Blocks die Checkout-Anfrage ein. Sie wird nur ausgeführt, wenn der Login den Status 200 geliefert hat.

Falls Checkout das Login-Token benötigt, senden Sie es beispielsweise im Authorization-Header:

POST https://api.your-store.com/v1/checkout
Authorization: Bearer {{token}}
Content-Type: application/json
Enter fullscreen mode Exit fullscreen mode

Das entspricht dem üblichen Muster für authentifizierte API-Anfragen, wie es auch die Stripe API-Dokumentation zeigt.

Else: Fehler sichtbar machen

Fügen Sie im else-Block einen Schritt hinzu, der den Fehler eindeutig markiert. Geeignete Optionen sind:

  • eine Anfrage an einen Logging- oder Benachrichtigungs-Endpunkt,
  • eine benutzerdefinierte Anfrage,
  • eine Assertion, die bewusst fehlschlägt.

Der wichtige Punkt: Der Fehlerpfad darf nicht so wirken, als wäre Checkout ausgeführt worden.

Der Ablauf lautet jetzt:

if Login-Status == 200:
  Checkout ausführen
else:
  Login-Fehler melden
Enter fullscreen mode Exit fullscreen mode

Schritt 7: Speichern und als Gesamtszenario ausführen

Klicken Sie auf Alle speichern. Ein Punkt bei Änderungen zeigt an, dass noch nicht gespeichert wurde.

Führen Sie anschließend das gesamte Szenario aus:

  • Mit gültigen Zugangsdaten sollte der if-Block laufen.
  • Mit falschen Zugangsdaten sollte der else-Block laufen.
  • Der Checkout darf bei einem fehlgeschlagenen Login nicht ausgeführt werden.

Erweiterungen für komplexere Szenarien

Auf ein Feld im Response-Body verzweigen

Sie können nicht nur Statuscodes prüfen. Wenn Ihre API beispielsweise immer 200 liefert, aber den eigentlichen Kontostatus im Body zurückgibt, verwenden Sie ein Body-Feld:

{{$.1.response.body.status}}
Enter fullscreen mode Exit fullscreen mode

Mögliche Bedingungen:

status Ist gleich "active"
Enter fullscreen mode Exit fullscreen mode

oder:

message Enthält "locked"
Enter fullscreen mode Exit fullscreen mode

Auch Bereichs- und Listenprüfungen sind möglich:

balance Größer als 0
role In Liste ["admin", "editor"]
Enter fullscreen mode Exit fullscreen mode

Verzweigungen innerhalb einer ForEach-Schleife verwenden

Sie können Verzweigungen und Schleifen kombinieren. Ein typisches Beispiel:

  1. Eine ForEach-Schleife iteriert über Produkt-IDs.
  2. Eine Bedingte Verzweigung prüft, ob das Produkt aktiv oder verfügbar ist.
  3. Nur passende Produkte werden verarbeitet.

Referenzen innerhalb einer Schleife verwenden diese Form:

{{$.<loop step id>.index}}
{{$.<loop step id>.element.<field path>}}
Enter fullscreen mode Exit fullscreen mode

Der Index beginnt bei 0. Eine ausführliche Einführung finden Sie im ForEach-Schleifen-Tutorial.

Eine Bildschirmaufnahme von Apidog, die zeigt, wie man eine If/Else-Verzweigung innerhalb einer ForEach-Schleife erstellt. Die Schleife iteriert über Produkte und die Verzweigung prüft, ob das Produkt aktiv ist.

Schleife mit Break If frühzeitig beenden

Innerhalb einer Schleife beendet Break If condition die Iteration, sobald eine Bedingung erfüllt ist. Sie können dieses Element verschieben und mehrfach in einer Schleife einsetzen.

Fehler innerhalb von Schleifen behandeln

Schleifen enthalten ein fest positioniertes On Error-Element. Damit legen Sie fest, was bei Fehlern in einer Anfrage innerhalb der Schleife passiert:

Option Verhalten
Ignorieren Mit der nächsten Anfrage fortfahren
Fortsetzen Restliche Anfragen des aktuellen Zyklus überspringen
Ausführung abbrechen Schleife beenden und danach fortfahren
Ausführung beenden Gesamtes Szenario stoppen

Wartezeit einfügen

Wenn ein nachgelagerter Dienst eine Schreiboperation nicht sofort sichtbar macht, fügen Sie ein Warten-Element ein. Die Verzögerung wird in Millisekunden angegeben.

Typischer Ablauf:

POST /orders
Warten: 500 ms
GET /orders/{id}
Enter fullscreen mode Exit fullscreen mode

Referenzen in Skripten verwenden

In Pre-Processor- und Post-Processor-Skripten funktioniert die Syntax {{variable}} nicht direkt. Verwenden Sie stattdessen pm.variables.get():

const token = pm.variables.get("$.2.response.body.token");
Enter fullscreen mode Exit fullscreen mode

Passen Sie Schritt-ID und Feldpfad an Ihr Szenario an. Mehr dazu finden Sie in den Artikeln zur Anfragenverkettung und zur API-Testorchestrierung und Datenübergabe.

Ein Szenario kann nicht das ursprüngliche Testszenario selbst referenzieren. Das verhindert versehentliche Endlosschleifen bei verschachtelten Szenarien.

Testszenario mit der Apidog CLI in CI ausführen

Das Szenario muss nicht ausschließlich in der Apidog-Oberfläche laufen. Mit der CLI können Sie gespeicherte Szenarien headless in einer CI-Pipeline ausführen.

Installieren Sie die CLI und melden Sie sich an:

npm install -g apidog-cli
apidog login --with-token <IHR_ACCESS_TOKEN>
Enter fullscreen mode Exit fullscreen mode

Führen Sie anschließend ein Testszenario mit Szenario-ID, Umgebung und Reporter aus:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t <szenario_id> -e <umgebungs_id> -r cli
Enter fullscreen mode Exit fullscreen mode

Die Parameter bedeuten:

Parameter Beschreibung
-t ID des Testszenarios
-e ID der Umgebung
-r Reporter

Für mehrere Reporter trennen Sie die Werte durch Kommas:

apidog run --access-token $APIDOG_ACCESS_TOKEN \
  -t <szenario_id> \
  -e <umgebungs_id> \
  -r html,cli
Enter fullscreen mode Exit fullscreen mode

Mögliche Reporter sind unter anderem:

  • cli für Konsolenausgabe
  • html für HTML-Artefakte
  • junit für Pipeline-kompatible Testergebnisse

Die Verzweigung verhält sich in CI genauso wie in der App: Der Runner liest die Login-Antwort, wählt den if- oder else-Pfad und liefert einen passenden Exit-Code.

Weiterführende Anleitungen:

FAQ

Was ist der Unterschied zwischen Bedingter Verzweigung und Schleife?

Eine Bedingte Verzweigung entscheidet einmal, ob ein Block ausgeführt wird. Eine Schleife wiederholt einen Block.

Verwenden Sie eine Verzweigung für Entscheidungen wie:

Nur Checkout ausführen, wenn Login erfolgreich war
Enter fullscreen mode Exit fullscreen mode

Verwenden Sie eine For- oder ForEach-Schleife für wiederholte Verarbeitung:

Jede Bestell-ID aus einem Array abrufen
Enter fullscreen mode Exit fullscreen mode

Weitere Beispiele finden Sie im ForEach-Schleifen-Tutorial.

Warum ist „Daten des vorherigen Schritts abrufen“ leer?

Es gibt zwei häufige Ursachen:

  1. Die Funktion steht nur im Modul Tests zur Verfügung, nicht im Modul APIs.
  2. Sie führen einen einzelnen Schritt statt des gesamten Szenarios aus.

Führen Sie das vollständige Szenario aus, damit Apidog die Antwort des vorherigen Schritts auflösen kann.

Kann ich auf ein Body-Feld statt auf den Statuscode verzweigen?

Ja. Referenzieren Sie beispielsweise ein Feld aus dem Login-Body:

{{$.1.response.body.status}}
Enter fullscreen mode Exit fullscreen mode

Danach verwenden Sie einen passenden Operator wie:

  • Ist gleich
  • Enthält
  • In Liste

Alternativ extrahieren Sie den Wert als benannte Variable. Details dazu finden Sie unter Übergeben von Daten zwischen Testschritten.

Wie verwende ich Werte in Skripten?

Die Syntax {{variable}} funktioniert nicht direkt in Skripten. Verwenden Sie stattdessen:

pm.variables.get("$.2.response.body.token");
Enter fullscreen mode Exit fullscreen mode

Passen Sie die Schritt-ID und den Feldpfad an Ihren Ablauf an.

Kosten Verzweigungen extra oder benötigen sie Self-Hosting?

Die Apidog-Dokumentation nennt keine separaten Planbeschränkungen für Flusskontrolle, bedingte Verzweigungen, Schleifen oder Datenübergabe. Ebenso wird für diese Funktionen keine Unterscheidung zwischen Cloud und Self-Hosting genannt.

Zusammenfassung

Lineare Tests zeigen oft nur, dass etwas fehlgeschlagen ist. Mit einer bedingten Verzweigung sehen Sie, wo der Fehler entstanden ist, und vermeiden unnötige Folgeanfragen.

Der praktische Ablauf lautet:

  1. Login-Anfrage hinzufügen.
  2. Bedingte Verzweigung einfügen.
  3. Login-Status oder Body-Feld aus dem vorherigen Schritt referenzieren.
  4. Checkout im if-Pfad ausführen.
  5. Fehler im else-Pfad sichtbar machen.
  6. Dasselbe Szenario mit apidog run in CI ausführen.

Teste Apidog kostenlos und erweitere lineare API-Tests um Szenarien, die auf echte API-Antworten reagieren.

Top comments (0)