Performance Testing
Performance Testing ist der Oberbegriff fuer Tests, die Geschwindigkeit, Stabilitaet und Skalierbarkeit einer Anwendung messen. Es gehoert zu den wichtigsten nicht-funktionalen Testarten und stellt sicher, dass die Software unter realistischer Last performant und stabil bleibt.
In a Nutshell
- Performance Testing misst Geschwindigkeit, Stabilitaet und Skalierbarkeit.
- Arten: Load, Stress, Spike, Endurance, Volume, Scalability.
- Metriken: Reaktionszeit, Durchsatz, Fehlerrate, Ressourcennutzung.
- Werkzeuge: k6, JMeter, Gatling, Locust.
- Performance Testing ist Teil von Performance Engineering.
Was ist Performance Testing und wozu dient es?
Performance Testing prueft, wie sich eine Anwendung unter verschiedener Last verhaelt. Es beantwortet Fragen wie: Wie schnell reagiert das System? Wie viele Anfragen pro Sekunde verarbeitet es? Wie stabil ist es ueber lange Zeit? Welche Ressourcen werden dabei verbraucht?
Typische Ziele von Performance Testing:
- Nutzererfahrung sicherstellen: Lange Ladezeiten schrecken Nutzer ab und senken Conversion Rates.
- Engpaesse finden: Datenbanken, APIs und Algorithmen koennen Flaschenhaelse sein.
- SLAs validieren: Vereinbarte Reaktionszeiten und Verfuegbarkeit muessen eingehalten werden.
- Kapazitaetsplanung: Wie viele Nutzer kann das System verkraften? Wann muss skaliert werden?
- Stabilitaet pruefen: Laeuft das System auch ueber lange Zeit ohne Ressourcenlecks?
Arten von Performance Tests
Load Testing
Load Testing prueft das Verhalten unter erwarteter, realistischer Last. Es zeigt, ob das System im Normalbetrieb performant und stabil ist. Beispielsweise: 1.000 gleichzeitige Nutzer, Reaktionszeit unter 500ms.
Stress Testing
Stress Testing geht ueber die erwartete Last hinaus. Es findet die Grenzen des Systems und zeigt, wie es sich bei Ueberlast verhaelt. Beispielsweise: Last erhoehen, bis das System zusammenbricht.
Spike Testing
Spike Testing erzeugt sehr schnelle, extreme Lastspitzen. Es simuliert beispielsweise den ploetzlichen Ansturm auf einen Shop zu Beginn eines Verkaufs. Es zeigt, wie gut das System mit abrupten Lastaenderungen umgeht.
Endurance Testing (Soak Testing)
Endurance Testing laesst die Anwendung ueber einen langen Zeitraum unter konstanter Last laufen. Es dient dazu, Ressourcenlecks wie wachsenden Speicherverbrauch, Verbindungslecks oder sich fuellende Log-Dateien zu finden.
Volume Testing
Volume Testing testet das System mit grossen Datenmengen. Es prueft, ob die Datenbank und die Anwendung auch mit Millionen von Datensaetzen performant bleiben.
Scalability Testing
Scalability Testing prueft, wie gut das System skaliert, wenn mehr Ressourcen hinzugefuegt werden. Es zeigt, ob horizontale oder vertikale Skalierung die Performance verbessert.
Wichtige Metriken
Reaktionszeit
Die Reaktionszeit ist die Dauer von einer Anfrage bis zur vollstaendigen Antwort. Sie wird oft als Durchschnitt, Median oder Perzentil ausgewertet. Das 95. Perzentil ist besonders wichtig, weil es zeigt, wie langsam die Anfragen fuer die meisten Nutzer sind.
Durchsatz
Der Durchsatz gibt an, wie viele Anfragen oder Transaktionen das System in einer bestimmten Zeit verarbeiten kann. Er wird in Anfragen pro Sekunde oder Transaktionen pro Minute angegeben.
Fehlerrate
Die Fehlerrate ist der Anteil der Anfragen, die nicht erfolgreich beantwortet werden. Ein ploetzlicher Anstieg deutet auf einen Engpass hin.
Ressourcennutzung
Ressourcennutzung umfasst CPU-Auslastung, Arbeitsspeicher, Netzwerk-Bandbreite und Datentraeger-I/O. Sie hilft, die Ursache von Performance-Problemen zu finden.
Concurrent Users
Concurrent Users sind gleichzeitig aktive Nutzer, die zur selben Zeit Anfragen senden. Sie sind die Basis fuer Lastprofile.
Praxisbeispiel
Das folgende Beispiel zeigt einen typischen Performance-Test-Plan fuer eine Webanwendung. Es wurde gewaehlt, weil es verschiedene Performance-Testarten miteinander verbindet und zeigt, wie Metriken und Ziele zusammenarbeiten.
Ziele:
- Reaktionszeit unter 200ms
- 95. Perzentil unter 500ms
- Fehlerrate unter 0,1 Prozent
- Durchsatz 1.000 Anfragen pro Sekunde
Tests:
- Load Test mit normaler Last
- Stress Test bis zur Grenze
- Endurance Test ueber 24 Stunden
Warum diese Tests?
- Load Test: Prueft, ob das System unter der erwarteten Last von 1.000 Anfragen pro Sekunde die Ziele erfuellt. Das ist der Normalbetrieb.
- Stress Test: Findet die Grenze des Systems. Was passiert bei 2.000 oder 5.000 Anfragen pro Sekunde? Wann steigt die Fehlerrate an?
- Endurance Test: Laeuft das System auch nach 24 Stunden unter Last stabil? Gibt es Speicherlecks oder Verbindungslecks?
Die Metriken werden waehrend des Tests kontinuierlich erfasst und mit den Zielen verglichen. Abweichungen werden analysiert und als Basis fuer Optimierungen verwendet.
Wichtige Werkzeuge
k6
k6 ist ein modernes Open-Source-Tool fuer Performance Testing, das von Grafana Labs entwickelt wird. Tests werden in JavaScript geschrieben und koennen in CI/CD-Pipelines integriert werden.
Apache JMeter
JMeter ist eines der bekanntesten Performance-Testing-Werkzeuge. Es bietet eine grafische Benutzeroberflaeche und unterstuetzt viele Protokolle wie HTTP, SOAP, JDBC und JMS.
Gatling
Gatling ist ein leistungsstarkes Tool, das Tests in Scala, Kotlin oder Java schreibt. Es zeichnet sich durch hohe Performance des Load-Generators aus.
Locust
Locust ist ein Python-basiertes Tool mit einfacher Skript-Erstellung. Es eignet sich gut fuer Teams, die Python bereits nutzen.
Vorteile und Nachteile
| Vorteile | Nachteile |
|---|---|
| Bessere Nutzererfahrung durch optimierte Reaktionszeiten | Komplexe Vorbereitung der Testumgebung |
| Fruehe Erkennung von Engpaessen | Realitaetsnahe Umgebung erforderlich |
| SLA-Validierung und Kapazitaetsplanung | Aufwand fuer Testdaten und Szenarien |
| Objektive Messung der Performance | Tools und Infrastruktur verursachen Kosten |
| Reduzierung von Ausfallzeiten in Produktion | Interpretation der Ergebnisse erfordert Erfahrung |
| Grundlage fuer Skalierungsentscheidungen | Tests muessen regelmässig wiederholt werden |
Best Practices
- Ziele definieren: Klare SLAs und Metriken vor dem Test festlegen.
- Produktionsnahe Umgebung: Testumgebung sollte der Produktion aehneln.
- Realistische Testdaten: Anonymisierte Produktionsdaten verwenden.
- Monitoring: Server- und Anwendungsmetriken waehrend des Tests erfassen.
- Regelmässig wiederholen: Performance Tests bei jeder relevanten Aenderung.
- In CI/CD integrieren: Performance Tests automatisch bei Releases ausfuehren.
- Engpaesse analysieren: Nicht nur messen, sondern auch Ursachen finden.
Prüfungsrelevante Stichpunkte
- Performance Testing: Oberbegriff fuer Tests, die Geschwindigkeit, Stabilitaet und Skalierbarkeit messen.
- Load Testing: Test unter erwarteter, realistischer Last.
- Stress Testing: Test ueber den erwarteten Lastbereich hinaus.
- Spike Testing: Ploetzliche extreme Lastspitzen simulieren.
- Endurance Testing: Langer Dauerlauf zur Erkennung von Ressourcenlecks.
- Volume Testing: Test mit grossen Datenmengen.
- Scalability Testing: Test der Skalierbarkeit bei mehr Ressourcen.
- Wichtige Metriken: Reaktionszeit, Durchsatz, Fehlerrate, Ressourcennutzung, Concurrent Users.
- Perzentile: Das 95. Perzentil ist aussagekraeftiger als der Durchschnitt.
- Wichtige Werkzeuge: k6, JMeter, Gatling, Locust.
- SLA: Service Level Agreement mit vereinbarten Performance-Zielen.
- Performance Engineering: Ganzheitliche Betrachtung von Performance ueber Tests hinaus.
- Latenz: Verzoegerung zwischen Anfrage und erster Antwort.
Wichtigste Quellen
Häufig gestellte Fragen
Was ist Performance Testing?
Performance Testing ist der Oberbegriff fuer Tests, die Geschwindigkeit, Stabilitaet und Skalierbarkeit einer Anwendung messen. Es stellt sicher, dass die Software unter realistischer Last performant bleibt.
Was ist Load Testing?
Load Testing prueft das Verhalten einer Anwendung unter erwarteter, realistischer Last. Es zeigt, ob das System im Normalbetrieb performant und stabil ist.
Was ist Stress Testing?
Stress Testing geht ueber die erwartete Last hinaus und findet die Grenzen des Systems. Es zeigt, wie das System bei Ueberlast reagiert und wann es zusammenbricht.
Was ist Spike Testing?
Spike Testing erzeugt ploetzliche, extreme Lastspitzen. Es simuliert beispielsweise den Ansturm auf einen Shop zu Beginn eines Verkaufs und prueft, wie das System damit umgeht.
Was ist Endurance Testing?
Endurance Testing laesst die Anwendung ueber einen langen Zeitraum unter konstanter Last laufen. Es dient dazu, Ressourcenlecks wie Speicherwachstum oder Verbindungslecks zu finden.
Welche Performance-Metriken gibt es?
Wichtige Metriken sind Reaktionszeit, Durchsatz, Fehlerrate, Ressourcennutzung und Concurrent Users. Sie helfen, die Performance objektiv zu bewerten.
Was ist das 95. Perzentil?
Das 95. Perzentil bedeutet, dass 95 Prozent der Anfragen schneller als dieser Wert sind. Es ist aussagekraeftiger als der Durchschnitt, weil es Ausreisser ausblendet.
Was ist Skalierbarkeit?
Skalierbarkeit ist die Faehigkeit eines Systems, steigende Last durch mehr Ressourcen zu bewaeltigen. Man unterscheidet horizontale (mehr Server) und vertikale (staerkere Server) Skalierung.
Was ist Volume Testing?
Volume Testing testet das System mit grossen Datenmengen. Es prueft, ob Datenbank und Anwendung auch mit Millionen von Datensaetzen performant bleiben.
Welche Werkzeuge gibt es fuer Performance Testing?
Bekannte Werkzeuge sind k6, Apache JMeter, Gatling und Locust. k6 und Locust sind script-basiert, JMeter bietet eine grafische Oberflaeche.
Was ist ein Performance-Engpass?
Ein Performance-Engpass ist eine Komponente, die die Gesamtgeschwindigkeit der Anwendung begrenzt, wie eine langsame Datenbank oder ein unoptimierter Algorithmus.
Was ist Latenz?
Latenz ist die Verzoegerung zwischen einer Anfrage und der ersten Antwort. Sie ist ein wichtiger Indikator fuer die Nutzererfahrung.
Was ist ein SLA?
Ein SLA, oder Service Level Agreement, ist eine Vereinbarung mit definierten Performance-Zielen wie Reaktionszeit, Verfuegbarkeit und Durchsatz.
Warum ist Performance Monitoring wichtig?
Performance Monitoring liefert reale Performance-Daten aus der Produktion und hilft, Engpaesse und Verschlechterungen fruehzeitig zu erkennen.
Was ist Performance Engineering?
Performance Engineering ist die ganzheitliche Betrachtung von Performance ueber Tests hinaus, einschliesslich Architektur, Design und kontinuierlichem Monitoring.
Was ist Scalability Testing?
Scalability Testing prueft, wie gut ein System skaliert, wenn mehr Ressourcen hinzugefuegt werden. Es zeigt, ob horizontale oder vertikale Skalierung die Performance verbessert.
Was ist der Unterschied zwischen horizontaler und vertikaler Skalierung?
Vertikale Skalierung erhoeht die Ressourcen eines Servers, wie CPU und RAM. Horizontale Skalierung fuegt weitere Server hinzu und verteilt die Last.
Was ist Durchsatz?
Durchsatz ist die Anzahl der Anfragen oder Transaktionen, die ein System in einer bestimmten Zeit verarbeiten kann. Er wird in Anfragen pro Sekunde angegeben.
Was ist der Unterschied zwischen Performance Testing und Load Testing?
Performance Testing ist der Oberbegriff. Load Testing ist eine bestimmte Art von Performance Testing, die das System unter erwarteter Last prueft.
Wann sollte man Performance Tests durchfuehren?
Performance Tests sollten vor Releases, bei Architekturaenderungen, bei Performance-Problemen oder vor erwarteten Traffic-Spitzen durchgefuehrt werden.
Weiter im Software Testing Lernpfad
Der nächste Artikel im Software Testing Lernpfad behandelt Security Testing — wie Security Testing Sicherheitslücken aufdeckt.



