Automatisierte API-Tests in Azure Pipelines ausführen: Schritt-für-Schritt-Anleitung

Führen Sie automatisierte API-Tests in Azure Pipelines Schritt für Schritt aus: Entwerfen Sie Szenarien in Apidog, lösen Sie diese mit der Apidog CLI aus und lassen Sie den Build bei Regressionen fehlschlagen.

Ashley Innocent

Ashley Innocent

15 June 2026

Automatisierte API-Tests in Azure Pipelines ausführen: Schritt-für-Schritt-Anleitung

enterprise.banner.title

enterprise.banner.feature1

enterprise.banner.feature2

enterprise.banner.feature3

enterprise.banner.ctaB

Ihre API funktioniert auf Ihrem Laptop. Sie besteht jede Prüfung in Ihrem lokalen Testclient. Dann führt ein Teamkollege einen Branch zusammen, das Deployment wird durchgeführt, und ein Endpunkt, der zuvor 200 zurückgab, liefert in der Produktion 500. Niemand hat es bemerkt, weil niemand die Tests auf diesem Branch ausgeführt hat. Sie wurden einmal manuell auf einer Maschine ausgeführt.

Diese Lücke zwischen „Tests existieren“ und „Tests werden bei jeder Änderung ausgeführt“ schließt eine CI-Pipeline. Wenn Ihr Code bereits in Azure Repos oder GitHub liegt und Ihr Team auf Azure DevOps aufbaut, ist Azure Pipelines der natürliche Ort, um dieses Sicherheitsnetz zu platzieren. Der schwierige Teil ist selten das YAML. Es geht darum, Ihre API-Testsuite in eine Form zu bringen, die die Pipeline headless, mit der richtigen Umgebung, gegen einen frisch deployten Build ausführen kann und dann den Build lautstark fehlschlagen lässt, wenn etwas kaputtgeht.

Button

TL;DR

Was „automatisiertes API-Testen in Azure Pipelines“ wirklich bedeutet

Azure Pipelines ist der CI/CD-Dienst innerhalb von Azure DevOps. Sie beschreiben einen Build in einer YAML-Datei (azure-pipelines.yml), die in Ihrem Repository liegt, und Azure führt diese Datei auf einem gehosteten oder selbst gehosteten Agent aus, jedes Mal wenn ein Trigger ausgelöst wird; ein Push, ein Pull Request, ein Zeitplan oder ein manueller Lauf.

Für API-Tests ist die Aufgabe im Wesentlichen unkompliziert:

  1. Einen Agent starten (eine saubere VM).
  2. Alles installieren, was Ihr Test-Runner benötigt.
  3. Die API-Tests gegen eine Zielumgebung ausführen.
  4. Die Ergebnisse melden und den Build-Status entsprechend festlegen.

Das Detail, das die Leute stolpern lässt, ist Schritt 3. Ein lokaler API-Client ist interaktiv; Sie klicken auf „Senden“, Sie überprüfen die Antwort visuell, Sie sehen einen grünen Haken. Eine Pipeline hat niemanden zum Klicken und niemanden zum visuellen Überprüfen. Sie benötigen eine Möglichkeit, dieselben Assertionen ohne menschliche Interaktion und ohne GUI auszuführen. Das ist der ganze Grund, warum ein Kommandozeilen-Runner existiert.

Wenn Sie eine umfassendere Einführung in die hier verwendeten CI-Konzepte wünschen, lohnt es sich, den Unterschied zwischen Continuous Integration, Continuous Delivery und Continuous Deployment kurz zu lesen, bevor Sie Ihre erste Pipeline einrichten.

Warum Tests in Apidog entwerfen und mit der CLI ausführen

Sie könnten API-Tests in rohem Code schreiben. Wählen Sie eine Sprache, integrieren Sie eine HTTP-Bibliothek und ein Assertion-Framework, erstellen Sie Anforderungsbodies manuell, parsen Sie Antworten, verwalten Sie Auth-Token und halten Sie all dies mit einer API synchron, die sich jeden Sprint ändert. Teams tun dies. Sie verbringen aber auch einen unverhältnismäßig großen Teil ihrer Zeit mit der Wartung.

