Einstieg in den Lasttest und Performancetest mit Locust

🕒 Lesedauer: 7 Minuten

Vielleicht haben Sie bereits Last- und Performancetests mit einem der „großen“ Tools wie Apache JMeter realisiert, haben sich durch umfangreiche GUIs gekämpft, über hohen Ressourcenverbrauch gestaunt oder sich über unkomfortables Scripting geärgert? Vielleicht haben Sie sich gedacht, dass es naheliegend wäre, den Test direkt als Code zu implementieren?

Einen solchen Ansatz verfolgt Locust. Locust ist ein Open-Source-Tool für Lasttests, das in Python geschrieben ist und eine eventbasierte Architektur verwendet. Es eignet sich besonders für Benutzer, die bereits mit Python vertraut sind und flexible, skriptbasierte Lasttests bevorzugen.

Was sind Performancetests und warum sind sie wichtig?

Performancetests (auch Lasttests oder Leistungstests) sind essenziell, um die Leistung und Skalierbarkeit von Webanwendungen unter verschiedenen Bedingungen zu bewerten. Sie helfen Entwicklern und Testern, die Anwendung effizient zu optimieren, Engpässe zu analysieren und eine benutzerfreundliche Erfahrung sicherzustellen.

Mit Performance Tests lassen sich Benutzer gleichzeitig simulieren, um zu prüfen, wie eine Anwendung unter hoher Last reagiert. Dabei werden wichtige Metriken wie Ladezeiten, Antwortzeiten und Fehlerquoten gemessen, um eine detaillierte Analyse der Bewertung der Leistung durchzuführen. Diese Tests sind besonders wichtig für skalierbare, leistungsstarke Webanwendungen, die unter hohem Datenverkehr zuverlässig funktionieren müssen.

Nicht jedes Tool für Leistungstests passt zu jedem Testfall. Während einige eine flexible Skripterstellung bevorzugen, legen andere mehr Wert auf eine benutzerfreundliche, webbasierte Oberfläche oder eine nahtlose Integration in CI/CD-Pipelines. Wer sich mit verteilten Tests beschäftigt oder große Stresstests über mehrere Server ausführen möchte, benötigt ein skalierbares Tool, das Last effizient auf mehrere Systeme verteilt. Auch die Wahl der Programmiersprache spielt eine Rolle – manche setzen auf Python, andere bevorzugen JavaScript oder eine Umgebung, die besser in ihre bestehende Infrastruktur passt.

Für eine tiefere Analyse und Optimierung von Performancetests empfehlen wir unseren Blogartikel:
➡️ Grundlagen von Last- und Performance-Tests

Wer verschiedene Tools für Performancetests miteinander vergleichen möchte, findet hier eine umfassende Übersicht zu JMeter, Gatling und co.:
➡️ Die besten Performance Testing Tools im Überblick

Ein gut durchdachter Performancetest bietet wertvolle Einblicke und ermöglicht eine zuverlässige Überwachung der Leistung Ihrer Anwendung. Egal ob für automatisierte Tests, verteilte Lasttests oder dynamische Skalierung – mit den richtigen Tools lässt sich die Effizienz und Stabilität einer Webanwendung optimieren und langfristig reibungslos betreiben.

 

Locust - Lizenz und Installation

Falls Locust noch nicht installiert ist, kann es mit pip installiert werden. Da es sich nur um ein Python-Modul handelt, kann es plattformunabhängig installiert werden:

pip install locust

Weitere Details zur Installation finden sich in der offiziellen Dokumentation.

 

Hello World: Einfacher Seitenaufruf mit Locust

Erstelle eine neue Datei hello-world.py mit folgendem Inhalt:

from locust import HttpUser, task 
class GoogleUser(HttpUser): 
    @task 
    def load_google(self): 
        self.client.get("/")

Test mit der Web-Oberfläche ausführen

Locust starten mit:

locust -f hello-world.py

Falls die Datei locustfile.py heißt, kann die Angabe -f hello-world.py entfallen, da Locust diese Datei standardmäßig verwendet.

Image
Lokaler Locust Webserver für Parametrisierung
Bild: Lokaler Locust Webserver für Parametrisierung [Quelle: Qytera]

Es wird ein lokaler Webserver gestartet. Aufruf localhost:8089 im Browser:

  • Number of users: Anzahl der zu startenden Benutzer (z. B. 3)
  • Spawn rate: Startverhalten (Ramp-Up, z. B. 1 für sofortiges Starten)
  • Host: Die zu testende URL (z. B. https://www.google.de)
     

Test starten mit „Start“:

Nach dem Start des Tests erscheint die Testkonsole, die den laufenden Test in Echtzeit anzeigt. Der Test wird unbegrenzt ausgeführt, bis er manuell durch einen Klick auf „STOP“ beendet wird. Anschließend wird automatisch die Statistikseite angezeigt, auf der verschiedene Leistungsmetriken des Tests ausgewertet werden können. Falls der Test über die CLI gestartet wurde, werden die Ergebnisse zusätzlich in CSV-Dateien gespeichert. Der lokale Webserver kann jederzeit durch das Drücken von STRG-C in der Eingabeaufforderung gestoppt werden.

Test direkt per CLI ausführen

Falls Locust ohne Web-Oberfläche gestartet werden soll, kann folgender Befehl verwendet werden:

locust -f hello-world.py --headless -u 3 --run-time 1s --host=https://www.google.de --csv=result

Falls die Datei locustfile.py heißt, kann -f hello-world.py entfallen.

Parameter-Erklärung:

  • --headless → Führt den Test ohne UI aus
  • -u 3 → Simuliert 3 parallele Nutzer
  • --run-time 1s → Test läuft für 1 Sekunde
  • --host=https://www.google.de → Ziel-Website
  • --csv=result → Speichert die Testergebnisse in CSV-Dateien
     

 

Ergebnisse analysieren

Während des Tests zeigt Locust eine Live-Statistik mit folgenden Metriken:

  • Fails → Anzahl der fehlgeschlagenen Anfragen
  • Average (ms) → Durchschnittliche Antwortzeit der Anfragen
  • # Requests → Gesamtzahl der durchgeführten Anfragen
  • und mehr
Image
Locust Live-Metriken
Bild: Live-Metriken in Locust [Quelle: Qytera]

Falls der Test über die CLI gestartet wurde, finden sich die Ergebnisse in den CSV-Dateien (result_stats.csv, result_failures.csv etc.).

Nach dem Stoppen des Tests wird die Statistikseite angezeigt. Weitere Tabs sind vorhanden, darunter z. B. die Charts zur grafischen Darstellung der Testergebnisse. Die Benutzer können sich in der Web-Oberfläche eine detaillierte Auswertung anzeigen lassen, einschließlich Fehlerstatistiken und Antwortzeiten der Anfragen. Diese Daten sind besonders nützlich zur Identifizierung von Engpässen und zur Optimierung der Systemleistung.

Image
Locust Charts für Analysen
Bild: Locust Charts für weitere Analysen [Quelle: Qytera]

Benchmarking und Performance von Locust

Locust ist aufgrund seiner Python-basierten Architektur grundsätzlich nicht das performanteste Lasttest-Tool. In frühen Versionen war Locust deutlich langsamer als vergleichbare Tools und konnte nur begrenzt Anfragen generieren.

Seit der Einführung der FastHttpLocust-Klasse hat sich die Performance jedoch erheblich verbessert. Tests zeigen, dass Locust nun vier- bis fünfmal schneller Anfragen generieren kann als frühere Versionen.

Dennoch bleibt Locust verhältnismäßig langsam verglichen mit anderen Tools. Der Python Global Interpreter Lock (GIL) zwingt Python und somit Locust in einen single-threaded Modus. Deswegen muss man sich überlegen, wie man das effektiv umgehen kann, zumindest solange bis die GIL Probleme in Python beseitigt sind, woran seit längerem bereits aktiv gearbeitet wird.

"Because Python cannot fully utilize more than one core per process (see GIL), you should typically run one worker instance per processor core on the worker machines in order to utilize all their computing power." [Quelle: Locust]

Um hohe Lasten zu simulieren, muss Locust daher im verteilten Modus betrieben werden. Verteilt kann Locust sowohl auf einer Maschine aber auch auf mehreren im Cluster-Betrieb arbeiten.

Leistungswerte von Locust

  • Ein moderner Server mit 4–8 CPU-Kernen kann etwa 5.000–10.000 RPS (Requests per Second) generieren.
  • Um größere Lasten zu simulieren, kann Locust mit dem --master-Modus in einer verteilten Umgebung betrieben werden.
  • Für große Lasttests ist es notwendig, mehrere Instanzen (--worker) zu starten, da der --master-Prozess selbst zum Flaschenhals werden kann.

Diese Verbesserungen machen Locust nun auch für größere Testszenarien praktikabel, während es früher eine eher begrenzte Skalierung hatte. [Quelle: Grafana Labs]

 

Lasttests in der Cloud mit Locust Cloud

Mit Locust Cloud gibt es mittlerweile eine gehostete Lösung, die Lasttests erheblich vereinfacht.

Was ist Locust Cloud?

Locust Cloud ist ein skalierbarer, gehosteter Dienst, mit dem Lasttests durchgeführt werden können, ohne eigene Infrastruktur zu betreiben. Damit eignet es sich besonders für Teams, die sich nicht um die Bereitstellung und Wartung von Test-Servern kümmern wollen.

Vorteile von Locust Cloud

  • Kein eigenes Hosting von Lastgeneratoren erforderlich
  • Skalierung von Tests mit wenigen Klicks
  • Automatische Berichterstattung und detaillierte Analysen
  • Nutzung von Locust-Skripten ohne Änderungen
  • Möglichkeit, Tests über eine intuitive Web-Oberfläche zu starten und zu verwalten
  • Zugriff auf erweiterte Berichte und historische Testergebnisse zur besseren Performance-Analyse

Mit Locust Cloud können Lasttests unabhängig von lokalen Maschinen skaliert und in einer stabilen Umgebung ausgeführt werden. Diese Option ist besonders für größere Teams oder Unternehmen interessant, die regelmäßig Performancetests durchführen und deren Testanforderungen eine Cloud-basierte Lösung erfordern.

Weitere Informationen zur Locust Cloud finden Sie hier.

Image
Locust Cloud
Bild: Locust Cloud [Quelle: Qytera]

 

Locust in Azure Load Testing nutzen

Microsofts Azure Load Testing unterstützt nun neben JMeter auch Locust als Performance-Test-Tool. Dadurch lassen sich Performancetests mit Locust nahtlos in die Azure-Umgebung integrieren und mit anderen Microsoft-Diensten kombinieren.

Im Vergleich zu Locust Cloud bietet Azure Load Testing tiefere Integration in Azure-Dienste, was insbesondere für Unternehmen von Vorteil ist, die bereits in der Microsoft-Cloud arbeiten. Während Locust Cloud sich primär darauf konzentriert, Locust-Tests ohne eigene Infrastruktur auszuführen, ermöglicht Azure Load Testing zusätzlich:

  • Direkte Verbindung zu Azure Monitor: Testergebnisse lassen sich mit Live-Metriken aus Azure-Anwendungen verknüpfen, um CPU-Auslastung, Speicherverbrauch und andere Systemwerte direkt zu analysieren.
  • Einfache Skalierung innerhalb der Azure-Cloud: Performance Tests lassen sich automatisch auf mehrere Azure-Instanzen verteilen, ohne dass separate Worker-Prozesse verwaltet werden müssen.
  • Nahtlose DevOps-Integration: Tests können direkt in Azure Pipelines eingebunden werden, um automatisierte Performance Tests als Teil des CI/CD-Prozesses durchzuführen.
  • Vereinfachtes Kostenmanagement: Statt eine eigene Umgebung für Locust bereitzustellen oder separate Cloud-Services zu nutzen, können Performance Tests über bestehende Azure-Abonnements abgerechnet und verwaltet werden.
     

Eine Schritt-für-Schritt-Anleitung zur Nutzung von Locust in Azure Load Testing gibt es hier:
➡️ Azure Load Testing mit Locust

Diese Erweiterung macht Locust besonders für Unternehmen mit bestehender Azure-Infrastruktur interessant, die Cloud-native Performancetests durchführen möchten, ohne separate Lasttest-Umgebungen aufzubauen.

Webinar: Cloud-basiertes Performance Testing mit Microsoft Azure Load Testing

 

Fazit zu Performancetests mit Locust

Locust bietet eine flexible Möglichkeit, Lasttests in Python zu implementieren. Durch die Verbesserungen der letzten Jahre ist Locust inzwischen auch für größere Lasttests eine Option. Mit der neuen Locust Cloud-Lösung können Tests zudem in der Cloud ausgeführt werden, ohne sich um Infrastruktur kümmern zu müssen. Es bleibt die persönliche Entscheidung, ob die Entwicklung in einer Code-Umgebung oder ein Tool mit umfangreicher Benutzeroberfläche besser zum jeweiligen Anwendungsfall passt. Ich persönlich bevorzuge immer * as Code Ansätze und mag daher Tools wie Locust oder auch k6.

 

 

FAQ: Häufig gestellte Fragen zu Performance Tests und Locust

Was sind Performance Tests und warum sind sie wichtig?

Performance Tests, auch als Lasttests oder Leistungstests bekannt, sind essenziell, um die Leistung und Skalierbarkeit von Webanwendungen unter verschiedenen Bedingungen zu bewerten. Sie helfen Entwicklern und Testern, Engpässe zu identifizieren, die Ladezeiten zu optimieren und eine zuverlässige Benutzererfahrung sicherzustellen.

Welche Metriken sind bei Performance Tests entscheidend?

Zu den wichtigsten Metriken gehören:

  • Ladezeiten – Wie lange dauert es, bis eine Seite oder API antwortet?
  • Fehlerquoten – Wie viele Anfragen schlagen fehl?
  • Antwortzeiten – Wie schnell reagiert die Anwendung unter Last?
  • Durchsatz (Requests per Second, RPS) – Wie viele Anfragen kann die Anwendung gleichzeitig verarbeiten?
  • Ressourcenauslastung – Wie stark werden CPU, RAM und Netzwerk belastet?
     

Warum sollte man Lasttests durchführen?

Lasttests helfen dabei, sicherzustellen, dass eine Anwendung auch unter hoher Last stabil und zuverlässig bleibt. Sie decken Engpässe auf, bevor diese in der Produktion zu Problemen führen, und ermöglichen es, die Infrastruktur gezielt zu optimieren.

Was ist Locust und wie unterscheidet es sich von anderen Tools?

Locust ist ein Open-Source-Tool für Lasttests, das in Python geschrieben wurde. Es ermöglicht es, Lasttests als Code zu definieren und flexibel anzupassen. Im Gegensatz zu anderen Tools wie JMeter oder k6 setzt Locust auf eine eventbasierte Architektur, was es besonders effizient macht.

Ist Locust für große Lasttests geeignet?

Locust ist grundsätzlich gut skalierbar, allerdings bleibt es aufgrund der Python-Architektur single-threaded. Um große Lasten zu simulieren, muss es im verteilten Modus betrieben werden, bei dem mehrere Worker-Instanzen die Last auf mehrere CPU-Kerne oder Server verteilen.

Welche Alternativen gibt es zu Locust?

Die Wahl des richtigen Tools hängt von den individuellen Anforderungen ab. Manche bevorzugen eine benutzerfreundliche Oberfläche, andere legen Wert auf eine nahtlose CI/CD-Integration oder setzen auf eine andere Programmiersprache wie JavaScript. Alternativen zu Locust sind beispielsweise JMeter, Gatling oder k6, die jeweils unterschiedliche Stärken bieten.

Kann Locust in einer Cloud-Umgebung verwendet werden?

Ja, mit Locust Cloud gibt es eine gehostete Lösung, die es ermöglicht, Lasttests ohne eigene Infrastruktur durchzuführen. Diese Option eignet sich besonders für Teams, die Tests skalierbar und ohne komplexe Setups durchführen möchten.

Wo finde ich weiterführende Informationen zu Performancetests?

Eine ausführliche Einführung in das Konzept von Last- und Leistungstests gibt es hier:
➡️ Grundlagen von Last- und Performance-Tests

Wer verschiedene Tools miteinander vergleichen möchte, findet hier eine umfassende Übersicht:
➡️ Die besten Performance-Testing-Tools im Überblick

 

Veröffentlicht am 13.November 2024

Aktualisiert am 05.März 2025

Matthias Eggert

DevOps Engineer

Matthias Eggert ist ein erfahrener DevOps-Engineer mit starkem Fokus auf Testautomatisierung und Qualitätssicherung. Nach vielen Jahren in der Automobilbranche, wo er sicherheitskritische Systeme wie Bremssysteme und Batteriemanagementlösungen betreute, brachte er sein Wissen auch bei Qytera ein. Sein Schwerpunkt lag dort auf modernen Testing-Strategien, CI/CD-Pipelines und Cloud-Technologien. Als Jenkins- und AWS-zertifizierter Experte kombinierte er bei Qytera sein tiefes Verständnis für DevOps mit innovativen Testansätzen, um robuste und effiziente Softwarelösungen zu gewährleisten.

Finden Sie weitere interessante Artikel zum Thema: