Ein grüner Statuscode lügt. Ihr POST /orders-Endpunkt gibt 201 Created zurück, der Antworttext sieht perfekt aus, und Ihr Test besteht. Aber ist die Zeile tatsächlich mit dem richtigen Status in der Datenbank gelandet? Wurde der Lagerbestand reduziert? Ein Test, der nur die HTTP-Antwort liest, prüft, was die API gesagt hat, nicht was das System getan hat. Um diese Lücke zu schließen, müssen Sie sich die Datenbank selbst ansehen.
Hier kommen Datenbankabfragen innerhalb eines Testszenarios ins Spiel. Sie initialisieren einen bekannten Zustand vor einer Anfrage, senden die Anfrage und fragen dann die Tabelle ab, um die Wahrheit auf der Festplatte zu bestätigen. Apidog hat dies durch Datenbankverbindungen und den Datenbankoperationsprozessor integriert, sodass Sie SQL- oder NoSQL-Befehle als Schritte im selben Szenario ausführen können, das Ihre HTTP-Aufrufe steuert, ohne externe Skript-Verbindungen. Wenn Sie neu in der Erstellung von Szenarien sind, behandelt der Leitfaden zum Schreiben eines Testszenarios mit Apidog die Grundlagen auf Anforderungsebene, auf denen dieser Artikel aufbaut. Für eine Auffrischung, wie relationale Speicher diese Daten modellieren, ist MDNs server-seitige Übersicht eine solide Einführung.
Was Datenbankoperationen in einem Test Ihnen bringen
Ein API-Test, der niemals die Datenbank berührt, ist eine Black Box. Er vertraut der Antwort. Meistens ist das in Ordnung, aber die interessanten Fehler liegen in der Lücke zwischen dem, was die API zurückgibt, und dem, was sie speichert: ein Statusfeld, das sich nie ändert, ein Fremdschlüssel, der ins Leere zeigt, ein Soft-Delete, das ein Hard-Delete ist.
Datenbankschritte ermöglichen Ihnen drei Dinge, die ein reiner HTTP-Test nicht kann:
- Einen präzisen Startzustand initialisieren, damit ein Test nicht von übrig gebliebenen Daten abhängt.
- Gegen die Wahrheit prĂĽfen, indem die Zeile gelesen wird, die die API angeblich geschrieben hat.
- Einen realen Wert extrahieren aus der Datenbank und ihn in die nächste Anfrage einspeisen, sodass Ihr Test IDs verwendet, die der Server tatsächlich generiert hat, anstatt Schätzungen.
Apidog teilt diese Funktion in zwei Bereiche auf. Zuerst erstellen Sie eine wiederverwendbare Verbindung unter Einstellungen > Datenbankverbindungen. Dann fügen Sie einen Datenbankoperationsschritt als Pre-Processor (läuft vor der Anfrage) oder Post-Processor (läuft danach) zu einer Anfrage hinzu. Eine Verbindung, die in jedem Szenario des Projekts wiederverwendet wird.
Ein Hinweis zur Abdeckung, bevor Sie damit planen. MySQL, SQL Server (ab 2014), PostgreSQL und Oracle funktionieren im kostenlosen Plan. ClickHouse, MongoDB und Redis sind kostenpflichtig. Die MongoDB-Dokumentation besagt es klar: Die Verbindung zu MongoDB ist eine kostenpflichtige Funktion. Das Gleiche gilt für Redis. Der folgende MySQL-Walkthrough läuft also im kostenlosen Tarif; die Mongo- und Redis-Abschnitte erfordern einen kostenpflichtigen Plan.
Schritt 1: Eine Datenbankverbindung erstellen
Öffnen Sie Einstellungen > Datenbankverbindungen und klicken Sie oben rechts auf + Neu. Wählen Sie Ihren Datenbanktyp aus und füllen Sie dann die Verbindungsfelder aus:
- Host (zum Beispiel
db.staging.internaloder127.0.0.1) - Port (
3306fĂĽr MySQL) - Benutzername und Passwort
- Datenbankname (zum Beispiel
shop)

