k6 vs Locust: JavaScript-Skripte oder Python-Nutzer?
6 Min. Lesezeit
k6 und Locust sind beide Open-Source-Tools, die einen Lasttest als Code in Ihrem Repository halten, und mit beiden lässt sich eine HTTP-API gut unter Last testen. Nehmen Sie Locust, wenn Ihr Team Python schreibt und die Testlogik in reinem Python haben möchte. Nehmen Sie k6, wenn Sie JavaScript schreiben, Schwellenwerte für Pass/Fail eingebaut haben wollen oder einen Test brauchen, der eine Ankunftsrate hält.
Die Angaben in diesem Vergleich von k6 und Locust stammen aus der Dokumentation und dem Repository des jeweiligen Projekts, geprüft am 13. Oktober 2026.
| k6 | Locust | |
|---|---|---|
| Lizenz | AGPL-3.0 (Repository) | MIT (Repository) |
| Laufzeit | Ein Go-Binary mit eingebetteter JavaScript-Engine (Release v2.3.0) | Python 3.11 oder neuer (Release 2.46.7) |
| Testskripte | JavaScript oder TypeScript, bei dem die Typen entfernt werden | Python-Klassen in einem Locustfile |
| Eingebaute Protokolle | HTTP/1.1, HTTP/2, WebSockets, gRPC | HTTP und HTTPS |
| Lastmodell | Sechs Executors, davon zwei Arrival-Rate (offenes Modell) | Ein Pool von Nutzern, die jeweils eine Wartezeit einlegen (geschlossenes Modell) |
| Pass/Fail | Schwellenwerte, die einen Lauf vorzeitig abbrechen können | Exit-Code 1 bei fehlgeschlagenen Anfragen; weitere Grenzen per Listener |
| Browsertests | Eingebautes Browser-Modul | Browser-Nutzer über das separate Projekt locust-plugins |
| Skalierung | k6-operator auf Kubernetes oder Grafana Cloud k6 | Master und Worker, ein Kubernetes-Operator oder Azure Load Testing |
Was ist der Unterschied zwischen k6 und Locust?
Der Hauptunterschied ist die Sprache, in der Sie Tests schreiben. k6 führt JavaScript in einem kompilierten Go-Programm aus, während Locust Ihren Python-Code ausführt und für viele gleichzeitige Nutzer auf gevent aufbaut.
k6 wird als Paket oder eigenständiges Binary ohne weitere Laufzeit installiert. Es führt auch .ts-Dateien aus, doch seine TypeScript-Unterstützung entfernt die Typen, ohne sie zu prüfen. Locust installieren Sie mit pip install locust, und laut der Seite What is Locust sind Tests gewöhnlicher Python-Code, den Sie wie jeden anderen Code in der Versionsverwaltung halten (geprüft am 13. Oktober 2026).
Wie schreibt man denselben Test in beiden Tools?
Beide drücken den Test als kurzes Programm aus. Hier ein Test mit 50 Nutzern über fünf Minuten, der fehlschlägt, wenn das 95. Perzentil über 500 ms liegt oder mehr als 1 % der Anfragen scheitern.
In k6 gehören die Ziele zum Skript, als Schwellenwerte:
import http from "k6/http";
import { sleep } from "k6";
export const options = {
vus: 50,
duration: "5m",
thresholds: {
http_req_duration: ["p(95)<500"],
http_req_failed: ["rate<0.01"],
},
};
export default function () {
http.get("https://staging.example.com/api/users");
sleep(1);
}
In Locust ist der Nutzer eine Klasse, und dieselben Ziele stehen in einem Listener, nach dem Muster aus den Docs zum Headless-Modus:
import logging
from locust import HttpUser, between, events, task
class ApiUser(HttpUser):
wait_time = between(1, 2)
@task
def list_users(self):
self.client.get("/api/users")
@events.quitting.add_listener
def _(environment, **kw):
stats = environment.stats.total
if stats.fail_ratio > 0.01:
environment.process_exit_code = 1
elif stats.get_response_time_percentile(0.95) > 500:
environment.process_exit_code = 1
Gestartet werden sie mit k6 run script.js und locust -f locustfile.py --headless -u 50 -r 10 -t 5m --host https://staging.example.com (geprüft am 13. Oktober 2026).
Wie modellieren k6 und Locust die Last?
k6 unterstützt beide Lastmodelle, während Locust die Last als feste Zahl von Nutzern beschreibt. In k6 wählen Sie das Modell über den Executor, in Locust über Nutzerzahl und Wartezeit.
k6 hat sechs Executors. Vier davon sind geschlossen: Ein virtueller Benutzer startet seine nächste Iteration erst, wenn die letzte beendet ist. Die zwei Arrival-Rate-Executors folgen dem offenen Modell, in dem Iterationen unabhängig davon starten, wie lange frühere dauern. Der Locustfile-Leitfaden sagt, dass die Wartezeit den Durchsatz nur begrenzen und keine neuen Nutzer starten kann, um eine Zielrate zu erreichen (geprüft am 13. Oktober 2026).
Lautet Ihr Ziel “300 Anfragen pro Sekunde, egal wie die Antwortzeit ausfällt”, kann k6 das direkt ausdrücken. Unser Leitfaden zum offenen und geschlossenen Lastmodell erklärt, wann welches Modell passt.
Wie entscheiden k6 und Locust, ob ein Test bestanden ist?
k6 hat Pass/Fail-Kriterien als Kernfunktion, Locust überlässt das meiste Ihrem Code. Ein verletzter k6-Schwellenwert beendet den Lauf mit einem Exit-Code ungleich null, und abortOnFail stoppt den Test in dem Moment, in dem er scheitert.
Locust beendet sich mit Exit-Code 1, wenn eine Anfrage fehlgeschlagen ist. Für Grenzen bei der Fehlerquote, dem Durchschnitt oder dem 95. Perzentil zeigen die Docs einen Listener wie den oben, der den Exit-Code selbst setzt (geprüft am 13. Oktober 2026). Unser Leitfaden zu Pass/Fail-Kriterien für Lasttests hilft bei der Wahl der Grenzen.
Welche Protokolle deckt jedes Tool ab?
k6 liefert vier Protokolle und ein Browser-Modul mit, Locust liefert HTTP und HTTPS mit und lässt Sie jeden Python-Client für den Rest einbinden.
k6 nennt HTTP/1.1, HTTP/2, WebSockets und gRPC als eingebaute Protokolle, weitere über xk6-Erweiterungen, dazu ein Browser-Modul, das einen Chromium-basierten Browser steuert. Laut Locusts Seite zu anderen Systemen bringt es eingebaute Unterstützung nur für HTTP/HTTPS mit, lässt sich aber erweitern, um fast jedes System zu testen: Man umhüllt eine Protokollbibliothek und meldet jeden Aufruf als Anfrage. Die Bibliothek muss mit gevent zusammenarbeiten (geprüft am 13. Oktober 2026).
Wie fährt man einen größeren Test, als eine Maschine erzeugen kann?
Locust skaliert mit einem Master und Workern, k6 mit einem Kubernetes-Operator oder einem gehosteten Dienst. Beide können einen Test auf viele Maschinen verteilen.
Die Docs zum verteilten Betrieb von Locust sagen, ein Prozess schaffe bei einem einfachen Testplan mehr als tausend Anfragen pro Sekunde; größere Tests laufen daher mit einem Worker pro Prozessorkern auf so vielen Maschinen wie nötig. Der k6-operator verteilt einen Test auf mehrere k6-Instanzen in einem Kubernetes-Cluster, und Grafana Cloud k6 ist der gehostete Weg (geprüft am 13. Oktober 2026).
Für k6-Skripte gibt es einen dritten Weg. LoadFocus, der Herausgeber dieser Seite, führt k6-Skripte aus 25 Cloud-Regionen aus, wobei Nutzer und Dauer aus den Einstellungen des Tests stammen. Der Skript-Validator warnt, dass Arrival-Rate-Szenarien dort mit einer festen Zahl von Nutzern laufen; ein Skript im offenen Modell hält seine Ankunftsrate bei LoadFocus also nicht. LoadFocus führt Locust nicht aus: Es führt nur k6-Skripte und JMeter-Testpläne aus.
Welche Berichte erhält man?
k6 gibt eine Zusammenfassung am Ende des Tests aus und kann aus seinem Web-Dashboard einen HTML-Bericht exportieren. Locust zeigt Live-Diagramme in der Web-UI und schreibt auf Wunsch Dateien.
Die Zusammenfassung am Testende von k6 erscheint im Terminal, und das Web-Dashboard exportiert einen eigenständigen HTML-Bericht, wenn Sie K6_WEB_DASHBOARD_EXPORT setzen. Locust stellt eine Web-UI auf Port 8089 mit Live-Diagrammen bereit, und die Konfigurationsreferenz führt die Ausgaben --csv, --html und --json auf (geprüft am 13. Oktober 2026).
Welches Tool sollten Sie wählen?
Locust passt zu Python-Teams, k6 zu Teams, die eingebaute Schwellenwerte und ein offenes Lastmodell wollen. Protokolle und Skalierung entscheiden die meisten übrigen Fälle.
Wählen Sie Locust statt k6, wenn Ihr Team Python schreibt und Schleifen, Verzweigungen, generierte Daten und einen eigenen API-Client in reinem Python haben möchte, wenn Sie Python-Bibliotheken für ein Protokoll wiederverwenden wollen oder wenn Sie eine Web-UI mit Live-Diagrammen nutzen möchten, um ein System zu erkunden. Wählen Sie k6 statt Locust, wenn Ihr Team JavaScript oder TypeScript schreibt, wenn Schwellenwerte einen CI-Build scheitern lassen und einen schlechten Lauf früh stoppen sollen, wenn Sie eine konstante Ankunftsrate brauchen oder wenn gRPC und Browsertests im selben Tool liegen sollen.
Einen breiteren Blick bietet unser Überblick über Locust-Lasttests.
FAQ
Ist Locust schneller als k6? Wir haben das nicht selbst gemessen, also nennen wir keinen Sieger. Der faire Test ist dasselbe Szenario mit beiden Tools auf Ihrer eigenen Hardware.
Kann Locust k6-Skripte ausführen? Laut den Locust-Docs nicht, sie beschreiben Tests als Python-Code in einem Locustfile. Ein k6-Skript ist JavaScript und muss daher als Python-Nutzerklasse neu geschrieben werden; aus den Schwellenwerten wird ein Listener.
Kann LoadFocus Locust-Tests ausführen? Nein. LoadFocus führt k6-Skripte und JMeter-Testpläne aus. Um einen Locust-Test zu skalieren, nutzen Sie dessen Master-Worker-Betrieb, den Kubernetes-Operator oder Azure Load Testing.
Weiterlesen
- Locust-Lasttests: das Python-Tool im Überblick
- Locust vs JMeter: Python-Skripte oder JMeter-Testpläne?
- Gatling vs k6: JVM-Simulationen oder ein Go-Binary?
- k6 vs Artillery: welches Lasttest-Tool passt zu Ihrem Team?
- Offenes vs. geschlossenes Lastmodell: welches sollten Sie verwenden?
- Azure Load Testing: der Microsoft-Dienst im Überblick
Die technischen Aussagen in diesem Artikel wurden nicht unabhängig geprüft.