Apidog geht einen anderen Weg. Sie erstellen Testszenarien visuell: Ketten Sie Anfragen aneinander, übergeben Sie Daten von einer Antwort an die nächste Anfrage, fügen Sie Assertionen für Statuscodes, Header und JSON-Felder hinzu und steuern Sie dasselbe Szenario mit mehreren Datenzeilen. Da Apidog bereits Ihre API-Definitionen enthält, bleiben die Tests nah an der Spezifikation. Wenn sich das Schema ändert, sehen Sie die Abweichung, anstatt sie erst in der Produktion zu entdecken.

Das Element, das diese visuelle Arbeit mit CI verbindet, ist die Apidog CLI, ein auf npm veröffentlichter Kommandozeilen-Runner. Sie führt ein gespeichertes Testszenario headless aus und beendet sich mit einem Statuscode, der das Ergebnis widerspiegelt: 0, wenn alles bestanden wurde, und ungleich Null, wenn eine Assertion fehlgeschlagen ist. Dieser Exit-Code ist der Vertrag, den jedes CI-System versteht. Azure Pipelines liest ihn und entscheidet, ob der Build grün oder rot ist. Sie entwerfen einmal in der GUI, und dasselbe Szenario läuft unverändert in der Pipeline.

Dies ist dasselbe Modell, das für GitHub Actions, GitLab CI und Jenkins funktioniert. Azure Pipelines ist lediglich ein weiterer Host für denselben CLI-Befehl, was bedeutet, dass sich das Wissen überträgt, falls Ihr Team jemals die Plattform wechselt.

Voraussetzungen

Ein kurzer Hinweis dazu, welche Zielumgebung getestet werden soll. Die Ausführung der Suite gegen die Produktion bei jedem Commit ist riskant und oft unmöglich (Sie möchten keine Testdaten in der Produktion). Die meisten Teams richten CI-Tests auf eine Staging-Umgebung oder ein pro-Branch-Vorschau-Deployment aus. Apidog-Umgebungen machen dies sauber: Halten Sie eine Staging-Umgebung mit ihrer eigenen Basis-URL und Variablen bereit und teilen Sie der CLI zur Laufzeit mit, welche davon zu verwenden ist.

Schritt 1: Ihr Testszenario in eine ausführbare Form bringen

Die CLI muss wissen, welches Szenario ausgeführt werden soll. Apidog bietet Ihnen zwei Möglichkeiten, dies zu übermitteln.

Option A, Ausführung über einen freigegebenen Online-Link. Öffnen Sie in Apidog Ihr Testszenario, wählen Sie die Ausführung über die CLI, und Apidog generiert einen Befehl, der über das Netzwerk auf das Szenario verweist. Dies ist die wartungsärmere Option: Die Pipeline führt immer die aktuelle Version des Szenarios aus, und Sie müssen keine Testdateien ins Repository committen. Der Kompromiss ist, dass die Pipeline davon abhängt, dass dieser Link zur Laufzeit erreichbar ist.

Option B, das Szenario in eine Datei exportieren und committen. Exportieren Sie das Szenario (und seine Umgebung) in eine lokale Datei, committen Sie es zusammen mit Ihrem Code und lassen Sie die CLI auf den Dateipfad zeigen. Dies bindet den Test an einen bestimmten Commit, was Sie wünschen, wenn Ihnen Reproduzierbarkeit wichtig ist; die ausgeführten Tests sind genau die Tests in diesem Commit. Der Kompromiss ist, dass Sie neu exportieren müssen, wenn sich das Szenario ändert.

Für die meisten Teams, die beginnen, ist Option A schneller einzurichten. Bei regulierten oder audit-intensiven Arbeiten gewinnt die Reproduzierbarkeit von Option B. Sie können auch mischen: Link-basiert für sich schnell ändernde Feature-Branches, dateibasiert für Release-Branches.

