NewIntroducing QODEX QA Services — platform-powered QA for API-driven teams.Learn more →
API Testing8 min read

API-Lasttests: Tools, Strategien und Best Practices

S
Shreya Srivastava
Content Team
Updated on: February 2026
API-Lasttests: Tools, Strategien und Best Practices

Einleitung

Ihre API funktioniert in der Entwicklung einwandfrei. Sie besteht alle Funktionstests. Dann starten Sie den Produktivbetrieb, der Traffic steigt sprunghaft an, und alles bricht zusammen: langsame Antworten, Timeouts und 500-Fehler. Genau dieses Szenario sollen API-Lasttests verhindern.

API-Lasttests simulieren reale Traffic-Muster gegen Ihre API-Endpunkte, um Leistungsengpässe zu identifizieren, Kapazitätsgrenzen zu ermitteln und die Zuverlässigkeit unter Belastung sicherzustellen. Sie beantworten die entscheidende Frage: Wie verhält sich meine API, wenn Tausende von Nutzern sie gleichzeitig aufrufen?

Dieser Leitfaden behandelt Lastteststrategien, die besten verfügbaren Tools, praktische Beispiele und bewährte Best Practices für API-Tests im großen Maßstab.

Warum API-Lasttests wichtig sind

Funktionstests prüfen, ob Ihre API korrekte Antworten liefert. Lasttests prüfen, ob sie das auch unter Druck tut. Das zeigen Lasttests:

  • Maximaler Durchsatz: Wie viele Anfragen pro Sekunde kann Ihre API verarbeiten?
  • Antwortzeit-Degradation: Ab welchem Punkt werden Antwortzeiten inakzeptabel?
  • Breaking Point: Wann beginnt die API, Fehler zurückzugeben?
  • Ressourcenengpässe: Was ist der limitierende Faktor: CPU, Arbeitsspeicher, Datenbankverbindungen oder Netzwerk?
  • Wiederherstellungsverhalten: Erholt sich die API nach einem Traffic-Spike problemlos?

Reale Auswirkungen

Amazon stellte fest, dass jede 100 ms Latenz 1 % Umsatzverlust bedeutet. Google entdeckte, dass eine 0,5-Sekunden-Verzögerung in den Suchergebnissen einen Rückgang des Traffics um 20 % verursachte. Für APIs stehen die Einsätze genauso hoch: Langsame APIs bedeuten langsame Anwendungen, frustrierte Nutzer und entgangene Einnahmen.

Arten von API-Lasttests

Arten von API-Lasttests

1. Baseline-Test

Wird mit einem einzelnen Nutzer (oder sehr wenigen) durchgeführt, um Baseline-Antwortzeiten zu ermitteln. Das ergibt einen Referenzpunkt für den Vergleich.

2. Lasttest

Simuliert erwartete Produktions-Traffic-Niveaus. Wenn Sie beispielsweise 1.000 gleichzeitige Nutzer erwarten, testen Sie mit 1.000 virtuellen Nutzern. Prüfen Sie, ob die Antwortzeiten akzeptabel bleiben.

3. Stresstest

Überschreitet den erwarteten Traffic, um den Breaking Point zu finden. Erhöhen Sie die Last schrittweise, bis die API zu versagen beginnt. Das zeigt Ihnen die Kapazitätsgrenze.

4. Spike-Test

Simuliert plötzliche Traffic-Spitzen, zum Beispiel bei einem Flash-Sale oder einem viralen Ereignis. Testen Sie, wie Ihre API einen abrupten Sprung vom normalen Traffic auf das 10- oder 50-fache verarbeitet.

5. Soak-Test (Dauerlasttest)

Betreibt moderate Last über einen längeren Zeitraum (Stunden oder Tage), um Speicherlecks, Erschöpfung von Verbindungspools und andere zeitabhängige Probleme aufzudecken.

6. Breakpoint-Test

Erhöhung der Last in Schritten, jede Stufe für einen Zeitraum gehalten, um den genauen Punkt zu finden, an dem die Leistung abnimmt oder das System versagt.

Die besten API-Lasttest-Tools

k6 (Grafana Labs)

k6 ist der Favorit der Entwickler für API-Lasttests. Es verwendet JavaScript für Testskripte, läuft über die CLI und integriert sich nativ in CI/CD-Pipelines.

