
Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.
Bei JMeter handelt es sich um ein Programm zur Durchführung von Lasttests und Performancemessungen. Es ist in Java geschrieben und wurde ursprünglich für den Test von Webanwendungen entwickelt. Die Entwicklung wird von der Apache Jakarta Group vorangetrieben. Die Software selbst ist also Open Source, steht unter der Apache Lizenz. Derzeit liegt das Tool in der Version 2.0.1 vor. Es wird ständig um neue Module erweitert. Somit lohnt sich ein regelmäßiger Blick auf die Seite.
Auf der Homepage des Projekts kann die aktuelle Version des Programms heruntergeladen und in ein beliebiges Verzeichnis entpackt werden. Für den Betrieb wird ein Java Development Kit (JDK) ab Version 1.4 vorausgesetzt. Mittels dem unter /bin liegenden Programm jmeter.sh lässt sich JMeter starten und öffnet eine übersichtliche, grafische Oberfläche.
Das Hauptfenster ist in zwei Bereiche aufgeteilt. Die Baumstruktur auf der linken Seite zeigt einen Überblick über das aktuell geöffnete Projekt, den so genannten Testplan mit seinen einzelnen Elementen. Neue Elemente können über das im oberen Teil der Anwendung befindliche Menü oder über das Kontextmenü eines bestehenden Elementes hinzugefügt werden. Auf der rechten Seite erscheinen die Eigenschaften des auf der linken ausgewählten Elements, deren Einstellungen dort geändert werden können (in Abbildung 1 sind das z. B. die "Graph Results").
Abb. 1: Der Listener "Graph Results" zeigt die Daten des Testlaufs an.
Über das erwähnte Menü können Testpläne erstellt und geladen, Elemente hinzugefügt und entfernt sowie Tests gestartet und gestoppt werden.
Wie bereits erwähnt, besteht ein Projekt aus einem Testplan. Dieser enthält eine Abfolge von Elementen, die bei Ausführung des Tests abgearbeitet werden. Zu den Elementen gehören mindestens eine Thread Group, Logic Controller, Listener, Timer, Sampler sowie Assertions und Configuration Elements. Diese Elemente werden im Folgenden beschrieben.
Ein Testplan enthält mindestens eine Thread Group. In einer Thread Group ist beschrieben, wie viele Threads innerhalb welcher Zeitspanne wie oft gestartet werden sollen. Dabei sind die Threads mit Benutzern zu vergleichen, die z. B. auf einen Webserver zugreifen. D. h. ein Thread simuliert die Aktivitäten bzw. Aktionen eines einzelnen Benutzers.
Abbildung 2 zeigt exemplarisch die Einstellungsmöglichkeiten einer Thread Group. Hier werden 1000 Benutzer innerhalb von 2500 Sekunden (alle 2,5 Sekunden ein Benutzer) gestartet. Der Test startet am 4.7.2004 um 20:00 Uhr und endet spätestens um 0:00 Uhr, sofern der Test nicht vorher abgeschlossen ist. Liefert ein Thread einen Fehler, so wird der komplette Test abgebrochen.
Abb. 2: Die Einstellungsmöglichkeiten einer Thread Group.
Ein weiteres Element sind die Logic Controller. Mit ihnen kann genauer bestimmt werden, wie oft und wann eine Aktion durchgeführt wird. Der "Nur einmal Kontroller" führt ihm untergebene Aktionen nur ein einziges Mal aus. Dies ist z. B. nützlich für das Aufrufen einer Loginseite am Anfang eines Tests. Weitere Controller sind Wiederholungs-, Zufalls- oder Durchsatzcontroller.
Listener sammeln die Informationen, die während eines Testdurchlaufs anfallen und stellen diese tabellarisch oder grafisch dar. Abbildung 1 zeigt den Listener "Graph Results", der neben den eigentlichen Daten auch Kurven für Durchschnitt, Abweichung und Durchsatz anzeigt. Dabei beschreibt die X-Achse die einzelnen Threads und die Y-Achse die Zeit, die ein Thread für seinen Testdurchlauf gebraucht hat.
Listener sammeln nur Daten für Elemente auf gleicher Ebene oder einer Ebene tiefer im Baum. Somit sind unterschiedliche Auswertungen und Darstellungen der Testergebnisse leicht möglich.
Timer ermöglichen es, eine Verzögerung zwischen der Ausführung von Threads einzubauen. Auch hier gibt es eine ganze Reihe von Timern mit konstanten oder zufälligen Delays.
Die Sampler bilden den Kern eines jeden Tests. Hier wird die Aufgabe angegeben, mit der ein Server unter Last gesetzt wird. In der aktuellen Version 2.0.1 von JMeter lassen sich folgende Sampler wählen:
Dabei lässt sich mit einem FTP Request ein FTP-Server, mit einem HTTP Request ein Webserver, mit einem JDBC Request eine Datenbank usw. mit Anfragen befeuern. Sehr interessant ist auch der Java Request, der es erlaubt, kleine Javaprogramme als J2EE-Clients zu schreiben, die dann tausendmal aufgerufen werden und so die Standhaftigkeit eines J2EE-Servers testen.
Mit Hilfe von Assertions und Configuration Elements lassen sich Sampler noch erweitern.
Assertions erlauben es, Antworten auf einen Request auszuwerten. So lässt sich bei einem HTTP Request nicht nur feststellen, ob die Seite erreichbar war, sondern auch, ob sie den richtigen Inhalt zurückliefert. Die Resultate einer Assertion werden durch einen Assertion Listener gesammelt und ausgewertet.
Configuration Elements hängen an einem Sampler und dienen dazu, ihn zu modifizieren. Für einen HTTP Request können z. B. Angaben über Protokoll, Servername, Pfad und Portnummer gemacht werden.
Sollte ein Clientrechner für die Masse an zu simulierenden Benutzern nicht ausreichen, auch um den potenziellen Flaschenhals "Netzwerk" zu vermeiden, besteht die Möglichkeit, JMeter auf mehrere Clients zu verteilen und von einem Client aus zentral zu steuern. Dazu wird JMeter einfach auf allen Clientrechnern entpackt und das Skript jmeter-server im Verzeichnis /bin gestartet. Auf dem zentralen Rechner, der die Clients verwaltet, wird eine Liste aller IP-Adressen der Clientrechner in die jmeter.properties eingetragen und JMeter dann wie üblich gestartet. Gestartet wird der Test über Start -> Remote start all. Somit beteiligen sich alle Rechner an dem Lasttest und das Sammeln und Auswerten der Daten übernimmt der zentrale JMeter Client.
Ist ein Testplan einmal erstellt, kann er auch ohne grafische Oberfläche ausgeführt werden. Dies macht besonders auf Rechnern ohne laufenden X-Server oder mit wenig Speicher Sinn, denn die GUI ist sehr speicherhungrig. Gestartet wird über die Kommandozeile "jmeter –n –t <testplanname>.jmx", wobei testplanname den zuvor abgespeicherten Testplan bezeichnet. Dieser trägt die Endung ".jmx".
Die Vorteile liegen auf der Hand. JMeter lässt sich schnell in einer aktuellen Version aus dem Internet herunterladen. Die Bedienung ist relativ einfach und gut dokumentiert. Anders als bei kommerziellen Tools, die mit vielen Funktionen überlastet sind, kann bei JMeter sofort mit dem Testen begonnen werden.
Da das Programm in Java geschrieben ist, läuft es auf nahezu jedem Betriebssystem. Durch die Modularität und Erweiterbarkeit lässt es sich individuell an die Testumgebung anpassen. Und schließlich ist JMeter als Open Source Software ein kostenloses Tool.
Andre Dirr (info@ordix.de).