In jedem Fall notieren Sie den genauen Ausführungsbefehl, den Apidog Ihnen gibt. Er wird ungefähr so aussehen:

apidog run https://api.apidog.com/api/v1/test-scenarios/<scenario-id> \
 -t <access-token> \
 -e <environment-id>

Die Flags, die Sie am häufigsten verwenden werden:

Bestätigen Sie die genauen Flag-Namen anhand des Ausführungsbefehls, den Apidog für Ihr Szenario generiert; der Runner gibt die Verwendung mit apidog run --help aus. Raten Sie nicht bei den Flags; kopieren Sie die, die Apidog Ihnen gibt, und parametrisieren Sie die Geheimnisse.

Schritt 2: Überprüfen Sie zuerst, ob die CLI lokal funktioniert

Debuggen Sie ein neues Tool niemals innerhalb von CI. Pipeline-Feedback-Loops sind langsam und die Logs sind lauter als Ihr Terminal. Führen Sie zuerst einen erfolgreichen Durchlauf auf Ihrem eigenen Rechner aus.

Installieren Sie die CLI:

npm install -g apidog-cli

Führen Sie dann Ihr Szenario aus:

apidog run https://api.apidog.com/api/v1/test-scenarios/<scenario-id> \
 -t "$APIDOG_ACCESS_TOKEN" \
 -e "<staging-environment-id>"

Sie überprüfen drei Dinge:

  1. Der Befehl wird beendet und gibt eine Zusammenfassung des Erfolgs/Fehlers aus.
  2. Der Exit-Code stimmt mit dem Ergebnis überein. Führen Sie direkt danach echo $? aus; er sollte bei Erfolg 0 und bei Fehler ungleich Null sein.
  3. Die Umgebung wurde korrekt aufgelöst; die Anfragen treffen Ihre Staging-URL, nicht eine verbleibende lokale.

Diese Exit-Code-Überprüfung ist wichtiger, als es scheint. Wenn die CLI 0 zurückgibt, selbst wenn eine Assertion fehlschlägt, wird Ihre Pipeline bei defektem Code als erfolgreich angezeigt, was schlimmer ist, als überhaupt keine Tests zu haben. Erzwingen Sie einmal einen Fehler (brechen Sie absichtlich eine Assertion) und bestätigen Sie, dass Sie einen Code ungleich Null erhalten. Setzen Sie dann die Assertion wieder zurück.

Schritt 3: Erstellen Sie das Azure Pipelines YAML

Fügen Sie eine Datei namens azure-pipelines.yml zum Stammverzeichnis Ihres Repositorys hinzu. Dies ist ein vollständiger, funktionierender Ausgangspunkt für einen gehosteten Ubuntu-Agent:

trigger:
 branches:
 include:
 - main
 - develop

pr:
 branches:
 include:
 - main

pool:
 vmImage: ubuntu-latest

variables:
 NODE_VERSION: '20.x'

steps:
 - task: NodeTool@0
 inputs:
 versionSpec: $(NODE_VERSION)
 displayName: 'Install Node.js'

 - script: npm install -g apidog-cli
 displayName: 'Install Apidog CLI'

 - script: |
 apidog run https://api.apidog.com/api/v1/test-scenarios/$(SCENARIO_ID) \
 -t $(APIDOG_ACCESS_TOKEN) \
 -e $(STAGING_ENV_ID)
 displayName: 'Run API tests'

Gehen wir es durch:

Die $(...)-Referenzen sind Pipeline-Variablen. SCENARIO_ID, STAGING_ENV_ID und insbesondere APIDOG_ACCESS_TOKEN stammen aus dem nächsten Schritt und sind hier nicht fest kodiert.

Schritt 4: Geheimnisse richtig speichern

Ihr Zugriffstoken darf niemals im Klartext im YAML stehen. Jeder, der Lesezugriff auf das Repository hat, würde es sehen, und es gewährt Zugriff auf Ihr Apidog-Projekt.

