Skip to content
This repository was archived by the owner on Nov 7, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 171 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
jmeter-graph-maven-plugin
=========================

A maven plugin to create nice graphs (using the JMeter Plugins CMDRunner) from JMeter result files (*.jtl).
A maven plugin to create nice graphs (using the JMeter Plugins CMDRunner) from JMeter result files (*.jtl or *.csv) or FilterResultsTool.

See https://blog.codecentric.de/2013/12/jmeter-tests-mit-maven-und-jenkins-automatisieren/ for more information.
See https://jmeter-plugins.org/wiki/JMeterPluginsCMD/ for more information for graphs and graphs parameters.

See https://jmeter-plugins.org/wiki/FilterResultsTool/ form more information for Filter Result Tools

For a full example, take a look at the [jmeter-maven-example project](https://github.com/mlex/jmeter-maven-example/).

Expand All @@ -14,26 +16,165 @@ Just include the plugin in your `pom.xml` and execute `mvn jmeter-graph:create-g

```xml
<project>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>de.codecentric</groupId>
<artifactId>jmeter-graph-maven-plugin</artifactId>
<version>0.1.0</version>
<configuration>
<inputFile>${project.build.directory}/jmeter/results/SimpleWebservicePerformanceTest.jtl</inputFile>
<graphs>
<graph>
<pluginType>ThreadsStateOverTime</pluginType>
<width>800</width>
<height>600</height>
<outputFile>${project.build.directory}/jmeter/results/SimpleWebservicePerformanceTest-ThreadsStateOverTime.png</outputFile>
</graph>
<!-- ... you can declare more <graph>-elements here -->
</graphs>
</configuration>
</plugin>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>de.codecentric</groupId>
<artifactId>jmeter-graph-maven-plugin</artifactId>
<version>1.0</version>
<configuration>
<!-- cf Filter Results Tool in jmeter-plugins.org -->
<filterResultsTool>
<filterResultsParam>
<inputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_local_monit.csv</inputFile>
<outputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_regex_filtred.csv</outputFile>
<successFilter>false</successFilter>
<includeLabels>0.*</includeLabels>
<includeLabelRegex>true</includeLabelRegex>
</filterResultsParam>
<filterResultsParam>
<inputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_local_monit.csv</inputFile>
<outputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_offset_filtred.jtl</outputFile>
<successFilter>false</successFilter>
<startOffset>2</startOffset>
<endOffset>20</endOffset>
<saveAsXml>true</saveAsXml>
</filterResultsParam>
</filterResultsTool>
<graphs>
<!-- cf Filter JMeterPluginsCMD Command Line Tool in jmeter-plugins.org -->
<graph>
<pluginType>ResponseTimesOverTime</pluginType>
<inputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_local_monit.csv</inputFile>
<generatePng>${project.build.directory}/jmeter/results/ResponseTimesOverTime.png</generatePng>
<width>800</width>
<height>600</height>
<limitRows>50</limitRows>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
<startOffset>2</startOffset>
<endOffset>20</endOffset>
<includeLabels>0.*</includeLabels>
<includeLabelRegex>true</includeLabelRegex>
<forceY>1000</forceY>
<autoScale>no</autoScale>
<lineWeight>2</lineWeight>
</graph>
<graph>
<inputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_local_monit.csv</inputFile>
<pluginType>TransactionsPerSecond</pluginType>
<width>800</width>
<height>600</height>
<generatePng>${project.build.directory}/jmeter/results/TransactionsPerSecond.png</generatePng>
<relativeTimes>no</relativeTimes>
<aggregateRows>yes</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<pluginType>PageDataExtractorOverTime</pluginType>
<inputFile>${project.build.directory}/jmeter/results/pde_httpd.jtl</inputFile>
<generatePng>${project.build.directory}/jmeter/results/pde_httpd_all_workers.png</generatePng>
<extractorRegexps>(BusyWorkers|IdleWorkers):.*{;}[A-Za-z]+:.([0-9]+){;}false{;}true</extractorRegexps>
<width>1024</width>
<height>800</height>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<pluginType>PageDataExtractorOverTime</pluginType>
<inputFile>${project.build.directory}/jmeter/results/pde_httpd.jtl</inputFile>
<generatePng>${project.build.directory}/jmeter/results/pde_httpd_busy_workers.png</generatePng>
<extractorRegexps>(BusyWorkers):.*{;}BusyWorkers:.([0-9]+){;}false{;}true</extractorRegexps>
<width>1024</width>
<height>800</height>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<pluginType>PerfMon</pluginType>
<inputFile>${project.build.directory}/jmeter/results/perfmon.csv</inputFile>
<generatePng>${project.build.directory}/jmeter/results/Perfmon_CPU.png</generatePng>
<includeLabels>.*CPU.*</includeLabels>
<includeLabelRegex>true</includeLabelRegex>
<width>1024</width>
<height>800</height>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<pluginType>PerfMon</pluginType>
<inputFile>${project.build.directory}/jmeter/results/perfmon.csv</inputFile>
<generatePng>${project.build.directory}/jmeter/results/Perfmon_Memory.png</generatePng>
<includeLabels>.*Memory.*</includeLabels>
<includeLabelRegex>true</includeLabelRegex>
<width>1024</width>
<height>800</height>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<pluginType>JMXMon</pluginType>
<inputFile>${project.build.directory}/jmeter/results/gest_jmx_tomcat.jtl</inputFile>
<generatePng>${project.build.directory}/jmeter/results/JMX_memory_jvm.png</generatePng>
<includeLabels>used.HeapMemoryUsage.*</includeLabels>
<includeLabelRegex>true</includeLabelRegex>
<width>1024</width>
<height>800</height>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<pluginType>JMXMon</pluginType>
<inputFile>${project.build.directory}/jmeter/results/gest_jmx_tomcat.jtl</inputFile>
<generatePng>${project.build.directory}/jmeter/results/JMX_currentThreadsBusy.png</generatePng>
<includeLabels>.*currentThreadsBusy.*</includeLabels>
<includeLabelRegex>true</includeLabelRegex>
<width>1024</width>
<height>800</height>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<inputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_local_monit.csv</inputFile>
<pluginType>AggregateReport</pluginType>
<generateCsv>${project.build.directory}/jmeter/results/AggregateReport.csv</generateCsv>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
<graph>
<inputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_local_monit.csv</inputFile>
<pluginType>ResponseCodesPerSecond</pluginType>
<width>800</width>
<height>600</height>
<generatePng>${project.build.directory}/jmeter/results/ResponseCodesPerSecond.png</generatePng>
<relativeTimes>no</relativeTimes>
<aggregateRows>no</aggregateRows>
<paintGradient>no</paintGradient>
</graph>
</graphs>
<!- copy files in directoryTestFiles to JMETER_HOME/bin -->
<directoryTestFiles>${project.build.directory}/jmeter/testFiles</directoryTestFiles>
<!-- cf jmeter-maven-pugins -->
<jMeterProcessJVMSettings>
<xms>${jvm_xms}</xms>
<xmx>${jvm_xmx}</xmx>
</jMeterProcessJVMSettings>
<!-- merge this properties with user.properties file in JMETER_HOME/bin -->
<!-- property format = <property_name>property_value</property name> will be property_name=property_value in th user.properties file. -->
<propertiesUser>
<language>en</language>
</propertiesUser>
</configuration>
</plugin>
</plugins>
</build>
</project>
Expand All @@ -49,7 +190,7 @@ You can also bind the graph-generation to a maven-phase, e.g. `verify`:
<plugin>
<groupId>de.codecentric</groupId>
<artifactId>jmeter-graph-maven-plugin</artifactId>
<version>0.1.0</version>
<version>1.0</version>
<executions>
<execution>
<id>create-graphs</id>
Expand All @@ -58,13 +199,14 @@ You can also bind the graph-generation to a maven-phase, e.g. `verify`:
</goals>
<phase>verify</phase>
<configuration>
<inputFile>${project.build.directory}/jmeter/results/SimpleWebservicePerformanceTest.jtl</inputFile>
<graphs>
<!-- ... you can declare filterResultsTool here -->
<graphs>
<graph>
<pluginType>ThreadsStateOverTime</pluginType>
<width>800</width>
<height>600</height>
<outputFile>${project.build.directory}/jmeter/results/SimpleWebservicePerformanceTest-ThreadsStateOverTime.png</outputFile>
<pluginType>ResponseTimesOverTime</pluginType>
<inputFile>${project.build.directory}/jmeter/results/gestdoc_sc01_menu_local_monit.csv</inputFile>
<generatePng>${project.build.directory}/jmeter/results/ResponseTimesOverTime.png</generatePng>
<width>800</width>
<height>600</height>
</graph>
<!-- ... you can declare more <graph>-elements here -->
</graphs>
Expand Down
Loading