// k6-load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = { stages: [ { duration: '2m', target: 100 }, // Ramp up to 100 users { duration: '5m', target: 100 }, // Hold at 100 users { duration: '2m', target: 200 }, // Ramp up to 200 users { duration: '5m', target: 200 }, // Hold at 200 users { duration: '2m', target: 0 }, // Ramp down ], thresholds: { http_req_duration: ['p(95)<500'], // 95% of requests under 500ms http_req_failed: ['rate<0.01'], // Less than 1% failure rate }, };

export default function () { // Test GET endpoint const listRes = http.get('https://api.example.com/users'); check(listRes, { 'list status is 200': (r) => r.status === 200, 'list response time < 500ms': (r) => r.timings.duration < 500, });

// Test POST endpoint const payload = JSON.stringify({ name: 'Load Test User', email: user${Math.random()}@test.com, }); const createRes = http.post('https://api.example.com/users', payload, { headers: { 'Content-Type': 'application/json' }, }); check(createRes, { 'create status is 201': (r) => r.status === 201, });

sleep(1); // Think time between requests }

Test ausführen:

k6 run k6-load-test.js

Warum k6? Entwicklerfreundliches JavaScript-Scripting, leichtgewichtige CLI (kein JVM), integrierte Metriken mit Schwellenwerten und native Grafana-Integration für Dashboards.

Apache JMeter

JMeter ist der Enterprise-Standard für Lasttests. Es unterstützt eine breite Palette von Protokollen und bietet eine GUI zum Erstellen von Testplänen.

# Run a JMeter test plan from CLI
jmeter -n -t api-load-test.jmx \
  -l results.jtl \
  -e -o report/

# Key parameters in test plan: # Thread Group: 200 threads, 60 second ramp-up, loop 100 # HTTP Request: GET https://api.example.com/users # Assertions: Response code = 200, Response time < 1000ms

Warum JMeter? Protokollvielfalt (HTTP, JDBC, JMS, FTP), GUI für Nicht-Programmierer, verteiltes Testen über mehrere Rechner und umfangreiches Plugin-Ökosystem.

Gatling

Gatling verwendet eine Scala-basierte DSL zur Erstellung von Lasttestskripten. Es erstellt detaillierte HTML-Berichte und bewältigt hohe Parallelität effizient.

// Gatling simulation (Scala)
class ApiLoadTest extends Simulation {
  val httpProtocol = http
    .baseUrl("https://api.example.com")
    .acceptHeader("application/json")

val scn = scenario("API Load Test") .exec( http("Get Users") .get("/users") .check(status.is(200)) .check(responseTimeInMillis.lt(500)) ) .pause(1) .exec( http("Get Single User") .get("/users/1") .check(status.is(200)) .check(jsonPath("$.name").exists) )

setUp( scn.inject( rampUsers(200).during(120) // 200 users over 2 minutes ) ).protocols(httpProtocol) .assertions( global.responseTime.percentile3.lt(500), global.successfulRequests.percent.gt(99) ) }

Warum Gatling? Hervorragende HTML-Berichte, effiziente asynchrone Architektur, Scala-DSL für ausdrucksstarke Tests und CI/CD-freundliche CLI-Ausführung.

Locust (Python)

Locust ermöglicht das Schreiben von Lasttests in reinem Python. Es ist ideal für Python-Teams und bietet eine webbasierte UI zur Echtzeit-Überwachung von Tests.

# locustfile.py
from locust import HttpUser, task, between

class APIUser(HttpUser): wait_time = between(1, 3) # 1-3 second think time

@task(3)
def get_users(self):
    self.client.get("/users", name="GET /users")

@task(1)
def create_user(self):
    self.client.post("/users", json={
        "name": "Load Test User",
        "email": f"user{id(self)}@test.com"
    }, name="POST /users")

@task(2)
def get_single_user(self):
    self.client.get("/users/1", name="GET /users/:id")

# Run Locust
locust -f locustfile.py --host=https://api.example.com \
  --users 200 --spawn-rate 10 --run-time 5m --headless

Warum Locust? Reines Python (keine DSL zu erlernen), verteiltes Testen integriert, Echtzeit-Web-Dashboard und einfach mit eigener Logik erweiterbar.

Tool-Vergleich

ToolSpracheGUIVerteiltBerichteIdeal für
k6JavaScriptNeinNur CloudCLI + GrafanaEntwicklerteams, CI/CD
JMeterXML/GUIJaJaHTML + PluginsEnterprise, Protokollvielfalt
GatlingScalaNeinEnterpriseHervorragendes HTMLHochparallelitätstests
LocustPythonWeb-UIJaWeb-DashboardPython-Teams

Lasttest-Strategie: Schritt für Schritt

Schritt 1: Leistungsanforderungen definieren

Bevor Sie einen einzigen Test schreiben, definieren Sie Ihre Leistungs-SLAs:

  • Antwortzeitziele: z. B. p95 < 500 ms, p99 < 1 s
  • Durchsatzziele: z. B. 1.000 Anfragen/Sekunde
  • Fehlergrenzen: z. B. < 0,1 % unter normaler Last
  • Ziele für gleichzeitige Nutzer: z. B. 5.000 gleichzeitige Nutzer

Schritt 2: Kritische API-Endpunkte identifizieren

Nicht jeder Endpunkt benötigt Lasttests. Konzentrieren Sie sich auf:

  • Hochfrequentierte Endpunkte (Login, Suche, Produktliste)
  • Datenintensive Endpunkte (Berichte, Exporte, Aggregationen)
  • Zahlungs- und Transaktionsendpunkte
  • Endpunkte mit Datenbankschreibvorgängen

Schritt 3: Realistische Testszenarien erstellen

Ihre Lasttests sollten echtes Nutzerverhalten simulieren, nicht nur einen einzelnen Endpunkt bombardieren:

  • Mix aus Lese- und Schreiboperationen (typischerweise 80/20 oder 90/10)
  • Realistische Denkzeiten zwischen Anfragen (1-5 Sekunden)
  • Unterschiedliche Anfrage-Payloads (keine identischen Daten für jede Anfrage)
  • Korrekte Authentifizierungsabläufe

Schritt 4: Tests in einer produktionsähnlichen Umgebung durchführen

Lasttests auf Ihrem lokalen Rechner oder einer abgespeckten Staging-Umgebung liefern irreführende Ergebnisse. Verwenden Sie eine Umgebung, die der Produktion in Bezug auf Infrastruktur, Datenbankgröße und Konfiguration entspricht.

Schritt 5: Alles überwachen

Während Lasttests überwachen Sie nicht nur die API-Antworten, sondern auch:

  • Server-CPU und Arbeitsspeichernutzung
  • Datenbankabfragezeiten und Verbindungspool
  • Netzwerkbandbreite und Latenz
  • Warteschlangenlängen und Nachrichtenverarbeitungsraten
  • Cache-Trefferquoten

Schritt 6: Ergebnisse analysieren und handeln

Suchen Sie nach Mustern in den Ergebnissen:

  • Steigt die Antwortzeit linear oder exponentiell mit der Last?
  • Welche Endpunkte degradieren zuerst?
  • Konzentrieren sich Fehler auf bestimmte Endpunkte oder sind sie verteilt?
  • Sehen Sie Ressourcenerschöpfung (CPU, Arbeitsspeicher, Verbindungen)?

Lasttests in CI/CD integrieren

Lasttests sollten keine einmalige Aktivität sein. Integrieren Sie sie in Ihre CI/CD-Pipeline, um Leistungsregressionen frühzeitig zu erkennen.

# GitHub Actions - k6 load test
name: API Load Tests
on:
  push:
    branches: [main]
  schedule:
    - cron: '0 2 * * 1'  # Weekly Monday 2 AM

jobs: load-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

  - name: Install k6
    run: |
      sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg \
        --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D68
      echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" \
        | sudo tee /etc/apt/sources.list.d/k6.list
      sudo apt-get update && sudo apt-get install k6

  - name: Run load test
    run: k6 run --out json=results.json load-tests/api-load.js

  - name: Check thresholds
    run: |
      if grep -q '"thresholds".*"fail"' results.json; then
        echo "Load test thresholds failed!"
        exit 1
      fi

Häufige API-Leistungsprobleme und Lösungen

N+1-Abfrageproblem

Wenn Ihr API-Endpunkt für jedes Element einer Liste eine Datenbankabfrage durchführt, degradiert die Leistung linear mit der Datenmenge. Lösung: Verwenden Sie Eager Loading, Batch-Abfragen oder Data Loader.

Fehlende Datenbankindizes

Langsame Abfragen sind die häufigste Ursache für API-Latenz. Stellen Sie sicher, dass Indizes auf Spalten existieren, die in WHERE-, JOIN- und ORDER-BY-Klauseln verwendet werden.

Kein Caching

Wenn Ihre API dieselben Daten wiederholt aus der Datenbank liest, fügen Sie Caching-Schichten hinzu: In-Memory-Cache (Redis), HTTP-Cache-Header und CDN-Caching für statische Antworten.

Verbindungspool-Erschöpfung

Unter Last kann Ihrer API die Datenbankverbindungen ausgehen. Konfigurieren Sie Verbindungspools angemessen und fügen Sie Timeout-Behandlung hinzu.

Synchrone Operationen

Lang laufende Operationen (E-Mail-Versand, Dateiverarbeitung, Berichtserstellung) sollten in Hintergrundjob-Warteschlangen ausgelagert werden, statt die API-Antwort zu blockieren.

Verwandt: Was ist API-Latenz?

Lasttests mit Funktionstests kombinieren

Lasttests funktionieren am besten in Verbindung mit funktionalen API-Tests, Sicherheitstests und Integrationstests. Tools wie Qodex.ai können Ihre Funktionstest-Suite automatisieren, während Sie k6 oder JMeter für Lasttests nutzen, um umfassende Abdeckung zu erhalten.

Für eine vollständige Übersicht der verfügbaren Tools, lesen Sie unseren API-Testing-Tools-Vergleich.


Häufig gestellte Fragen

Was ist der Unterschied zwischen Lasttest und Stresstest?

Lasttests simulieren den erwarteten Produktions-Traffic, um zu prüfen, ob die Leistung den SLAs entspricht. Stresstests gehen über die erwarteten Grenzen hinaus, um den Breaking Point zu finden. Beide sind wichtig: Lasttests validieren den Normalbetrieb, Stresstests zeigen, wie Ihr System versagt und sich erholt.

Wie viele virtuelle Nutzer soll ich in einem Lasttest verwenden?

Beginnen Sie mit Ihren erwarteten maximalen gleichzeitigen Nutzern, dann testen Sie mit dem 2- und 5-fachen dieser Zahl. Wenn Sie beispielsweise 1.000 gleichzeitige Nutzer auf dem Höhepunkt erwarten, testen Sie mit 1.000, 2.000 und 5.000 virtuellen Nutzern, um Ihren Kapazitätsspielraum zu verstehen.

Wie oft soll ich API-Lasttests durchführen?

Führen Sie leichtgewichtige Lasttests (Baseline plus Standard-Last) bei jeder Bereitstellung durch. Führen Sie vollständige Stresstests und Dauerlasttests wöchentlich oder vor großen Releases durch. Integrieren Sie Tests in CI/CD, damit Leistungsregressionen sofort erkannt werden.

Kann ich eine REST API mit Postman einem Lasttest unterziehen?

Postman hat kürzlich Leistungstests mit dem Collection Runner eingeführt, aber im Vergleich zu dedizierten Tools ist das begrenzt. Für ernsthafte Lasttests verwenden Sie k6, JMeter, Gatling oder Locust, die darauf ausgelegt sind, hohe gleichzeitige Lasten zu erzeugen.

Welche Metriken soll ich während API-Lasttests verfolgen?

Verfolgen Sie Antwortzeit (p50, p95, p99), Durchsatz (Anfragen/Sekunde), Fehlerrate und Ressourcenauslastung (CPU, Arbeitsspeicher, Datenbankverbindungen). Setzen Sie Schwellenwerte für jede Metrik und lassen Sie den Test scheitern, wenn Schwellenwerte überschritten werden.

Wie teste ich GraphQL-APIs mit Last?

Dieselben Tools (k6, JMeter, Gatling) funktionieren für GraphQL-APIs. Senden Sie POST-Anfragen an den GraphQL-Endpunkt mit Query-Payloads. Beachten Sie, dass GraphQL-Abfragen sehr unterschiedliche Kosten haben können: Testen Sie sowohl einfache Abfragen als auch komplexe verschachtelte Abfragen mit mehreren Joins.