Montag, 19. Februar 2018

Generatoren für Lasttests - Jmeter, XLT oder Gatling, welches Tool ist das Richtige?

Lasttest gehen einfach, das ist eine verbreitete Meinung unter Softwareentwicklern. Ja es ist mit den meisten Tools sehr einfach simple Lasttest zu erstellen, die einem "Hello World" Programm entsprechen. Das allein ist natürlich kein Kriterium für die Auswahl eines Lasttest Tools. Wie man sinnvolle Lasttest durchführt wird in einem anderen Artikel beschrieben.

Apache Jmeter 

Jmeter ist der Klassiker, wenn es um Lasttest geht. Jmeter ist in Java geschrieben, lässt sich durch Plugins und eigenen Code erweitern. Viele Plugins sind seit Version 4 Teil von Jmeter. Sonst lassen sich im Internet auch diverse Plugins finden oder man schreibt in Java eine eigenes Plugin, hier z.B. eins zu Testen des Overheads durch HMAC Verschlüsselung (Link). Einfacher ist es selbst Code-Fragmente zu schreiben und direkt im Test auszuführen, dafür gibt es verschiedene Plugins und Sprachen (Beanshell, Groovy). Man kann Test Parametrisieren und auf Properties und Umgebungsvariablen, sehr einfach zugreifen.

Der Test selbst wird mittels einer GUI erstellt und als XML Datei gespeichert. Wenn man will kann man natürlich auch die XML Datei später verändern.

Dei Möglichkeiten Lasttest auszuwerten sind begrenzt aber ausreichend. Für Detailanalysen sollte man der Messungen als CSV protokollieren und mit speziellen Werkzeugen oder Sprachen wie R oder Rstudio durchführen.

Jmeter ist ein ausgereiftes Lastest Tool mit dem Fokus aus Lasterzeugung. Jmeter ist nicht nur für HTTP/S geeignet ist, man kann z.B. auch JDBC oder Mongo Datenbanken testen. Eine weitere Spezialität sind verteilte Lastest um auch grosse Lasten zu erzeugen. Via Script-Sprachen lassen sich die meisten Lasttest-Anforderungen umsetzen. Die Dokumentation ist gut und die Community umfangreich.

Xceptance XLT

XLT, nicht zu verwechseln mit XSLT, ist als kommerzielle Lasttest Werkzeug durch die Firma Xceptance aus Jena entwickelt worden (Link). Seit einiger Zeit ist jedoch frei verfügbar. Diese Professionalität merkt man dem Tool durchgehend an, und es ist schwierig alle Features aufzulisten. Besonders interessant, ist hier die Möglichkeit reale Browser wie den Firefox als Testagenten einzusetzen. Auf diese Weise sind auch gleichzeitig Performance-Messungen möglich.  Im Vergleich zu Jmeter sind die sehr guten Analyse Fähigkeiten hervorzuheben. Es ist für hohe Lasten gut geeignet, fokussiert aber auf HTTP/S. Wem die normalen Fähigkeiten von XLT nicht ausreichen, kann den Lasttest auch als Java Applikation umsetzen, so kann man jede Lasttest-Anforderung umsetzen.

Gatling

Gatling (Link) ist ein relativ neues Lasttest Tool geschrieben in Scale und oft als Herausforderer für die etablierten Lasttest Tools angesehen wird. Lastest werden als Scala Code codiert, wobei für einfache Lasttest kein wirkliches Scala Know-How notwendig ist. Für erfahrene SCALA Entwickler ist es sicher auch einfach anspruchsvolle Lasttest-Anforderungen als Code umzusetzen. Die Dokumentation ist für Anfänger gut aber nicht sehr umfangreich auch die Community ist nicht mit Grösse der Community von Jmeter vergleichbar. Die Auswertungsmöglichkeiten sind eingeschränkt aber sehr bunt.

Empfehlung

Für einfache Lasttest sind alle Tools geeignet, genauso wie für anspruchsvolle Lasttest geeignet sind. Gatling würde ich ausschliessen, weil SCALA Know How erforderlich ist um komplexe Lasttest umzusetzen. SCALA ist keine populäre Programmiersprache. Im TIOBE Index  ist SCALA nicht unter den Top 20 Programmiersprachen und wird die Top 20 auch nie erreichen. Damit zählt auch SCALA zu den exotischen Programmiersprachen. Eigentlich würde man in diese Kategorie auch Beanshell (Jmeter) und Groovy (Jmeter) einsortieren aber diese Sprachen akzeptieren auch Plain Java. Damit ist es deutlich schwerer erfahrene SCALA Programmierer für Gatling zu finden als erfahrenen Java Programmierer für Jmeter oder XLT. Das merkt man auch der Community und der Dokumentation an. Ich würde Gatling nicht für Produktivumgebungen empfahlen.

Jmeter und XLT sind solide und bewährt. Jmeter hat aber Schwächen bei der Auswertung, die man bei Bedarf leicht ausgleichen kann. Jmeter hat eine umfangreiche Auswahl an Samplern (HTTPS, DB, TCP, ..), und ist dadurch nicht nur für HTTPS Lasttest einsetzbar.
Beide Werkzeuge, Jmeter und XLT sind für die meisten Fälle zu empfehlen. XLT ist das Werkzeug der Wahl wenn es um Browser-basiertes Testen geht, auch sind die XLT Reports und Auswertungsmöglichkeiten hervorragend. Jmeter ist der Allrounder und den Lasttestgeneratoren.


Jmeter XLT Gatling
Geeignet für einfache Lasttest Gut Gut Gut
Geeignet für komplexe Lasttests Gut Gut Ok
Verhält sich wie ein Webbrowser Bedingt Ja Nein
JS Ausführung Nein Ja Nein
Dokumetation Sehr gut Sehr gut Ok
Community Umfangreich Gering Ok
Hochlast Ja Ja

Analyse der Ergebnisse Ok Sehr gut Ok
Erweiternbar durch Programmiersprachen Beanshell/Java/Groovy Java SCALA
Test Protokoll und Systeme HTTPS/JDBC/MongoDB/JMS/AJP/LDAP/SMTP/TCP/… HTTPS HTTPS
RampUp Test Ja Ja Ja
Konstant Test Ja Ja Ja
Funtionstest Ja Ja Ja
Performancemessung Bedingt Ja ?