The 'jmeter-sla-report' is a replacement for the existing XSLT-based reporting backend when running JMeter from the command line to solve the following problems
- Using XSLT does not scale for large JTL files therefore a StAX parser is used
- Merge multiple JTL files into one report when multiple JMeter instances are used
- Often you are interested in the distribution of the response time using a logarithmic scale
- Adding a generic way to capture the JMeter configuration data
- Group error messages in the SLA report
This component was created when testing a large application using JMeter (see http://people.apache.org/~sgoeschl/presentations/apachecon-2011/jmeter.pdf)
In order to generate your first JMeter SLA reports run the following commands
> ant
> ls -l target/report-*.html
-rw-r--r-- 1 sgoeschl staff 11541 Apr 21 20:52 target/report-csv-success.html
-rw-r--r-- 1 sgoeschl staff 69738 Apr 21 20:52 target/report-xml-failure.html
-rw-r--r-- 1 sgoeschl staff 110686 Apr 21 20:52 target/report-xml-success.html
This uses dist/jmeter-sla-report-1.0.5.jar
and generates three SLA reports using
- JMeter JTL files (having a
xml
extension) - JMeter CSV file (having a
csv
extension)
whereas the following JMeter SLA reports are generated
- ./target/report-xml-success.html
- ./target/report-csv-success.html
- ./target/report-xml-failure.html
Afterwards you see a report similar to the image below
The following snippet is used to generate the JMeter SLA report
<!-- setup the class path to run the report -->
<path id="project.class.path">
<fileset dir="${basedir}/lib">
<include name="*.jar" />
</fileset>
<fileset dir="${basedir}/dist">
<include name="jmeter-sla-report-1.0.5.jar" />
</fileset>
</path>
<target name="report-xml-success" description="Report with XML JMeter file">
<mkdir dir="${project.build.directory}" />
<java classname="com.github.sgoeschl.jmeter.report.sla.Main" classpathref="project.class.path">
<arg value="${project.build.directory}/report-xml-success.html" />
<arg value="${basedir}/src/test/data/success.jtl" />
<sysproperty key="jmeter.something" value="report-xml-success" />
</java>
</target>
Let's dissect the ANT calls
- setting up an Ant path variable to pull in all required libraries
- invoking
com.github.sgoeschl.jmeter.report.sla.Main
to generate a report which requires two parameters- the HTML report file to be generated
- one or more JTL files written by JMeter
- the remaining "sysproperty" entries prefixed with "jmeter" are added to the reporting section - any system property prefixed with "jmeter" is added to the report automatically so can determine the configuration used to run JMeter (or add any other relevant information)
Create a JMeter SLA Report based on jmeter.jtl
file
java -jar ./dist/jmeter-sla-report-1.0.5-jar-with-dependencies.jar report.html src/test/data/success.jtl
Create a JMeter SLA Report based on one or more JTL files found in the given directory
java -jar ./dist/jmeter-sla-report-1.0.5-jar-with-dependencies.jar report.html ./src/test/data
A quick overview of the implementation
- The JMeter is parsed
- In case of a JTL file it is parsed using a StaX parser which extracts one 'httpSample' after another
- In case of CSV the Apache
commons-csv
library is used
- The 'httpSample' is used to feed JAMon (see http://jamonapi.sourceforge.net) which calculates the SLA related data
- When the parsing is finished all the data is pulled from JAMon and written to HTML file with embedded CSS
- Tried to contribute it to Apache JMeter to no avail
- Dumped it on GitHub since this is a much better place than my local hard disk
- Collected a few patches from the Vienna Hackergarden (thanks a lot)
- Licenced under ASL 2.0
- Feel free to use and/or contribute