Portfolio |

Getting Started with JMeter

Lara gibt euch einen Überblick über die verschiedenen Arten von Performancetests und stellt euch Apache JMeter als Tool für die Leistungsmessung vor.

Softwaretests werden eingesetzt, um die Funktionalität der Software gemäß ihren Anforderungen zu bewerten und die Qualität zu messen. Softwarequalität umfasst jedoch mehr als nur die Beseitigung der beim Test aufgedeckten Fehlerwirkungen. Vielmehr beschreibt sie den Grad, in dem das System die gestellten Anforderungen sowie die Bedürfnisse und Erwartungen der Nutzer erfüllt. Das schließt Quellcode ebenso ein wie die GUI, sofern vorhanden.

Softwarequalität lässt sich dabei an mehreren Faktoren messen, die zum Beispiel im Industriestandard ISO/IEC 25010 genannt werden. Diese Normen enthalten eine Vielzahl von Faktoren, die zur Qualitätssicherung beitragen können. Dabei ist es immer notwendig, Schwerpunkte zu setzen und diese zu priorisieren.

Performancetests werden in diesem Zusammenhang eingesetzt, um die Gesamtperformance der Software für den Endkunden zu ermitteln. Der Begriff Performancetest fasst dabei jede Art von Softwaretests zusammen, die Qualitätsmerkmale wie Skalierbarkeit, Zuverlässigkeit, Stabilität, Geschwindigkeit, Leistung und Ressourcennutzung untersuchen. Die Ziele solcher Tests können dabei unterschiedlich sein. Beispielsweise kann damit nachgewiesen werden, dass das System die Leistungskriterien erfüllt. Darüber hinaus kann aber auch herausgefunden werden, welche Teile des Systems zu einer schlechten Leistung führen.

Testarten von Performancetests

Performancetests haben das Ziel, das Systemverhalten wie Antwortzeiten, Durchsatz und detaillierte Monitoring-Informationen über alle Hardware- und Softwarekomponenten zu sammeln und auszuwerten. Dabei ist der Performancetest ein Überbegriff für verschiedene Testarten mit unterschiedlichen Zielen, wie auf nachfolgender Grafik zu sehen ist:

Abbildung 1: Welche Testarten gibt es und was kann man damit erreichen?

Lasttest:

  • Belastungsfähigkeit des Systems unter erwarteten Bedingungen im Normalbetrieb bestimmen

Stresstest:

  • Erwartetes Maß der Last so lange erhöhen, bis funktionale Fehler auftreten
  • Ziel: Punkt der maximalen Belastung finden

Dauerlasttest:

  • Kontinuierliche Last wird über einen längeren Zeitraum hinweg erzeugt, um Produktivbetrieb zu simulieren
  • Ziele: Langzeitstabilität, Ressourcenbedarf und Antwortzeitverhalten prüfen

Skalierbarkeitstest:

  • Durch Lasterhöhung wird irgendwann der Punkt erreicht, ab dem eine weitere Lasterhöhung einen stark überproportionalen Anstieg der Antwortzeiten zur Folge hat
  • Ziel: testen, inwiefern sich diese Grenze durch Hinzunahme von Hardware- und Softwarekomponenten nach oben verschieben lässt

Performancetests mit Apache JMeter

Apache JMeter ist eine quelloffene, reine Java-Software, die für Performancetests entwickelt wurde. Ursprünglich wurde JMeter zum Testen von Webanwendungen entwickelt, erweitert seine Anwendungsbereiche aber immer mehr. Mittlerweile können statische und dynamische Ressourcen wie Datenbanken, SOAP/REST-Webdienste, Netzwerkprotokolle für E-Mail-Dienste, LDAP, Java-Objekte und mehr getestet werden.

Die JMeter-Architektur basiert auf Plugins. Jedes Plugin dient einem anderen Zweck und der Benutzer kann jede benötigte Funktionalität selbstständig hinzufügen. Es kann dabei auf eine Reihe von verschiedenen Plugins zurückgegriffen werden. Die Community hinter JMeter entwickelt selbst ständig neue Plugins und auch kommerziell entwickelte Plugins können mit entsprechenden Lizenzen genutzt werden. Außerdem besteht jederzeit die Möglichkeit, selbstständig ein Plugin zu programmieren und JMeter damit zu erweitern.

Die Komponenten von JMeter

Apache JMeter trennt alle Komponenten nach ihrer Funktionalität in folgende Gruppen:

  • Test Plan: Ausgangspunkt für die Testausführung. Hier werden alle Komponenten des Tests abgespeichert.
  • Threads (Users): Virtuelle User können ausgeführt werden. Die Reihenfolge, Wiederholungen und die Anzahl der Anfragen können hier festgelegt werden.
  • Sampler: Bilden das Herzstück von JMeter. Sie enthalten Komponenten zum Simulieren von Anforderungen verschiedener Protokolle wie HTTP, JDBC, FTP, SMTP usw.
  • Logic Controller: Definieren den Ablauf und die Gruppierung der Sampler. Für den Login wird beispielsweise das Login-Request nur einmal ausgeführt, während andere Request danach mehrmals ausgeführt werden.
  • Configuration Elements: Ermöglichen es, Voreinstellungen und Variablen zu erstellen, die von Samplern verwendet werden. Hiermit können beispielsweise Testdaten wie Benutzernamen und Passwörter eingebunden werden.
  • Listeners: Ermöglichen es, die Testergebnisse zu speichern und sie anzeigen zu lassen, zum Bespiel mit verschiedenen Diagrammen. Es werden dabei Kennzahlen wie die Anzahl der Benutzer, Treffer pro Sekunde, Fehler pro Sekunde, Reaktionszeit, Latenzzeit, Verbindungszeit usw. ausgewertet.

Darüber hinaus gibt es noch mehr Komponenten. Alle werden nach dem Grundsatz „you add any component on need basis” hinzugefügt.

Der Workflow von JMeter

Bei dem Test einer Anwendung erstellt JMeter virtuelle Nutzer, die Anfragen an den Zielserver senden. Der Test wird nach den entsprechenden Vorgaben in den Komponenten des Testplans ausgeführt. Alle Daten über das Verhalten des Servers werden dabei von JMeter im CSV- oder XML-Format abgespeichert.

Zum Schluss kann ein umfassender HTML-Report generiert werden. Es werden dabei die von JMeter generierten CSV-Dateien gelesen und verarbeitet, um HTML-Dateien mit Diagrammansichten zu erzeugen. Dabei werden zum Beispiel Diagramme über die Reaktionszeit, Latenz, Verbindungszeit und Zugriffe pro Sekunde erstellt. Sollten die voreingestellten Diagramme den Anforderungen nicht genügen, können auch eigene Graphen erstellt werden.

Abbildung 2: So sieht der grundlegende funktionelle Workflow in JMeter aus

Was erwartet euch noch?

Nach diesem kurzen Einstieg bleiben natürlich noch einige Fragen offen.

  • Wie schlägt sich JMeter im Vergleich mit einem kommerziellen Tool?
  • Wie CI/CD tauglich ist JMeter?
  • Welche Funktionen kann JMeter anbieten, die auf dem Markt derzeit wenig bis gar nicht vertreten sind?

Auf diese und weitere Fragen werden wir in nachfolgenden Artikeln eingehen.