Verwenden Sie eine geheime Pipeline-Variable:

  1. Öffnen Sie in Azure DevOps Ihre Pipeline und wählen Sie Bearbeiten, dann Variablen (oder Bibliothek für eine freigegebene Variablengruppe).
  2. Fügen Sie APIDOG_ACCESS_TOKEN hinzu und fügen Sie den Token ein.
  3. Schalten Sie das Schlosssymbol um, um es als geheim zu markieren. Azure verschlüsselt es und maskiert es in den Protokollen.

Geheime Variablen werden nicht automatisch in die Shell-Umgebung injiziert; Sie ordnen sie explizit im Schritt zu. Aktualisieren Sie den Ausführungsschritt, um das Geheimnis über env zu übergeben:

 - script: |
 apidog run https://api.apidog.com/api/v1/test-scenarios/$(SCENARIO_ID) \
 -t $(APIDOG_ACCESS_TOKEN) \
 -e $(STAGING_ENV_ID)
 displayName: 'Run API tests'
 env:
 APIDOG_ACCESS_TOKEN: $(APIDOG_ACCESS_TOKEN)

SCENARIO_ID und STAGING_ENV_ID müssen nicht geheim sein; behandeln Sie sie als einfache Variablen zur besseren Lesbarkeit oder verschieben Sie sie in eine Variablengruppe, die Sie pipelineübergreifend wiederverwenden. Für Teams, die viele Geheimnisse verwalten, sichern Sie die Variablengruppe mit Azure Key Vault, damit die Rotation an einem zentralen Ort erfolgt.

Schritt 5: Einen lesbaren Testbericht veröffentlichen

Ein roter Build sagt Ihnen, dass etwas kaputt ist. Er sagt Ihnen nicht, was. Die Lösung besteht darin, dass die CLI einen Bericht ausgibt und Azure diesen sichtbar macht.

Die Apidog CLI kann ihre Ergebnisse in eine Berichtsdatei schreiben. Verweisen Sie sie auf ein Ausgabeformat (HTML für Menschen, ein JUnit-ähnliches XML, wenn Sie Azures native Testansicht wünschen) und ein Ausgabeverzeichnis, und veröffentlichen Sie dann dieses Verzeichnis.

Für ein menschenlesbares Artefakt:

 - script: |
 apidog run https://api.apidog.com/api/v1/test-scenarios/$(SCENARIO_ID) \
 -t $(APIDOG_ACCESS_TOKEN) \
 -e $(STAGING_ENV_ID) \
 -r html \
 --out-dir $(Build.ArtifactStagingDirectory)/api-report
 displayName: 'Run API tests'
 env:
 APIDOG_ACCESS_TOKEN: $(APIDOG_ACCESS_TOKEN)

 - task: PublishBuildArtifacts@1
 condition: always()
 inputs:
 pathToPublish: $(Build.ArtifactStagingDirectory)/api-report
 artifactName: api-test-report
 displayName: 'Publish API test report'

Zwei Dinge sind zu beachten. Erstens bewirkt condition: always(), dass der Veröffentlichungsschritt auch dann ausgeführt wird, wenn der Testschritt fehlschlägt; das ist der ganze Sinn, da Sie den Bericht am meisten wünschen, wenn etwas kaputtgegangen ist. Zweitens überprüfen Sie das genaue Reporter-Flag (-r, --reporter oder ähnlich) und die Ausgabeoption anhand von apidog run --help für Ihre CLI-Version und passen Sie dann das Beispiel entsprechend an.

Wenn Sie Ergebnisse lieber im integrierten Test-Tab von Azure mit Trenddiagrammen sehen möchten, lassen Sie die CLI JUnit XML ausgeben und fügen Sie einen PublishTestResults@2-Task hinzu, der auf das XML verweist. Das gibt Ihnen eine Assertions-Historie über mehrere Builds hinweg, nicht nur eine einmalige Datei.

Schritt 6: Das Gate real machen

Das Einrichten der Pipeline ist nicht dasselbe wie ihre Durchsetzung. Standardmäßig hindert ein fehlerhafter Build niemanden am Zusammenführen, es sei denn, Sie weisen Azure DevOps an, dies zu erzwingen.