Wenn Ihre Datenbank hinter einem Bastion-Host liegt, erweitern Sie den Bereich SSH-Tunnel und fügen Sie die Details des Jump-Hosts hinzu. MySQL bietet auch einen SSL-Modus mit vier Optionen: Prefer (die Standardeinstellung, die SSL versucht und dann zurückfällt), Require, Verify CA und Verify Full. Wählen Sie die strengste Option, die Ihr Server unterstützt. Klicken Sie dann auf Speichern.
Zwei Verbindungsprobleme, die Ihnen einen verwirrten Nachmittag ersparen:
- MySQL 8 Authentifizierung. Das Standard-Plugin
caching_sha2_passwordkann die Verbindung ablehnen. Wenn Sie einen Authentifizierungsfehler erhalten, ändern Sie den Benutzer mitALTER USER 'tester'@'%' IDENTIFIED WITH mysql_native_password BY '...';und versuchen Sie es erneut. Das MySQL-Referenzhandbuch behandelt den Plugin-Unterschied ausführlich. - Anmeldeinformationen sind lokal. Verbindungsdetails werden auf Ihrem eigenen Computer gespeichert und nicht mit der Cloud synchronisiert. Jedes Teammitglied konfiguriert die Verbindung selbst. Wenn Sie ein Team koordinieren, erklären die Hinweise zum Teilen von Datenbankverbindungseinstellungen den Arbeitsablauf.
Schritt 2: Daten mit einem Pre-Processor initialisieren
Nehmen wir an, Sie testen den Bestellablauf. Sie möchten, dass ein bekannter Kunde existiert, bevor Sie eine Bestellung aufgeben, damit der Test nicht davon abhängt, was zufällig in der Tabelle ist.
Öffnen Sie Ihre Anfrage, suchen Sie Pre-Processors, bewegen Sie den Mauszeiger über Datenbankprozessor hinzufügen und wählen Sie Datenbankoperation. Nennen Sie es beispielsweise seed customer, wählen Sie Ihre MySQL-Verbindung aus und schreiben Sie dann unter SQL-Befehl eingeben einen Insert-Befehl. Dynamische Variablen verwenden die {{variable_name}}-Syntax, sodass Sie Werte direkt aus Ihrer Umgebung ziehen können:
INSERT INTO customers (id, email, status)
VALUES ({{customer_id}}, '{{customer_email}}', 'active')
ON DUPLICATE KEY UPDATE status = 'active';
Nun läuft die Anfrage gegen einen garantierten Zustand. Der Kunde existiert, ist aktiv und hat eine ID, die Ihre späteren Schritte bereits kennen. Das Initialisieren in einem Pre-Processor hält jeden Test eigenständig, anstatt sich auf Nebenwirkungen der Testreihenfolge zu verlassen.
Schritt 3: Gegen die Datenbank mit einem Post-Processor prĂĽfen
Hier ist der Kern. Ihre Anfrage erstellt eine Bestellung. Nachdem sie zurückkehrt, fragen Sie die Tabelle orders ab, um zu bestätigen, dass die Zeile mit dem richtigen Status existiert.
FĂĽgen Sie die Anfrage hinzu, die Ihre API aufruft:
POST /api/orders
Content-Type: application/json
{
"customer_id": {{customer_id}},
"items": [{ "sku": "APRON-01", "qty": 2 }]
}
Nehmen Sie an, der Antworttext enthält die neue Bestell-ID, die Sie mit einer normalen Antwortprüfung in einer Variable namens order_id erfassen. Öffnen Sie nun die Post-Processors dieser Anfrage. Im DESIGN-Modus finden Sie sie im Tab Ausführen; im DEBUG-Modus befinden sie sich im Tab Anfrage. Bewegen Sie den Mauszeiger über Post-Processor hinzufügen, wählen Sie Datenbankoperation, nennen Sie sie verify order row und wählen Sie Ihre Verbindung aus.
Wählen Sie unter Operation konfigurieren die Operation und geben Sie das SQL ein:
SELECT id, status, total_cents
FROM orders
WHERE id = {{order_id}};
Abfrageergebnisse kommen als Array von Objekten zurück, eines pro Zeile. Um ein einzelnes Feld zu extrahieren, öffnen Sie Ergebnisse extrahieren (Optional) und fügen Sie einen Eintrag Ergebnis in Variable extrahieren hinzu. Legen Sie einen Variablennamen wie db_order_status und einen JSONPath-Ausdruck fest, der das Feld aus der ersten Zeile isoliert:
$[0].status
Klicken Sie auf Senden und überprüfen Sie die Konsole, um das Roh-Ergebnis und den extrahierten Wert zu sehen. Nun enthält db_order_status das, was tatsächlich auf der Festplatte gespeichert ist. Fügen Sie eine Behauptung hinzu, dass es gleich pending ist (oder was auch immer Ihre API setzen soll), und Ihr Test überprüft schließlich die Persistenz, nicht nur das HTTP-Echo. Wenn die API 201 zurückgegeben, aber status = 'draft' geschrieben hat, ist dies der Schritt, der es erkennt.
Schritt 4: Einen Datenbankwert extrahieren und nachfolgend verwenden
Das Extrahieren ist nicht nur für Behauptungen gedacht. Oft enthält die Datenbank einen Wert, den die Antwort nie zurückgibt, und Sie benötigen ihn für die nächste Anfrage.
Stellen Sie sich einen Workflow vor, bei dem das Erstellen einer Bestellung auch eine interne fulfillment_ref auf dem Server generiert, die in die Zeile geschrieben, aber aus der API-Antwort weggelassen wird. Ihre nächste Anfrage, GET /api/fulfillments/{ref}, benötigt diese. Fragen Sie sie in einem Post-Processor ab:
SELECT fulfillment_ref
FROM orders
WHERE id = {{order_id}};
Extrahieren Sie sie mit dem Variablennamen fulfillment_ref und dem JSONPath-Ausdruck $[0].fulfillment_ref. Da Apidog diese Variable auf die Umgebung beschränkt, referenziert Ihre nächste Anfrage einfach {{fulfillment_ref}} in ihrem Pfad oder Body und übernimmt den realen, vom Server generierten Wert. Dies ist dasselbe Muster wie das Verketten von HTTP-Antworten, behandelt in Daten zwischen Testschritten übergeben und API-Testorchestration und Datenübergabe, außer dass die Quelle der Wahrheit eine Tabelle anstelle eines JSON-Bodys ist.
MongoDB und Redis: die NoSQL-Varianten
Der Prozessor funktioniert für NoSQL-Speicher auf die gleiche Weise, jedoch mit einer anderen Konfigurationsoberfläche. Beide sind kostenpflichtige Funktionen, planen Sie also entsprechend. Die Apidog-Dokumentation enthält die vollständige Feldreferenz, falls Sie sie benötigen.
MongoDB
Fügen Sie einen Datenbankoperationsschritt hinzu und wählen Sie MongoDB als Typ aus. Anstelle von reinem SQL erhalten Sie ein Dropdown-Menü Operationstyp mit Find, Insert, Update, Delete und Datenbankbefehl ausführen. Für jede CRUD-Aktion ist der Sammlungsname obligatorisch. Das Feld Abfragebedingung akzeptiert JSON:
{ "_id": "65486728456e79993a150f1c" }
Apidog konvertiert eine passende ID-Zeichenfolge automatisch in eine ObjectId, sodass Sie sie nicht selbst verpacken müssen. Wenn Sie BSON-Typen benötigen, werden die Hilfsfunktionen ISODate(...), ObjectId(...), NumberDecimal(...) und NumberLong(...) unterstützt; das MongoDB-Handbuch dokumentiert, wie jeder dieser Typen einem gespeicherten Wert zugeordnet wird. Die Verbindung akzeptiert entweder eine vollständige Verbindungszeichenfolge oder die einzelnen Host- und Anmeldekomponenten.
Ein ehrlicher Hinweis: Der MySQL-Workflow dokumentiert die JSONPath-Extraktion in eine Variable, aber die MongoDB- und Redis-Dokumentation beschreibt denselben Mechanismus Ergebnis in Variable extrahieren nicht. Verlassen Sie sich also auf Mongo-Operationen zum Initialisieren und Bestätigen des Zustands und gehen Sie nicht davon aus, dass der SQL-ähnliche Extraktionspfad identisch funktioniert, bis Sie ihn in der Konsole überprüft haben.
Redis
Die Redis-Verbindung fragt nach Host, Port, Passwort und Datenbankindex. Visuelle Operationen verwenden ein Operationstyp-Dropdown, das GET, SET und DELETE unterstützt. Um eine zwischengespeicherte Sitzung zu lesen, wählen Sie GET und setzen Sie den Schlüssel auf etwas wie user:session:123. Für alles, was das Dropdown nicht abdeckt, führt der Tab Redis-Befehl ausführen jeden gültigen Befehl aus:
KEYS user:*
So bestätigen Sie einen Cache-Eintrag, den die API schreiben sollte, oder löschen einen vor einem Test, um zu beweisen, dass der Endpunkt ihn neu befüllt.
Fortgeschrittene Variationen und Grenzen
Ein paar Dinge, die Sie wissen sollten, bevor Sie eine groĂźe Suite erstellen:
- Schleifen. Wenn Sie in einem ForEach-Schritt ĂĽber Zeilen iterieren, verweisen Sie auf das aktuelle Schleifenelement mit
{{$.StepID.element.field}}, wobeiStepIDdie tatsächliche Nummer des Schleifenschritts ist. Praktisch, um eine Zeile pro Iteration zu bestätigen. - Verzweigung basierend auf einem DB-Wert. Extrahieren Sie ein Statusfeld und leiten Sie dann den Rest des Szenarios darauf weiter. Die Kombination von Datenbanklesevorgängen mit bedingter Logik in API-Testszenarien ermöglicht es einem Test, einen Pfad zu nehmen, wenn die Zeile
paidist, und einen anderen, wenn siependingist. - Umgebungs-Routing. Mehr dazu unten, aber die Kurzversion: Definieren Sie eine Verbindung pro Umgebung, und Apidog wählt automatisch die richtige aus.
- Gespeicherte Prozeduren. Die visuelle Oberfläche unterstützt keine komplexen Operationen wie gespeicherte Prozeduren. Halten Sie das SQL in Ihren Schritten auf einfache Anweisungen beschränkt.
- Oracle-Setup. Oracle benötigt einen separaten Oracle Client, der auf Ihrem Computer installiert ist, bevor überhaupt eine Verbindung hergestellt werden kann.
Anmeldeinformationen pro Umgebung verwalten
Sie möchten niemals, dass ein Test versehentlich auf Produktionsdaten zugreift. Apidogs Antwort ist eine Datenbankverbindung pro Umgebung. Sie erstellen eine staging-Verbindung und eine local-Verbindung, jede mit eigenem Host und Passwort.
Dann wechseln Sie die Umgebungen über das Dropdown-Menü oben rechts. Apidog leitet automatisch jede Abfrage im Szenario an die Verbindung weiter, die der aktuell ausgewählten Umgebung entspricht. Wählen Sie staging und Ihr SELECT läuft gegen Staging; wechseln Sie zu local und derselbe Schritt läuft gegen die Datenbank Ihres Laptops, ohne Bearbeitung des SQL oder des Schritts. Anmeldeinformationen unterscheiden sich pro Umgebung ohne manuelle Neukonfiguration während des Laufs.
Da diese Anmeldeinformationen lokal gespeichert und nicht synchronisiert werden, bleiben Produktionspasswörter auch außerhalb des gemeinsam genutzten Cloud-Projekts. Jeder Ingenieur verwaltet seine eigenen.
Den Workflow mit der Apidog CLI automatisieren
Sobald das Szenario in der App erfolgreich ist, fĂĽhren Sie es kopflos in CI aus, damit jeder Pull Request die Datenbank neu ĂĽberprĂĽft, nicht nur den HTTP-Vertrag. Installieren Sie die CLI und authentifizieren Sie sich:
npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
Führen Sie dann das exakt erstellte Szenario, anhand seiner ID, gegen eine ausgewählte Umgebung aus:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
Hier ist -t die ID des Testszenarios, -e die Umgebungs-ID und -r der Reporter (cli, html oder junit; durch Kommas trennen für mehrere, z.B. -r html,cli). Eine Sache, die Sie beachten sollten: Die Datenbankverbindungsdetails sind lokal, daher benötigt der Runner die exportierte Konfiguration, um Ihre Datenbank von CI aus zu erreichen. Wenn Sie die Szenariozeilen aus einem Datensatz speisen, zeigt datengetriebenes Testen mit der Apidog CLI, wie jede Zeile dieselben Datenbankprüfungen ausführt, und API-Tests mit Apidog planen behandelt das Ausführen in regelmäßigen Abständen, sodass eine fehlerhafte Datenbankprüfung wie jeder andere Test auftaucht.
Häufig gestellte Fragen
Welche Datenbanken sind kostenlos und welche kostenpflichtig? MySQL, SQL Server (ab 2014), PostgreSQL und Oracle sind im kostenlosen Plan enthalten. ClickHouse, MongoDB und Redis benötigen einen kostenpflichtigen Plan. Die MongoDB- und Redis-Dokumentation besagen beide, dass ihre Konnektivität eine kostenpflichtige Funktion ist, überprüfen Sie daher die Preisliste, bevor Sie eine NoSQL-Suite planen. Laden Sie Apidog herunter, um zuerst die kostenlosen Datenbanken auszuprobieren.
Kann ich einen Wert aus der Datenbank in einer späteren Anfrage verwenden? Ja. Fügen Sie einen Post-Processor mit einer Datenbankoperation hinzu, führen Sie ein SELECT aus und verwenden Sie dann „Ergebnis in Variable extrahieren“ mit einem Variablennamen und einem JSONPath-Ausdruck wie $[0].fulfillment_ref, um das Feld aus der ersten Zeile zu isolieren. Verweisen Sie später darauf als {{variable_name}}. Die gleiche Verkettungsidee für HTTP-Antworten wird unter Daten zwischen Testschritten übergeben behandelt.
Erhalten meine Teamkollegen automatisch meine Datenbankverbindungen? Nein. Verbindungsdaten werden lokal auf jedem Client gespeichert und nicht mit der Cloud synchronisiert, sodass jedes Teammitglied die Verbindung selbst konfiguriert. Dies ist beabsichtigt: Es hält Produktionspasswörter aus dem geteilten Projekt heraus.
Meine MySQL 8-Verbindung schlägt ständig fehl. Warum? MySQL 8 verwendet standardmäßig das Authentifizierungs-Plugin caching_sha2_password, das die Verbindung blockieren kann. Wechseln Sie den Benutzer auf mysql_native_password mit ALTER USER ... IDENTIFIED WITH mysql_native_password und stellen Sie die Verbindung erneut her.
Kann ich gespeicherte Prozeduren oder komplexe Datenbanklogik ausführen? Nicht über die visuelle Oberfläche. Diese unterstützt Standard-SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen, aber komplexe Operationen wie gespeicherte Prozeduren werden nicht unterstützt. Halten Sie Ihre Testschritte auf direkte Anweisungen beschränkt.
Zusammenfassung
Datenbankabfragen verwandeln einen API-Test von „die Antwort sah richtig aus“ in „die Daten sind tatsächlich korrekt“. Initialisieren Sie einen bekannten Zustand in einem Pre-Processor, überprüfen Sie die persistent gespeicherte Zeile in einem Post-Processor und extrahieren Sie vom Server generierte Werte, um sie in die nächste Anfrage einzuketten – alles innerhalb eines Szenarios. Richten Sie eine Verbindung pro Umgebung ein, und dieselben Schritte laufen sicher gegen Staging oder lokal ohne Bearbeitungen.
Kostenlos testen, keine Kreditkarte erforderlich: Apidog herunterladen, eine MySQL-Verbindung auf Ihre Entwicklungsdatenbank richten und einen Post-Processor hinzufügen, der die Zeile, die Ihre nächste Anfrage erstellt, wieder ausliest.
