Was ist JMeter
JMeter ist eine von der Apache Foundation in Java entwickelte Open Source Software zur Durchführung von Last und Performance Tests. Das Tool unterstützt nicht nur die gängigen HTTP und HTTPS Protokolle für die Umsetzung der Last Tests für die Web Anwendungen, sondern auch weitere Standards wie FTP, JDBC für Datenbankabfragen und SOAP, um Backend-Kommunikation zu emulieren und zu testen. JMeter wird als quelloffene Software unter der Apache-Lizenz 2.0 entwickelt. JMeter zählt damit zu dem wenigen umfassenden und sehr funktionsreichen Open Source Werkzeugen im Umfeld der Last- und Performance Tests und ist deshalb sehr beliebt.
Funktionsweise
Logik, Timer und Sampler: Testpläne in JMeter
Das Herz von JMeter sind die sogenannten Testpläne. Testpläne sind XML-basierte Schemata, in denen definiert wird, wie ein Lasttest auf einem Server ablaufen soll. Darin werden die Requests (Sampler genannt) festgelegt, die nach einem definierten Lastprofil von JMeter abgeschickt und validiert werden. Für die flexible und feingranulare Zusammensetzung der Abläufe in Testplänen stehen eine ganze Reihe von Logik-Funktionen zur Verfügung: If-Weichen, Schleifen, Switches und viele weitere. Mit etwas Mühe lassen sich auf dieser Basis aufwendige Scripts schreiben, die das Verhalten menschlicher Nutzer wirklichkeitsgetreu nachbilden. Zudem ist es möglich, Timer zu definieren, die helfen, typische Pausen zwischen Anfragen einzuhalten, um den getesteten Server nicht atypisch zu überlasten. Neben konstanten Timern, die in festen Intervallen feuern, stehen auch Gaußsche Zufallstimer zur Verfügung, die die Abfragen zufällig in einem zuvor definierten Zeitrahmen verteilen. Die Last and Performance Tests werden dadurch wirklichkeitsnäher und emulieren echte Szenarien realistischer.
Zu den unterstützten Logik-Funktionen zählen unter anderem:
- If-Controller
- Zufalls-Controller
- Switches
- While-Schleifen
- ForEach-Schleifen
Neben der Möglichkeit, die HTTP Requests manuell zu spezifizieren, besteht die Option, diese automatisch aufzuzeichnen. Dazu wird JMeter als Proxy-Server zwischen einen Webbrowser und den zu testenden Server geschaltet. Insbesondere beim Test von Web-Apps und anderen Seiten mit vielen dynamischen Inhalten ist das oft der praktikabelste Weg, um die umfangreichen und komplexen Interaktionen schnell als „Testschritte“ (Transaktionen) zu generieren.
Die Analyse per Listener
Der Listener erstellt bei der Nutzung des Samplers unterschiedliche Log-Dateien, in die eine Vielzahl von Informationen während der Testdurchführung gesammelt und geschrieben werden. Response-Codes, Antwortzeiten, Latenz, die Anzahl aktiver Threads und viele weitere Informationen können so erhoben werden. Diese Daten lassen sich im einfachsten Fall als simple CSV-Tabelle speichern. Doch auch komplexere, XML-basierte Formate, die von externen Programmen importiert werden können, können per JMeter via Listener erstellt werden. Auf Wunsch kann JMeter auf Grundalge der erfassten Laufzeit-Informationen zudem einfache Graphen im grafischen User Interface generieren und darstellen. Insbesondere um einen schnellen Überblick über Response-Zeiten zu erhalten, ist das praktischer, als die Rohdaten in ein externes Analyseprogramm zu laden.
Vor- und Nachteile
JMeter ist eines der am weitesten verbreiteten Tools, um Lasttests der Web Anwendungen durchzuführen. Als in Java entwickeltes Programm ist JMeter grundsätzlich plattformunabhängig nutzbar. Nachteilig ist allerdings, dass durch die Java Virtual Machine ein gewisser Overhead entsteht, der je nach verwendeter Hardware einen mehr oder weniger stark spürbaren Leistungsverlust bedeutet.
Vorteile von JMeter
- Open Source, keine Kosten
- Leicht zu installieren (copy deployment)
- Protokoll-Mix in einem JMX Skript
- Plattform unabhängig (pure Java)
- Record/Replay
- Plugin Erweiterungen
- Master/Slave Architektur
- Große aktive Online Community
- Kommerzieller Support buchbar
- Integration InfluxDB, Prometheus, Dynatrace usw.
- Integration in viele CI / 3-rd Party Lösungen
- Klare systematische GUI
Nachteile von JMeter
- Rudimentäre Verwaltung für große Testprojekte
- Rudimentäre Workload Modelle
- Rudimentäres Monitoring
- Limitierte Protokoll Anzahl
- Keine Ajax, Javascript, Flash Unterstützung
- Kaum Reporting Möglichkeiten
- Keine Unterstützung bei Korrelation und Substitutionen
- Umständliche Verteilung der Testdaten
- Xpath, JSON Path, CSS, Regular Expressions Know-How notwendig
- Heap Memory Probleme
- Hoher Ressourcen Verbrauch
- Umständliche Aufzeichnung mit Proxy
- Komplizierte Lastverteilung auf mehrere Slaves, RMI Limitierungen
Weiterführende Links: