Ein grüner Statuscode kann täuschen: Ihr POST /orders-Endpunkt liefert 201 Created, der Response-Body sieht korrekt aus und der HTTP-Test besteht. Aber wurde die Bestellung wirklich mit dem richtigen Status gespeichert? Wurde der Lagerbestand reduziert? Ein Test, der nur die HTTP-Antwort prüft, validiert, was die API gesagt hat – nicht, was das System getan hat. Datenbankabfragen im Testszenario schließen genau diese Lücke.
Sie initialisieren vor einer Anfrage einen definierten Zustand, senden den API-Request und lesen anschließend die Datenbank aus. So bestätigen Sie, dass die erwartete Änderung tatsächlich persistiert wurde. Apidog unterstützt Datenbankverbindungen und Datenbankoperationen direkt im Testszenario: SQL- oder NoSQL-Befehle laufen als Schritte neben Ihren HTTP-Aufrufen – ohne externe Skripte. Wenn Sie Szenarien erst einrichten, behandelt der Leitfaden zum Schreiben eines Testszenarios mit Apidog die Grundlagen. Für relationale Datenbanken bietet MDNs server-seitige Übersicht eine Einführung.
Was Datenbankoperationen im Test bringen
Ein reiner HTTP-Test ist eine Black Box: Er vertraut der API-Antwort. Kritische Fehler liegen jedoch oft zwischen Response und Persistenz:
- Ein Statusfeld wird nicht aktualisiert.
- Ein Fremdschlüssel verweist auf keinen Datensatz.
- Ein erwartetes Soft-Delete wird versehentlich als Hard-Delete ausgeführt.
- Eine Cache- oder Bestandsänderung bleibt aus.
Datenbankschritte ergänzen drei wichtige Fähigkeiten:
- Startzustand initialisieren: Jeder Test beginnt mit kontrollierten Daten statt mit Restdaten aus vorherigen Läufen.
- Persistenz prüfen: Lesen Sie exakt die Zeile, die Ihre API geschrieben haben soll.
- Reale Werte weiterreichen: Extrahieren Sie Datenbankwerte und verwenden Sie sie in nachfolgenden Requests.
In Apidog besteht der Ablauf aus zwei Teilen:
- Erstellen Sie unter Einstellungen > Datenbankverbindungen eine wiederverwendbare Verbindung.
- Fügen Sie einer Anfrage eine Datenbankoperation als Pre-Processor oder Post-Processor hinzu.
Plan-Hinweis: MySQL, SQL Server ab 2014, PostgreSQL und Oracle funktionieren im kostenlosen Plan. ClickHouse, MongoDB und Redis sind kostenpflichtig. Der folgende MySQL-Ablauf funktioniert daher im kostenlosen Tarif.
Schritt 1: Datenbankverbindung erstellen
Öffnen Sie Einstellungen > Datenbankverbindungen und klicken Sie auf + Neu. Wählen Sie den Datenbanktyp und hinterlegen Sie:
-
Host, etwa
db.staging.internaloder127.0.0.1 -
Port, für MySQL typischerweise
3306 - Benutzername und Passwort
-
Datenbankname, etwa
shop
Liegt Ihre Datenbank hinter einem Bastion Host, konfigurieren Sie den Bereich SSH-Tunnel mit den Daten des Jump Hosts.
Für MySQL stehen außerdem SSL-Modi zur Verfügung:
-
Prefer: versucht SSL und fällt bei Bedarf zurück RequireVerify CAVerify Full
Verwenden Sie die strengste Option, die Ihr Server unterstützt, und klicken Sie anschließend auf Speichern.
Häufige Verbindungsprobleme
-
MySQL-8-Authentifizierung: Das Standard-Plugin
caching_sha2_passwordkann Verbindungen verhindern. Bei Authentifizierungsfehlern kann ein Benutzer aufmysql_native_passwordumgestellt werden:
ALTER USER 'tester'@'%'
IDENTIFIED WITH mysql_native_password BY '...';
Details dazu finden Sie im MySQL-Referenzhandbuch.
- Verbindungsdaten sind lokal: Datenbankverbindungen werden auf dem jeweiligen Rechner gespeichert und nicht mit der Cloud synchronisiert. Jedes Teammitglied konfiguriert seine Verbindung selbst. Der Workflow ist im Beitrag zum Teilen von Datenbankverbindungseinstellungen beschrieben.
Schritt 2: Testdaten mit einem Pre-Processor initialisieren
Angenommen, Sie testen einen Bestellablauf. Vor dem Request soll ein definierter, aktiver Kunde existieren.
Öffnen Sie die Anfrage und fügen Sie unter Pre-Processors eine Datenbankoperation hinzu:
- Bewegen Sie den Mauszeiger über Datenbankprozessor hinzufügen.
- Wählen Sie Datenbankoperation.
- Benennen Sie den Schritt, etwa
seed customer. - Wählen Sie Ihre MySQL-Verbindung.
- Fügen Sie den SQL-Befehl ein.
INSERT INTO customers (id, email, status)
VALUES ({{customer_id}}, '{{customer_email}}', 'active')
ON DUPLICATE KEY UPDATE status = 'active';
Die Syntax {{variable_name}} verwendet Werte aus Ihrer Umgebung. Der Test startet damit immer mit demselben fachlichen Zustand:
- Der Kunde existiert.
- Der Kunde ist aktiv.
- Die Kunden-ID ist für alle Folgeschritte bekannt.
Damit wird der Test unabhängig von Ausführungsreihenfolge und Altlasten in der Datenbank.
Schritt 3: Persistierte Daten mit einem Post-Processor prüfen
Jetzt folgt der zentrale Schritt: Ihre API legt eine Bestellung an, und der Test liest danach die Tabelle orders, um den gespeicherten Zustand zu validieren.
Beispielrequest:
POST /api/orders
Content-Type: application/json
{
"customer_id": {{customer_id}},
"items": [{ "sku": "APRON-01", "qty": 2 }]
}
Nehmen wir an, Sie extrahieren die Bestell-ID aus dem Response-Body in die Variable order_id.
Fügen Sie anschließend unter Post-Processors eine Datenbankoperation hinzu:
- Im DESIGN-Modus finden Sie Post-Processors im Tab Ausführen.
- Im DEBUG-Modus finden Sie sie im Tab Anfrage.
- Benennen Sie den Schritt beispielsweise
verify order row.
Verwenden Sie diese Abfrage:
SELECT id, status, total_cents
FROM orders
WHERE id = {{order_id}};
Das Ergebnis ist ein Array von Objekten, also eine Struktur wie:
[
{
"id": 42,
"status": "pending",
"total_cents": 4990
}
]
Um den Status weiterzuverwenden:
- Öffnen Sie Ergebnisse extrahieren (Optional).
- Fügen Sie Ergebnis in Variable extrahieren hinzu.
- Verwenden Sie als Variablenname
db_order_status. - Setzen Sie diesen JSONPath-Ausdruck:
$[0].status
Prüfen Sie nach dem Ausführen die Konsole. Sie sehen dort das Roh-Ergebnis sowie den extrahierten Wert. Anschließend fügen Sie eine Assertion hinzu:
db_order_status == pending
Damit erkennt Ihr Test auch Fälle, in denen die API zwar 201 Created zurückgibt, aber beispielsweise status = 'draft' in die Datenbank schreibt.
Schritt 4: Datenbankwerte in nachfolgenden Requests verwenden
Datenbankabfragen eignen sich nicht nur für Assertions. Sie können auch Werte lesen, die Ihre API nicht im Response zurückgibt.
Beispiel: Beim Erstellen einer Bestellung generiert der Server eine interne fulfillment_ref. Sie wird in orders gespeichert, fehlt aber in der API-Antwort. Der nächste Request benötigt diesen Wert:
SELECT fulfillment_ref
FROM orders
WHERE id = {{order_id}};
Extrahieren Sie das Ergebnis als:
-
Variablenname:
fulfillment_ref -
JSONPath:
$[0].fulfillment_ref
Verwenden Sie die Variable anschließend direkt im nächsten Request:
GET /api/fulfillments/{{fulfillment_ref}}
Das ist dasselbe Grundprinzip wie beim Verketten von HTTP-Responses, aber die Datenquelle ist hier die persistierte Datenbank. Weitere Beispiele finden Sie unter Daten zwischen Testschritten übergeben und API-Testorchestration und Datenübergabe.
MongoDB und Redis: NoSQL-Varianten
MongoDB und Redis verwenden denselben grundlegenden Ablauf: Verbindung erstellen, Datenbankoperation als Pre- oder Post-Processor ausführen, Ergebnis prüfen.
Beide Integrationen sind kostenpflichtig. Die vollständige Feldreferenz finden Sie in der Apidog-Dokumentation.
MongoDB
Wählen Sie in der Datenbankoperation MongoDB. Statt SQL verwenden Sie den Operationstyp:
- Find
- Insert
- Update
- Delete
- Datenbankbefehl ausführen
Für CRUD-Operationen ist der Sammlungsname erforderlich. Die Abfragebedingung erwartet JSON:
{ "_id": "65486728456e79993a150f1c" }
Eine passende ID-Zeichenfolge wird automatisch in eine ObjectId umgewandelt. Für BSON-Typen werden unter anderem diese Hilfsfunktionen unterstützt:
ISODate(...)
ObjectId(...)
NumberDecimal(...)
NumberLong(...)
Details zu den Typen beschreibt das MongoDB-Handbuch.
Der MySQL-Ablauf dokumentiert die JSONPath-Extraktion in Variablen. Bei MongoDB und Redis wird derselbe Mechanismus nicht explizit beschrieben. Verifizieren Sie die Ergebnisse daher zunächst in der Konsole, bevor Sie sich auf identisches Extraktionsverhalten verlassen.
Redis
Für eine Redis-Verbindung konfigurieren Sie:
- Host
- Port
- Passwort
- Datenbankindex
Die visuelle Oberfläche unterstützt die Operationen:
- GET
- SET
- DELETE
Um eine Cache-Session zu prüfen, wählen Sie GET und verwenden etwa diesen Schlüssel:
user:session:123
Für weitere Redis-Kommandos verwenden Sie den Tab Redis-Befehl ausführen:
KEYS user:*
Damit können Sie beispielsweise einen Cache-Eintrag vor einem Test löschen und danach prüfen, ob der API-Endpunkt ihn neu angelegt hat.
Fortgeschrittene Variationen und Grenzen
Beachten Sie diese Punkte beim Aufbau größerer Test-Suites:
- Schleifen: In einem ForEach-Schritt referenzieren Sie das aktuelle Element mit:
{{$.StepID.element.field}}
Ersetzen Sie StepID durch die tatsächliche Nummer des Schleifenschritts.
Bedingte Pfade: Extrahieren Sie einen Datenbankstatus und steuern Sie darauf basierend den weiteren Ablauf. Die Kombination mit bedingter Logik in API-Testszenarien ermöglicht unterschiedliche Pfade für
paidundpending.Umgebungen: Definieren Sie eine Verbindung pro Umgebung. So führt derselbe Schritt SQL gegen lokale Datenbanken oder Staging aus.
Gespeicherte Prozeduren: Die visuelle Oberfläche unterstützt keine komplexen Operationen wie Stored Procedures. Beschränken Sie Datenbankschritte auf direkte Anweisungen wie
SELECT,INSERT,UPDATEundDELETE.Oracle: Vor dem Verbindungsaufbau muss ein Oracle Client lokal installiert sein.
Anmeldeinformationen pro Umgebung verwalten
Ein Test darf niemals versehentlich auf Produktionsdaten laufen. Legen Sie deshalb Datenbankverbindungen pro Umgebung an, zum Beispiel:
localstaging
Jede Verbindung erhält ihren eigenen Host, Port, Benutzer und ihr eigenes Passwort. Wechseln Sie die Umgebung im Dropdown oben rechts:
- In
stagingläuft IhrSELECTgegen die Staging-Datenbank. - In
localläuft derselbe Schritt gegen Ihre lokale Datenbank.
Sie müssen weder SQL noch Testschritte ändern. Da Anmeldeinformationen lokal gespeichert werden, bleiben sensible Produktionspasswörter außerhalb des geteilten Cloud-Projekts.
Tests mit der Apidog CLI automatisieren
Wenn Ihr Szenario lokal funktioniert, führen Sie es in CI aus. So prüft jeder Pull Request nicht nur den HTTP-Vertrag, sondern auch die Datenbankpersistenz.
Installieren Sie die CLI und authentifizieren Sie sich:
npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
Starten Sie dann ein Testszenario für eine bestimmte Umgebung:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
Parameter:
-
-t: ID des Testszenarios -
-e: Umgebungs-ID -
-r: Reporter, etwacli,htmloderjunit
Mehrere Reporter können Sie per Komma angeben:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r html,cli
Beachten Sie: Datenbankverbindungen sind lokal. Ihr CI-Runner benötigt daher die exportierte Konfiguration, um die Datenbank erreichen zu können. Für parameterisierte Runs lesen Sie datengetriebenes Testen mit der Apidog CLI. Regelmäßige Ausführungen behandelt API-Tests mit Apidog planen.
Häufig gestellte Fragen
Welche Datenbanken sind kostenlos, welche kostenpflichtig?
MySQL, SQL Server ab 2014, PostgreSQL und Oracle sind im kostenlosen Plan enthalten. ClickHouse, MongoDB und Redis benötigen einen kostenpflichtigen Plan. Sie können die kostenlosen Datenbanken mit Apidog herunterladen ausprobieren.
Kann ich einen Datenbankwert in einer späteren Anfrage verwenden?
Ja. Führen Sie in einem Post-Processor ein SELECT aus und extrahieren Sie das Feld mit Ergebnis in Variable extrahieren und einem JSONPath wie:
$[0].fulfillment_ref
Referenzieren Sie die Variable später als:
{{fulfillment_ref}}
Das gleiche Verkettungsmuster für HTTP-Responses beschreibt Daten zwischen Testschritten übergeben.
Erhalten Teammitglieder meine Datenbankverbindungen automatisch?
Nein. Verbindungsdetails werden lokal gespeichert und nicht mit der Cloud synchronisiert. Jedes Teammitglied richtet die Verbindung selbst ein. Das schützt insbesondere Produktionsanmeldeinformationen.
Warum schlägt meine MySQL-8-Verbindung fehl?
MySQL 8 verwendet standardmäßig caching_sha2_password. Dieses Plugin kann die Verbindung blockieren. Stellen Sie den Testbenutzer bei Bedarf auf mysql_native_password um:
ALTER USER 'tester'@'%'
IDENTIFIED WITH mysql_native_password BY '...';
Kann ich Stored Procedures ausführen?
Nicht über die visuelle Oberfläche. Verwenden Sie direkte SQL-Anweisungen wie SELECT, INSERT, UPDATE und DELETE.
Zusammenfassung
Datenbankabfragen machen aus einem API-Test eine echte Persistenzprüfung:
- Initialisieren Sie Testdaten in einem Pre-Processor.
- Rufen Sie Ihre API auf.
- Prüfen Sie die gespeicherte Zeile in einem Post-Processor.
- Extrahieren Sie serverseitig erzeugte Werte für Folgerequests.
- Trennen Sie lokale, Staging- und Produktionsverbindungen konsequent nach Umgebung.
Starten Sie mit einer MySQL-Verbindung zu Ihrer Entwicklungsdatenbank und prüfen Sie nach dem nächsten POST die gerade erzeugte Zeile direkt per SELECT. Apidog herunterladen.

Top comments (0)