Richten Sie eine Branch-Richtlinie für main ein:

  1. Gehen Sie zu Repos, dann Branches, suchen Sie main und öffnen Sie die Branch-Richtlinien.
  2. Fügen Sie Build-Validierung hinzu und wählen Sie Ihre Pipeline aus.
  3. Setzen Sie es auf erforderlich.

Nun kann ein Pull Request nicht in main zusammengeführt werden, bevor die API-Testpipeline bestanden wurde. Das ist der Unterschied zwischen Tests, die ausgeführt werden, und Tests, die schützen. Bis Sie dies einschalten, haben Sie ein Dashboard; danach haben Sie ein Gate.

Ein realistisches datengesteuertes Beispiel

Einzelszenarien fangen offensichtliche Fehler ab. Echte APIs müssen denselben Endpunkt mit vielen Eingaben testen; gültige Payloads, Edge Cases, die fehlerhafte Anfrage, die 400 statt 500 zurückgeben sollte.

Apidog unterstützt datengesteuertes Testen: Hängen Sie einen CSV- oder JSON-Datensatz an ein Szenario an, und es wird einmal pro Zeile ausgeführt, wobei die Werte der Zeile in Anfragen und Assertionen eingesetzt werden. Ein Anmeldeszenario könnte beispielsweise Zeilen für einen gültigen Benutzer, ein falsches Passwort, ein gesperrtes Konto und einen leeren Body ausführen, jeweils mit seinem eigenen erwarteten Statuscode.

In der Pipeline ändert sich nichts an der Form des Befehls; Sie rufen apidog run weiterhin gegen dasselbe Szenario auf. Der Datensatz reist mit dem Szenario, sodass ein einziger CLI-Aufruf jede Zeile abdeckt. Wenn Sie einen neuen Edge Case in Apidog hinzufügen, wird dieser vom nächsten Pipeline-Lauf ohne YAML-Bearbeitung übernommen. Das ist der Vorteil, die Testlogik im Tool statt in der Pipeline zu halten: Die Pipeline bleibt langweilig, während Ihre Abdeckung wächst.

Häufige Probleme und deren Behebung

Jenseits der Grundlagen

Sobald die Kern-Pipeline solide ist, zahlen sich einige Erweiterungen aus:

Jede dieser Erweiterungen ist eine kleine Ergänzung zur selben Grundlage: eine CLI, die sauber beendet wird, und eine Pipeline, die den Exit-Code respektiert.

Häufig gestellte Fragen

Zusammenfassung

Ein grüner CI-Build sollte bedeuten, dass Ihre API tatsächlich funktioniert, nicht nur, dass der Code kompiliert wurde. Dies in Azure Pipelines zu erreichen, läuft auf vier Schritte hinaus: Entwerfen Sie echte Testszenarien in Apidog, führen Sie sie headless mit der Apidog CLI aus, lassen Sie den Exit-Code den Build-Status steuern und verlangen Sie, dass der Build bestanden wird, bevor etwas zusammengeführt wird. Sobald dieser Kreislauf läuft, erhält jeder Push dieselbe sorgfältige Prüfung, die Ihr sorgfältigster Teamkollege ihm geben würde, automatisch, jedes Mal.

Der Grund, warum dies wartbar bleibt, ist die Trennung. Die Testlogik lebt in Apidog, wo sie nah an Ihrer API-Spezifikation ist und einfach erweitert werden kann. Die Pipeline bleibt ein dünner Wrapper; installieren, ausführen, berichten. Wenn Ihre API wächst, fügen Sie Szenarien und Datenzeilen im Tool hinzu, und die Pipeline erledigt weiterhin ihre eine Aufgabe ohne Bearbeitungen.

Bereit zum Einrichten? Laden Sie Apidog herunter, erstellen Sie ein Testszenario, schnappen Sie sich den CLI-Ausführungsbefehl und fügen Sie ihn in Ihre azure-pipelines.yml ein. Ihre nächste Regression wird von einer Maschine abgefangen, anstatt von einem Kunden entdeckt zu werden.

Button

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen