Load Testing
Load Testing ist eine Methode des Performance Testings, bei der das Verhalten einer Anwendung unter einer erwarteten, realistischen Last überprüft wird. Ziel ist es, Performance-Probleme früh zu erkennen, bevor sie Nutzer in der Produktion bemerken. Load Testing hilft, Aussagen über Durchsatz, Reaktionszeiten, Stabilität und Ressourcenbedarf unter normaler Last zu treffen.
In a Nutshell
- Load Testing simuliert die erwartete Nutzerlast einer Anwendung.
- Es misst Durchsatz, Reaktionszeit, Fehlerrate und Ressourcennutzung.
- Wichtige Werkzeuge sind k6, JMeter und Gatling.
- Load Testing unterscheidet sich von Stress, Spike und Soak Testing.
- Lastprofile definieren, wie die Last über die Zeit verteilt wird.
Was ist Load Testing und wozu dient es?
Load Testing prüft, ob eine Anwendung die erwartete Nutzerlast verkraften kann. Dabei wird die Anwendung mit einer definierten Anzahl von virtuellen Nutzern oder Anfragen über einen bestimmten Zeitraum belastet. Die Ergebnisse zeigen, ob die Anwendung innerhalb der akzeptablen Grenzen arbeitet oder ob Engpässe auftreten.
Typische Fragen, die Load Testing beantwortet:
- Wie viele Nutzer können gleichzeitig arbeiten, ohne dass die Reaktionszeit zu hoch wird?
- Wie viele Anfragen pro Sekunde verarbeitet das System stabil?
- Steigt die Fehlerrate bei erhöhter Last?
- Wie verhalten sich CPU, Speicher und Datenbank unter Last?
- Erfüllt das System die definierten Service Level Agreements?
Unterschied zu anderen Performance-Testarten
Performance Testing ist ein Oberbegriff für verschiedene Testarten. Load Testing ist eine davon, aber nicht die einzige.
- Load Testing: Prüft das Verhalten unter erwarteter, realistischer Last.
- Stress Testing: Geht über die erwartete Last hinaus und findet die Grenzen des Systems.
- Spike Testing: Erzeugt sehr schnelle, extreme Lastspitzen, beispielsweise bei Verkaufsstarts.
- Soak Testing: Läuft über lange Zeit unter konstanter Last, um Ressourcenlecks zu finden.
Wichtige Kennzahlen
Durchsatz
Der Durchsatz gibt an, wie viele Anfragen oder Transaktionen das System in einer bestimmten Zeit verarbeiten kann. Er wird häufig in Anfragen pro Sekunde angegeben.
Reaktionszeit
Die Reaktionszeit ist die Dauer von einer Anfrage bis zur vollständigen Antwort. Sie wird oft als Durchschnitt, Median oder Perzentil ausgewertet. Das 95. Perzentil zeigt, wie langsam die Anfragen für die meisten Nutzer sind.
Fehlerrate
Die Fehlerrate ist der Anteil der Anfragen, die nicht erfolgreich beantwortet werden. Ein plötzlicher Anstieg deutet auf einen Engpass hin.
Ressourcennutzung
Ressourcennutzung umfasst CPU, Arbeitsspeicher, Netzwerk und Datenträger. Sie hilft, die Ursache von Performance-Problemen zu finden.
Concurrent User
Concurrent User sind gleichzeitig aktive Nutzer, die zur selben Zeit Anfragen senden. Sie sind wichtig, um Lastprofile realistisch zu planen.
Lastprofile
Lastprofile definieren, wie sich die Last über die Zeit verteilt. Sie helfen, realistische Szenarien abzubilden.
Konstante Last
Bei einer konstanten Last bleibt die Anzahl der Nutzer oder Anfragen über einen längeren Zeitraum gleich. Dieses Profil eignet sich, um die Stabilität unter einer definierten Baseline zu prüfen.
Ramp-up
Ramp-up steigert die Last schrittweise an, bis die Zielgröße erreicht ist. So kann man beobachten, wie sich die Anwendung verhält, wenn immer mehr Nutzer hinzukommen. Ramp-up ist besonders wichtig, um den Übergang von Leerlauf zu Normalbetrieb zu testen.
Spitzenlast
Spitzenlast simuliert plötzliche, kurze Lastspitzen. Ein Beispiel ist der Ansturm auf einen Ticketshop kurz nach dem Verkaufsstart. Dieses Profil zeigt, wie gut das System mit abrupten Laständerungen umgeht.
Soak Test
Ein Soak Test lässt die Anwendung über viele Stunden oder sogar Tage unter konstanter Last laufen. Dabei werden Ressourcenlecks wie wachsender Speicherverbrauch, Verbindungslecks oder sich füllende Log-Dateien sichtbar.
Stufenlast
Stufenlast erhöht die Last in mehreren Stufen. Zwischen den Stufen gibt es kurze Plateaus. Dieses Profil eignet sich gut, um die Performance bei verschiedenen Laststufen zu vergleichen und den Punkt zu finden, an dem die Performance abfällt.
Praxisbeispiel
Das folgende Beispiel zeigt einen typischen Load-Test für eine Webanwendung. Dieses Beispiel ist gewählt, weil es die wichtigsten Lastprofile miteinander verbindet: Ramp-up, konstante Last und Auslastung. Das Ziel ist es, zu zeigen, wie ein realistischer Test aufgebaut ist und welche Kennzahlen dabei beobachtet werden.
Ziel: 1.000 gleichzeitige Nutzer, Reaktionszeit unter 500ms
Phasen:
1. 100 Nutzer für 2 Minuten (Warm-up / Ramp-up)
2. 500 Nutzer für 5 Minuten (erste Plateau)
3. 1.000 Nutzer für 10 Minuten (Ziel-Last / Plateau)
4. Auslastung für 2 Minuten (Rückgang)
Warum diese Phasen?
- Warm-up mit 100 Nutzern: Die Anwendung und Infrastruktur werden langsam auf Betriebstemperatur gebracht. Datenbank-Caches werden gefüllt und Verbindungspools initialisiert.
- 500 Nutzer für 5 Minuten: Erstes Plateau, um das Verhalten bei mittlerer Last zu beobachten und frühe Engpässe zu erkennen.
- 1.000 Nutzer für 10 Minuten: Das eigentliche Ziel. Hier wird geprüft, ob die Anwendung die erwartete Spitzenlast über einen längeren Zeitraum stabil verkraftet.
- Auslastung: Der geordnete Rückgang der Last zeigt, ob sich das System schnell erholt und ob Ressourcen wie Speicher wieder freigegeben werden.
Während des Tests werden Durchsatz, Reaktionszeit, Fehlerrate und Ressourcennutzung kontinuierlich erfasst. Ergebnisse werden mit den definierten SLAs verglichen.
Wichtige Werkzeuge
k6
k6 ist ein modernes Open-Source-Tool für Load Testing, das von Grafana Labs entwickelt wird. Tests werden in JavaScript geschrieben und können in CI/CD-Pipelines integriert werden. k6 ist besonders beliebt bei Entwicklerteams, weil es leichtgewichtig, script-basiert und gut dokumentiert ist.
Apache JMeter
JMeter ist eines der bekanntesten Load-Testing-Werkzeuge. Es bietet eine grafische Benutzeroberfläche und unterstützt viele Protokolle wie HTTP, SOAP, JDBC und JMS. JMeter ist besonders gut für komplexe Szenarien und Enterprise-Umgebungen geeignet.
Gatling
Gatling ist ein leistungsstarkes Load-Testing-Tool, das Tests in Scala, Kotlin oder Java schreibt. Es zeichnet sich durch hohe Performance des Load-Generators aus und ist ideal für große Lasttests mit vielen virtuellen Nutzern.
Weitere Werkzeuge
- Locust: Python-basiertes Tool mit einfacher Skript-Erstellung.
- Artillery: Modernes Node.js-Tool für Load Testing.
- Loader.io: Cloud-basierter Lasttest-Dienst.
- NeoLoad: Enterprise-Lösung für komplexe Testumgebungen.
Vorteile und Nachteile
| Vorteile | Nachteile |
|---|---|
| Frühe Erkennung von Performance-Problemen | Aufwändige Vorbereitung der Testumgebung |
| Bessere Infrastrukturplanung | Produktionsnahe Testumgebung nötig |
| Validierung von SLAs und Service Level Objectives | Interpretation der Ergebnisse erfordert Erfahrung |
| Reduzierung von Ausfallzeiten in Produktion | Testdaten müssen realistisch und anonymisiert sein |
| Objektive Messung der Nutzererfahrung | Tools und Infrastruktur verursachen Kosten |
| Frühe Planung von Skalierungsmaßnahmen | Load-Tests können produktionsähnliche Systeme belasten |
Best Practices
- Definiere klare Ziele und SLAs vor dem Test.
- Erstelle realistische Lastprofile basierend auf Produktionsdaten.
- Nutze eine produktionsnahe Testumgebung.
- Isoliere externe Systeme wie Zahlungsdienstleister oder E-Mail-Server.
- Überwache Server- und Anwendungsmetriken während des Tests.
- Dokumentiere Testaufbau, Ergebnisse und Maßnahmen.
- Wiederhole Tests nach jeder größeren Änderung.
Prüfungsrelevante Stichpunkte
- Load Testing: Testet das Verhalten einer Anwendung unter erwarteter, realistischer Last.
- Unterschied zu Stress Testing: Load Testing bleibt im erwarteten Bereich, Stress Testing geht darüber hinaus.
- Spike Testing: Simuliert plötzliche, extreme Lastspitzen.
- Soak Testing: Langer Dauerlauf zur Erkennung von Ressourcenlecks.
- Wichtige Kennzahlen: Durchsatz, Reaktionszeit, Fehlerrate, Ressourcennutzung, Concurrent User.
- Perzentile: Das 95. Perzentil ist wichtiger als der Durchschnitt, um die Erfahrung der meisten Nutzer zu bewerten.
- Lastprofile: Konstante Last, Ramp-up, Spitzenlast, Stufenlast, Soak Test.
- Wichtige Werkzeuge: k6, JMeter, Gatling, Locust, Artillery.
- SLA: Service Level Agreement definiert akzeptable Performance-Grenzen.
- Produktionsnahe Testumgebung: Notwendig, um realistische Ergebnisse zu erhalten.
- Testdaten: Müssen realistisch, anonymisiert und repräsentativ sein.
Wichtigste Quellen
Häufig gestellte Fragen
Was ist Load Testing?
Load Testing prüft das Verhalten einer Anwendung unter einer erwarteten, realistischen Last. Es misst Durchsatz, Reaktionszeit, Fehlerrate und Ressourcennutzung.
Was ist ein Lastprofil?
Ein Lastprofil definiert die erwartete Nutzerzahl, Anfragerate und die Verteilung der Transaktionen über die Zeit. Es ist die Basis für realistische Tests.
Welche Kennzahlen misst man beim Load Testing?
Die wichtigsten Kennzahlen sind Durchsatz, Reaktionszeit, Fehlerrate, Ressourcennutzung und die Anzahl der Concurrent User.
Was ist ein Soak Test?
Ein Soak Test ist ein langer Dauerlauf unter konstanter Last. Er dient dazu, Ressourcenlecks wie wachsenden Speicherverbrauch oder verwaiste Verbindungen zu erkennen.
Nenne ein Load-Testing-Werkzeug.
Bekannte Werkzeuge sind k6, Apache JMeter, Gatling, Locust und Artillery.
Was ist Ramp-up?
Ramp-up ist das schrittweise Steigern der Last bis zur Zielgröße. Es hilft, das Systemverhalten beim Anstieg der Nutzerzahl zu beobachten.
Was ist Spitzenlast?
Spitzenlast sind plötzliche, kurze Lastspitzen. Sie simulieren beispielsweise den Ansturm auf einen Shop zu Beginn eines Verkaufs.
Was ist Durchsatz?
Durchsatz ist die Anzahl der Anfragen oder Transaktionen, die das System pro Sekunde verarbeiten kann. Er ist ein zentraler Indikator für die Leistungsfähigkeit.
Was ist eine Fehlerrate?
Die Fehlerrate ist der Anteil der Anfragen, die nicht erfolgreich beantwortet werden. Ein plötzlicher Anstieg deutet auf einen Engpass hin.
Warum ist eine produktionsnahe Testumgebung wichtig?
Unterschiede in Hardware, Datenbankgröße, Netzwerk und Konfiguration können das Ergebnis verfälschen. Eine produktionsnahe Umgebung liefert realistische Ergebnisse.
Was ist der Unterschied zwischen Load Testing und Stress Testing?
Load Testing bleibt im erwarteten Lastbereich. Stress Testing geht darüber hinaus und findet die Grenzen des Systems.
Was ist Reaktionszeit?
Reaktionszeit ist die Dauer von der Anfrage bis zur vollständigen Antwort. Sie wird oft als Durchschnitt, Median oder Perzentil angegeben.
Was ist Concurrent User?
Concurrent User sind gleichzeitig aktive Nutzer, die zur selben Zeit Anfragen an das System senden. Sie sind die Basis für Lastprofile.
Was ist ein Load-Generator?
Ein Load-Generator ist ein System oder Werkzeug, das die virtuelle Last für den Test erzeugt und an die Anwendung sendet.
Wann sollte man Load Testing durchführen?
Load Testing sollte vor Releases, bei Änderungen an der Infrastruktur, bei Performance-Problemen oder vor erwarteten Traffic-Spitzen durchgeführt werden.
Was ist ein Spike Test?
Ein Spike Test erzeugt sehr schnell extreme Lastspitzen und prüft, wie das System mit abrupten Laständerungen umgeht.
Was ist ein Perzentil bei der Reaktionszeit?
Ein Perzentil zeigt, wie viele Prozent der Anfragen unter einem bestimmten Wert liegen. Das 95. Perzentil ist oft aussagekräftiger als der Durchschnitt.
Was ist ein SLA?
Ein SLA, oder Service Level Agreement, definiert die akzeptablen Performance-Grenzen, wie Reaktionszeiten oder Verfügbarkeit.
Was ist ein Stresstest?
Ein Stresstest belastet das System über die erwartete Last hinaus, um die Grenzen und das Verhalten bei Überlast zu finden.
Was sind Testdaten im Load Testing?
Testdaten müssen realistisch, anonymisiert und repräsentativ sein, damit der Test aussagekräftige Ergebnisse liefert.
Weiter im Software Testing Lernpfad
Der nächste Artikel im Software Testing Lernpfad behandelt Performance Testing — wie Performance Testing die Systemleistung umfassend prüft.



