Tool-Reviews

Locust-Lasttests: das Python-Tool im Überblick

6 Min. Lesezeit aktualisiert am

Locust ist ein kostenloses Python-Lasttest-Tool unter MIT-Lizenz, in dem jeder Test ein Python-Programm ist, ausgeführt von leichtgewichtigen Benutzern über eine Web-UI oder die Kommandozeile. Ein Locust-Lasttest passt zu Teams, die Python schreiben und vor allem HTTP-Dienste testen. Wer viele Protokolle ab Werk oder einen grafischen Test-Builder braucht, ist mit JMeter besser bedient, und wer JavaScript schreibt, mit k6.

Wir haben Locust für dieses Review nicht selbst ausgeführt. Die Fakten stammen aus der Dokumentation, dem Repository und der PyPI-Seite von Locust, geprüft am 9. Oktober 2026; die Einschätzungen sind unsere eigenen.

ThemaLocust
LizenzMIT
LaufzeitPython 3.11 oder neuer
Aktuelle Version2.46.7 (4. Oktober 2026)
Tests alsPython-Klassen in einem Locustfile
AusführungWeb-UI auf Port 8089 oder headless
Eingebaute ProtokolleHTTP und HTTPS
SkalierungEin Master und beliebig viele Worker
ErgebnisseLive-Diagramme, CSV, HTML, JSON, OpenTelemetry
CIExit-Code 1, wenn mindestens eine Anfrage fehlgeschlagen ist

Wer entwickelt Locust, und wird es noch gepflegt?

Lars Holmberg pflegt Locust, und Microsoft sponsert die Arbeit. Neue Versionen erscheinen häufig: 17 sind es bisher im Jahr 2026.

Das README von Locust nennt beide. PyPI führt 2.46.7 vom 4. Oktober 2026 als neueste Version und setzt Python 3.11 oder neuer voraus (geprüft am 9. Oktober 2026).

Wie funktioniert ein Locustfile?

Ein Locustfile ist ein gewöhnliches Python-Modul mit mindestens einer User-Klasse. Jeder simulierte Benutzer arbeitet seine Tasks nacheinander ab und pausiert dazwischen für seine wait_time.

Laut der Anleitung zum Locustfile gibt HttpUser jedem Benutzer einen client, der python-requests kapselt, Cookies behält und jede Anfrage erfasst. Mit @task markierte Methoden werden zufällig gewählt, gewichtet mit der Zahl im Decorator, und on_start läuft einmal pro Benutzer. Dieser Benutzer meldet sich an, stöbert viermal so oft, wie er bestellt, und startet höchstens alle 10 Sekunden einen Task:

from locust import HttpUser, task, constant_pacing


class Shopper(HttpUser):
    wait_time = constant_pacing(10)

    def on_start(self):
        self.client.post("/login", json={"user": "demo"})

    @task(4)
    def browse(self):
        self.client.get("/products?page=2", name="/products")

    @task
    def checkout(self):
        with self.client.post(
            "/checkout", catch_response=True
        ) as resp:
            if "order_id" not in resp.text:
                resp.failure("no order id")

Mit catch_response lassen Sie eine Anfrage auch an ihrem Inhalt scheitern, und name fasst wechselnde URLs in einer Zeile der Statistik zusammen. Die übrigen Wartefunktionen sind constant, between, constant_throughput und seit Version 2.46.6 poisson; unser Beitrag zur Think Time im Lasttest erklärt, wie Pausen die Last formen. Die Dokumentation ergänzt, dass die Wartezeit den Durchsatz nur begrenzen und keine Benutzer starten kann, um eine Zielrate zu erreichen. Ein Locust-Test ist also ein fester Pool von Benutzern, ein geschlossenes Lastmodell.

Web-UI oder headless: was sollten Sie nutzen?

Die Web-UI, solange Sie erkunden, und den Headless-Modus für wiederholbare Läufe.

Der Befehl locust startet eine Weboberfläche auf Port 8089. Dort legen Sie Host, Benutzerzahl und Ramp-up fest, verfolgen Live-Diagramme und ändern die Last während des Tests. Der Headless-Modus nimmt dieselben Einstellungen als Flags entgegen:

locust -f locustfile.py --headless -u 200 -r 10 -t 10m \
  --host https://staging.example.com \
  --csv results --html report.html

-u setzt die Zahl der Benutzer, -r die Benutzer, die pro Sekunde starten, und -t die Laufzeit einschließlich Ramp-up. Dieselben Einstellungen lassen sich auch in locust.conf oder pyproject.toml festlegen.

Wie funktioniert der verteilte Modus?

Ein Master-Prozess betreibt die Web-UI und koordiniert, Worker-Prozesse führen die Benutzer aus und melden ihre Ergebnisse zurück. Sie brauchen einen Worker pro CPU-Kern, weil ein Python-Prozess nicht mehr als einen Kern voll nutzen kann.

Laut der Dokumentation zur verteilten Last schafft ein Prozess bei einem einfachen Testplan über tausend Anfragen pro Sekunde; größere Tests verteilen Sie deshalb:

# auf dem Master-Rechner
locust -f locustfile.py --master
# auf jedem Worker-Rechner, ein Worker pro Kern
locust -f - --worker --master-host 10.0.0.5 --processes -1

-f - holt das Locustfile vom Master. --processes setzt auf fork() und funktioniert deshalb nicht unter Windows, und nach jeder Änderung am Locustfile müssen alle Prozesse neu starten. Die Dokumentation beschreibt außerdem einen Kubernetes-Operator und Azure Load Testing (geprüft am 9. Oktober 2026).

LoadFocus, der Herausgeber dieser Website, führt keine Locust-Tests aus. LoadFocus führt JMeter-Testpläne und k6-Skripte aus, und zwar aus 25 Cloud-Regionen. Für Locust bleiben also die oben genannten Wege zur Skalierung.

Kann Locust auch andere Protokolle als HTTP testen?

Ja, wenn Sie einen Python-Client für das Protokoll mitbringen. Eingebaut sind nur HTTP und HTTPS.

Die Seite zu weiteren Protokollen zeigt, wie Sie einen Client so kapseln, dass jeder Aufruf erfasst wird, mit Beispielen für XML-RPC und gRPC und experimentellen User-Klassen für MQTT, Socket.IO und OpenAI. Das separate Projekt locust-plugins ergänzt User-Klassen für Kafka, FTP, Selenium und Playwright (geprüft am 9. Oktober 2026).

Für HTTP gibt es zusätzlich FastHttpUser, das geventhttpclient nutzt und deutlich weniger CPU braucht. Im besten Fall schafft ein Prozess laut Dokumentation etwa 16.000 Anfragen pro Sekunde, mit HttpUser 4.000. Einzelne Anfragen werden dadurch nicht schneller, und TLS-Zertifikate prüft FastHttpUser standardmäßig nicht.

Welche Berichte liefert Locust, und wie passt es in die CI?

Sie bekommen Live-Diagramme in der Web-UI und auf Wunsch Ergebnisdateien. In der CI beendet sich Locust mit Exit-Code 1, wenn mindestens eine Anfrage fehlgeschlagen ist.

Laut der Konfigurationsreferenz schreibt --csv Dateien für Statistik, Verlauf und Fehler, --html speichert einen Bericht, und --json gibt die Endstatistik aus. --otel exportiert an ein OpenTelemetry-Backend. Die Headless-Dokumentation zeigt einen Listener, der den Lauf anhand der Fehlerquote, der durchschnittlichen Antwortzeit oder des 95. Perzentils scheitern lässt, und unser Leitfaden zu Lasttests in GitHub Actions baut ihn in einen Workflow ein.

Was kann Locust gut, und wo liegen seine Grenzen?

Stark ist Locust bei Testlogik und bei vielen gleichzeitigen Benutzern, die meist warten. Schwächer ist es bei der Anfragerate pro Prozess und bei Protokollen, die Sie selbst anbinden müssen.

Weil Tests reines Python sind, funktionieren Schleifen, Verzweigungen, generierte Daten und Ihr eigener API-Client, und die Tests liegen in der Versionsverwaltung. Die Seite What is Locust schreibt, dass die geringen Kosten pro Benutzer gut zu stark parallelen Lasten passen, räumt aber ein, dass andere Tools auf derselben Hardware mehr Anfragen pro Sekunde schaffen können.

Grenzen, die die Dokumentation selbst nennt:

  • Ein Python-Prozess nutzt nur einen CPU-Kern.
  • Bibliotheken mit I/O in C blockieren den Prozess, sofern gevent sie nicht patchen kann.
  • HttpUser parst kein HTML und lädt keine Seitenressourcen.
  • Die Wartezeit kann keine Benutzer hinzufügen, um eine Anfragerate zu halten.

Welche anderen Python-Tools für Lasttests gibt es?

Locust ist die aktiv entwickelte Python-Engine. Molotov, die wichtigste Alternative, hat seit 2022 keine neue Version auf PyPI veröffentlicht, und Taurus führt Locust über einen seiner Executors aus.

Molotov ist ein Tool für Python 3.8+ auf Basis von asyncio und aiohttp; die neueste Version auf PyPI ist 2.6 vom 21. Oktober 2022, und der letzte Commit auf seinem Hauptzweig stammt vom November 2023 (geprüft am 21. Oktober 2026). Taurus führt ein Locustfile oder einfache, in YAML geschriebene GET- und POST-Anfragen über seinen Executor locust aus. Locust installieren Sie selbst, im verteilten Modus startet Taurus nur den Master, und die Einstellung throughput wirkt bei diesem Executor nicht (geprüft am 21. Oktober 2026).

Wann sollten Sie stattdessen k6, JMeter oder Gatling wählen?

Wählen Sie ein anderes Tool, wenn dessen Sprache, Protokolle oder Lastmodell besser zu Ihrem Team passen.

Unser Überblick über Open-Source-Lasttest-Tools stellt Locust neben fünf weitere.

Wählen Sie stattdessen k6, wenn Ihr Team JavaScript schreibt, Bestanden-Kriterien als Thresholds im Skript festlegen will oder ein offenes Lastmodell braucht, das die Arrival-Rate-Executors von k6 liefern (geprüft am 9. Oktober 2026). LoadFocus führt k6-Skripte aus 25 Cloud-Regionen aus, startet Arrival-Rate-Szenarien dort aber mit einer festen Zahl von Benutzern. Für eine gehaltene Anfragerate führen Sie sie mit k6 selbst aus.

Wählen Sie stattdessen JMeter, wenn Sie JDBC, JMS, LDAP oder FTP ab Werk brauchen, wie es das README aufführt, oder wenn Ihre Tester Tests in einer GUI bauen. Locust vs JMeter vergleicht die beiden ausführlich.

Wählen Sie stattdessen Gatling, wenn Ihr Team auf der JVM arbeitet und offene wie geschlossene Injektionsprofile in einer API haben möchte (geprüft am 9. Oktober 2026). Gatling vs JMeter geht darauf näher ein.

FAQ

Darf man Locust kostenlos kommerziell nutzen? Ja. Locust steht unter der MIT-Lizenz, die kommerzielle Nutzung, Änderung und Weitergabe erlaubt.

Welche Python-Version braucht Locust? Python 3.11 oder neuer, laut den PyPI-Metadaten. Installiert wird es mit pip install locust, oder Sie starten es mit uvx locust in einer temporären Umgebung.

Kann LoadFocus Locust-Tests ausführen? Nein. LoadFocus führt JMeter-Testpläne und k6-Skripte aus. Um einen Locust-Test zu skalieren, nutzen Sie den Master-Worker-Modus, den Kubernetes-Operator oder Azure Load Testing.

Weiterlesen


Die technischen Aussagen in diesem Artikel wurden nicht unabhängig geprüft.

LoadFocus team
Geschrieben vom LoadFocus-Team, den Leuten hinter einem Cloud-Lasttest-Dienst.