Posts mit dem Label Jmeter werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Jmeter werden angezeigt. Alle Posts anzeigen

Mittwoch, 13. September 2023

JMeter never gets old


 

 Now it's much simpler to run system test or load and performance test. You can integrate the good old JMeter into Maven and run the test in the build pipeline. Great.

Biggest advantage: You don't a JMeter installation. JMeter is loaded and run as Maven plugin.

 

Look at the https://github.com/jmeter-maven-plugin/jmeter-maven-plugin




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 ?

Dienstag, 13. Oktober 2015

Log Jmeter Variables with Flexible File Writer

There is no easy way to write a JMeter variable into a standard log file. Also the flexible file writer is not able to use calculated variables into the log file. The flexible file writer is only able to use the properties of the previous sampler. These properties are fixed. So I use a small hack to implement this functionality in Jmeter.

First is calculate a variable called CACHE_INFO e.g. with the regular expression extractor.

Second, I use the BeanShell PostProcessor to overwrite an unused property, here I use ThreadName, of the previous sampler.


Third, I use this abused sampler property with the flexible file writer.

Mittwoch, 13. November 2013

Ant und Jmeter: Automatisches anpassen des Jmeter Testplan

Jmeter lässt sich in Ant relativ einfach via Jmeter Task integrieren. Dazu benötigt mann nur ein JAR (extras/ant-jmeter-*.jar), welches mit Jmeter kommt. Jmeter selbst kann mit Variablen umgehen, die man z.B. via Kommandozeile setzen kann, hier wir das Property duration auf 12 gesetzt.
jmeter.sh -n -l r.xml -t LPT-woff-size-load.jmx -Jduration=12
Im Testplan kann man dann einfach auf diesen Wert zugreifen, hier wird zusätzlich ein Default Wert 60 gesetzt:
${__P(duration,60)}


Leider bietet der Jmeter-Ant Task nicht diese Flexibilität oder ich habe sich nicht finden können. Alternativ kann man in Ant den Jmeter Testplan direkt modifizieren. Der Testplan ist eine XML Datei  die man via Ant XML Task modifizieren kann:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="jmeter">
 <description>
  This file contains private task for: Load generation with jemeter.
 </description>
  
   <property name="jmeter-home" value="${env.JMETER_HOME}" />

   <path id="ant.xml.classpath">
  <fileset dir="antlibs">
   <include name="xmltask.jar"/>
  </fileset>
 </path>

 <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpathref="ant.xml.classpath"/>
 
 <target name="load_jmeter" >
  <echot level="info">Generate synthetic load with JMeter.</echot>
  <fail message="JMeter Home not set. Use evirmoment variable JMETER_HOME or property jmeter-home in file: ${setupfile}">
   <condition>
    <not>
     <or>
      <isset property="env.JMETER_HOME" />
      <isset property="jmeter-home" />
     </or>
    </not>
   </condition>
  </fail>
  <!-- ant-jmeter.jar comes with jmeter, be sure this is the release you have -->
  <path id="ant.jmeter.classpath">
   <fileset dir="${jmeter-home}/extras">
    <include name="ant-jmeter-*.jar"/>
   </fileset>
  </path> 
  <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" classpathref="ant.jmeter.classpath" />
  <xmltask source="src/${load.jmeter.testplan.file}" dest="results/${load.jmeter.testplan.file}">
   <replace path="//stringProp[@name='RunTime.seconds']/text()" withText="${load.duration}" />
  </xmltask>
  <copy file="src/urls.txt" todir="results" />
  
  <jmeter jmeterhome="${jmeter-home}" resultlogdir="results/jtl" testplan="results/${load.jmeter.testplan.file}">
   <property name="jmeter.save.saveservice.output_format" value="xml"/>
  </jmeter>
 </target>

</project>

Dienstag, 1. Oktober 2013

HTTP Client Performance

Für die Load- und Performance-Messungen auf dem Server gibt es eine Reihe von Werkzeugen wie XLT (Link) oder das bekanntere Apache JMeter (Link). Die einfachste Aufgabe ist es eine Reihe von HTTP Request an den zu untersuchenden Server zu senden. Dabei kann man in JMeter die Implementation für den HTTP Request auswählen. Zur Auswahl stehen in JMeter 2.9: HTTPClient3.1, HTTPClient4 und Java. Alternativ brauch man nicht auswählen, dann wir Java als Standard benutzt.
Aber welcher dieser drei HTTP Clients ist die optimale Wahl. Im Atlassian Blog gibt es einen Vergleichstest zwischen verschiedenen HTTP Clients (Link), dabei sind auch die drei JMeter Kandidaten. Eine normale JMeter Anwendung besteht in der Regel aus vielen kleinen HTTP Requests. Bei Atlassian Test für kleine Dateien (80kb) liegt CURL vor  dem HTTPClient3.1 und dem Java (hier Bee). Wie verhalten sich aber die HTTP Clients im JMeter-Test? Dazu habe ich einen kleinen Testaufbau mit einem konstanten Durchsatz von 152 Request/s auf verschiedene kleine HTML- und JSON Fragmente aufgesetzt. Dabei erreichten die Clients folgende Werte für den durchschnittliche Requestdurchsatz und den auf dem Loadwert auf dem JMeter-Client:
  1. HTTPClient3.1; 164 Req/s; Load 2.0
  2. HTTPClient4; 137 Req/s; Load 2.9
  3. Java; 150 Req/s; Load 2.6
Damit bestätigt sich das Bild aus dem Atlassian-Test, die für die meisten Test günstigste Wahl, weil performateste und Ressourcen-schonenste Auswahl ist der alte Apache HTTPClient3.1., der leider nicht mehr weiter entwickelt wird.