2
votes

Im currently working on a jmeter based project running the tests using jmeter maven plugin. So far everything works until i've added perfmon plugins, adding them to get Transactions per second and Response Times over Time using the jmeter UI, following the instructions here

Running it in maven now results to:

[INFO] Error in NonGUIDriver java.lang.IllegalArgumentException: Problem loading XML from:'/Users/foo/Tools/src/platform-load-test/jersey2-load-test/target/jmeter/testFiles/JerseyAsync.jmx', missing class com.thoughtworks.xstream.converters.ConversionException:
[INFO] ---- Debugging information ----
[INFO] cause-exception     : com.thoughtworks.xstream.converters.ConversionException
[INFO] cause-message       :
[INFO] first-jmeter-class  : org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
[INFO] class               : org.apache.jmeter.save.ScriptWrapper
[INFO] required-type       : org.apache.jorphan.collections.ListedHashTree
[INFO] converter-type      : org.apache.jmeter.save.ScriptWrapperConverter
[INFO] path                : /jmeterTestPlan/hashTree/hashTree/hashTree/kg.apc.jmeter.perfmon.PerfMonCollector
[INFO] line number         : 259
[INFO] version             : 3.1 r1770033
[INFO] -------------------------------

Following the documentation to add additional libraries (since i've added the perfmon listeners via jmeter ui's plugin manager), i've update my pom adding the jmeter extensions section:

<plugin>
   <groupId>com.lazerycode.jmeter</groupId>
   <artifactId>jmeter-maven-plugin</artifactId>
   <version>2.1.0</version>
   <executions>
      <execution>
         <id>jmeter-tests</id>
         <phase>pre-integration-test</phase>
         <goals>
            <goal>jmeter</goal>
         </goals>
      </execution>
   </executions>
   <configuration>
      <ignoreResultFailures>true</ignoreResultFailures>
      <jmeterExtensions>
         <jmeterExtension>kg.apc:jmeter-plugins-perfmon:2.1</jmeterExtension>
      </jmeterExtensions>
   </configuration>
</plugin>

and the analysis part:

<plugin>
    <groupId>com.lazerycode.jmeter</groupId>
    <artifactId>jmeter-analysis-maven-plugin</artifactId>
    <version>1.0.6</version>
    <executions>
        <execution>
            <id>analyze-results</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>analyze</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <source>${project.basedir}/target/jmeter/results/*.jtl</source>
        <targetDirectory>${project.basedir}/target/reports</targetDirectory>
    </configuration>
</plugin>

However, this results to:

[INFO] -------------------------------------------------------
[INFO]  Configuring JMeter...
[INFO] -------------------------------------------------------
[WARNING] The POM for commons-math3:commons-math3:jar:3.4.1 is missing, no dependency information available
[WARNING] The POM for commons-pool2:commons-pool2:jar:2.3 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.196 s
[INFO] Finished at: 2017-02-16T16:13:31+08:00
[INFO] Final Memory: 20M/437M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.lazerycode.jmeter:jmeter-maven-plugin:2.1.0:configure (configure) on project jersey2-load-test: Failure to find commons-math3:commons-math3:jar:3.4.1 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]

Which points out that there are invalid dependencies declared Assuming im in the correct path of adding jar extension for jmeter, how do i exclude the invalid dependencies and add the correct ones using the jmeter extension section of the plugin? Otherwise how do i properly add the perfmon plugin dependencies when using jmeter maven plugin?

2

2 Answers

2
votes

The error you are seeing is because jmeter-plugins depends upon JMeter 2.13 which has a broken maven dependency tree. This is something the jmeter-plugins team needs to fix (they need to release a version of jmeter plugins that depends upon JMeter 3.1).

The build is breaking because the plugin is trying to download some transitive dependencies for jmeter-plugins that don't exist, you can work around this by setting:

<downloadExtensionDependencies>false</downloadExtensionDependencies>

This does however mean that you will need to manually set all the dependencies that jmeter-plugins depends upon in your <jmeterExtensions> block.

Here is the dependency tree:

[INFO] \- kg.apc:jmeter-plugins-perfmon:jar:2.1:compile
[INFO]    +- kg.apc:jmeter-plugins-cmn-jmeter:jar:0.3:compile
[INFO]    |  +- org.apache.jmeter:jorphan:jar:2.13:compile
[INFO]    |  |  +- bsf:bsf:jar:2.4.0:compile
[INFO]    |  |  +- org.beanshell:bsh:jar:2.0b5:compile
[INFO]    |  |  +- org.bouncycastle:bcmail-jdk15on:jar:1.49:compile
[INFO]    |  |  +- org.bouncycastle:bcprov-jdk15on:jar:1.49:compile
[INFO]    |  |  +- org.bouncycastle:bcpkix-jdk15on:jar:1.49:compile
[INFO]    |  |  +- commons-codec:commons-codec:jar:1.10:compile
[INFO]    |  |  +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO]    |  |  +- commons-httpclient:commons-httpclient:jar:3.1:compile
[INFO]    |  |  +- commons-io:commons-io:jar:2.4:compile
[INFO]    |  |  +- commons-jexl:commons-jexl:jar:1.1:compile
[INFO]    |  |  +- org.apache.commons:commons-jexl:jar:2.1.1:compile
[INFO]    |  |  +- org.apache.commons:commons-lang3:jar:3.3.2:compile
[INFO]    |  |  +- commons-logging:commons-logging:jar:1.2:compile
[INFO]    |  |  +- commons-net:commons-net:jar:3.3:compile
[INFO]    |  |  +- dnsjava:dnsjava:jar:2.1.7:compile
[INFO]    |  |  +- excalibur-datasource:excalibur-datasource:jar:2.1:compile
[INFO]    |  |  |  +- hsqldb:hsqldb:jar:1.8.0.1:compile
[INFO]    |  |  |  +- avalon-framework:avalon-framework-api:jar:4.3:compile
[INFO]    |  |  |  +- avalon-framework:avalon-framework-impl:jar:4.3:compile
[INFO]    |  |  |  |  +- xml-apis:xmlParserAPIs:jar:2.0.2:compile
[INFO]    |  |  |  |  \- jmock:jmock:jar:1.0.1:compile
[INFO]    |  |  |  +- avalon-logkit:avalon-logkit:jar:2.1:compile
[INFO]    |  |  |  |  +- javax.servlet:servlet-api:jar:2.3:compile
[INFO]    |  |  |  |  +- geronimo-spec:geronimo-spec-javamail:jar:1.3.1-rc3:compile
[INFO]    |  |  |  |  \- geronimo-spec:geronimo-spec-jms:jar:1.1-rc4:compile
[INFO]    |  |  |  +- excalibur-instrument:excalibur-instrument-api:jar:2.1:compile
[INFO]    |  |  |  +- concurrent:concurrent:jar:1.3.4:compile
[INFO]    |  |  |  +- excalibur-component:excalibur-testcase:jar:2.1:compile
[INFO]    |  |  |  +- excalibur-component:excalibur-component:jar:2.1:compile
[INFO]    |  |  |  |  +- excalibur-instrument:excalibur-instrument-mgr-api:jar:2.1:compile
[INFO]    |  |  |  |  \- excalibur-instrument:excalibur-instrument-mgr-impl:jar:2.1:compile
[INFO]    |  |  |  \- qdox:qdox:jar:1.5:compile
[INFO]    |  |  +- excalibur-instrument:excalibur-instrument:jar:1.0:compile
[INFO]    |  |  +- excalibur-logger:excalibur-logger:jar:1.1:compile
[INFO]    |  |  +- excalibur-pool:excalibur-pool-api:jar:2.1:compile
[INFO]    |  |  +- excalibur-pool:excalibur-pool-impl:jar:2.1:compile
[INFO]    |  |  |  \- junitperf:junitperf:jar:1.8:compile
[INFO]    |  |  +- excalibur-pool:excalibur-pool-instrumented:jar:2.1:compile
[INFO]    |  |  +- org.htmlparser:htmllexer:jar:2.1:compile
[INFO]    |  |  +- org.htmlparser:htmlparser:jar:2.1:compile
[INFO]    |  |  +- org.apache.httpcomponents:httpclient:jar:4.2.6:compile
[INFO]    |  |  +- org.apache.httpcomponents:httpmime:jar:4.2.6:compile
[INFO]    |  |  +- org.apache.httpcomponents:httpcore:jar:4.2.5:compile
[INFO]    |  |  +- oro:oro:jar:2.0.8:compile
[INFO]    |  |  +- jcharts:jcharts:jar:0.7.5:compile
[INFO]    |  |  +- org.jdom:jdom:jar:1.1.3:compile
[INFO]    |  |  +- org.mozilla:rhino:jar:1.7R5:compile
[INFO]    |  |  +- junit:junit:jar:4.12:compile
[INFO]    |  |  |  \- org.hamcrest:hamcrest-core:jar:1.3:compile
[INFO]    |  |  +- soap:soap:jar:2.3.1:compile
[INFO]    |  |  +- net.sf.jtidy:jtidy:jar:r938:compile
[INFO]    |  |  +- org.apache.tika:tika-core:jar:1.7:compile
[INFO]    |  |  +- org.apache.tika:tika-parsers:jar:1.7:compile
[INFO]    |  |  |  +- org.gagravarr:vorbis-java-tika:jar:0.6:compile
[INFO]    |  |  |  +- edu.ucar:netcdf:jar:4.2.20:compile
[INFO]    |  |  |  |  \- edu.ucar:unidataCommon:jar:4.2.20:compile
[INFO]    |  |  |  |     \- net.jcip:jcip-annotations:jar:1.0:compile
[INFO]    |  |  |  +- net.sourceforge.jmatio:jmatio:jar:1.0:compile
[INFO]    |  |  |  +- org.apache.james:apache-mime4j-core:jar:0.7.2:compile
[INFO]    |  |  |  +- org.apache.james:apache-mime4j-dom:jar:0.7.2:compile
[INFO]    |  |  |  +- org.apache.commons:commons-compress:jar:1.8.1:compile
[INFO]    |  |  |  +- org.tukaani:xz:jar:1.5:compile
[INFO]    |  |  |  +- org.apache.pdfbox:pdfbox:jar:1.8.8:compile
[INFO]    |  |  |  |  +- org.apache.pdfbox:fontbox:jar:1.8.8:compile
[INFO]    |  |  |  |  \- org.apache.pdfbox:jempbox:jar:1.8.8:compile
[INFO]    |  |  |  +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
[INFO]    |  |  |  +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
[INFO]    |  |  |  +- org.apache.poi:poi:jar:3.11:compile
[INFO]    |  |  |  +- org.apache.poi:poi-scratchpad:jar:3.11:compile
[INFO]    |  |  |  +- org.apache.poi:poi-ooxml:jar:3.11:compile
[INFO]    |  |  |  |  \- org.apache.poi:poi-ooxml-schemas:jar:3.11:compile
[INFO]    |  |  |  |     \- org.apache.xmlbeans:xmlbeans:jar:2.6.0:compile
[INFO]    |  |  |  +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:compile
[INFO]    |  |  |  +- org.ow2.asm:asm-debug-all:jar:4.1:compile
[INFO]    |  |  |  +- com.googlecode.mp4parser:isoparser:jar:1.0.2:compile
[INFO]    |  |  |  |  \- org.aspectj:aspectjrt:jar:1.8.0:compile
[INFO]    |  |  |  +- com.drewnoakes:metadata-extractor:jar:2.6.2:compile
[INFO]    |  |  |  |  \- com.adobe.xmp:xmpcore:jar:5.1.2:compile
[INFO]    |  |  |  +- de.l3s.boilerpipe:boilerpipe:jar:1.1.0:compile
[INFO]    |  |  |  +- rome:rome:jar:1.0:compile
[INFO]    |  |  |  |  \- jdom:jdom:jar:1.0:compile
[INFO]    |  |  |  +- org.gagravarr:vorbis-java-core:jar:0.6:compile
[INFO]    |  |  |  +- com.googlecode.juniversalchardet:juniversalchardet:jar:1.0.3:compile
[INFO]    |  |  |  +- com.uwyn:jhighlight:jar:1.0:compile
[INFO]    |  |  |  \- com.pff:java-libpst:jar:0.8.1:compile
[INFO]    |  |  +- com.thoughtworks.xstream:xstream:jar:1.4.8:compile
[INFO]    |  |  +- xmlpull:xmlpull:jar:1.1.3.1:compile
[INFO]    |  |  +- xpp3:xpp3_min:jar:1.1.4c:compile
[INFO]    |  |  +- xalan:xalan:jar:2.7.2:compile
[INFO]    |  |  +- xalan:serializer:jar:2.7.2:compile
[INFO]    |  |  +- xerces:xercesImpl:jar:2.11.0:compile
[INFO]    |  |  +- xml-apis:xml-apis:jar:1.4.01:compile
[INFO]    |  |  +- org.apache.xmlgraphics:xmlgraphics-commons:jar:1.5:compile
[INFO]    |  |  +- javax.mail:mail:jar:1.5.0-b01:compile
[INFO]    |  |  |  \- javax.activation:activation:jar:1.1:compile
[INFO]    |  |  +- org.apache.geronimo.specs:geronimo-jms_1.1_spec:jar:1.1.1:compile
[INFO]    |  |  +- org.jsoup:jsoup:jar:1.8.1:compile
[INFO]    |  |  +- org.jodd:jodd-core:jar:3.6.4:compile
[INFO]    |  |  +- org.jodd:jodd-lagarto:jar:3.6.4:compile
[INFO]    |  |  +- org.jodd:jodd-log:jar:3.6.4:compile
[INFO]    |  |  +- org.mongodb:mongo-java-driver:jar:2.11.3:compile
[INFO]    |  |  +- com.fifesoft:rsyntaxtextarea:jar:2.5.6:compile
[INFO]    |  |  +- org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO]    |  |  \- org.slf4j:slf4j-nop:jar:1.7.10:compile
[INFO]    |  +- org.apache.jmeter:ApacheJMeter_core:jar:2.13:compile
[INFO]    |  \- kg.apc:jmeter-plugins-charts:jar:0.1:compile
[INFO]    \- kg.apc:perfmon:jar:2.2.2:compile
[INFO]       +- kg.apc:cmdrunner:jar:1.0.1:compile
[INFO]       +- org.fusesource:sigar:jar:1.6.4:compile
[INFO]       |  \- log4j:log4j:jar:1.2.15:compile
[INFO]       +- avalon-framework:avalon-framework:jar:4.1.5:compile
[INFO]       \- logkit:logkit:jar:2.0:compile

You may get away with adding only a subset of these libraries, assuming that you don't go down code paths that require code from them.

This does kind of highlight why it's important to mark dependencies that you only rely on in testing as <scope>test</scope> so that they don't get pulled down as a core dependency that is required to run your main code.

The above information hasn't made it into the Wiki yet (there's an ongoing task to add this information and move everything across to the website), it is however available in the CHANGELOG:

https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/blob/master/CHANGELOG.md

0
votes

I download jmeter-plugins-manager-0.15.jar using maven-antrun-plugin and then I use command line executions (also ant) to download the most fresh plugins:

        <plugin><artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution><id>init</id><phase>initialize</phase><goals><goal>run</goal></goals>
                    <configuration>
                        <target>
                            <get src="http://jmeter-plugins.org/get/" dest="target/jmeter/lib/ext/jmeter-plugins-manager.jar"/>
                            <get src="http://central.maven.org/maven2/kg/apc/cmdrunner/2.0/cmdrunner-2.0.jar" dest="target/jmeter/lib/cmdrunner-2.0.jar"/>
                            <java classname="org.jmeterplugins.repository.PluginManagerCMDInstaller">
                                <classpath>
                                    <pathelement location="target/jmeter/lib/ext/jmeter-plugins-manager.jar"/>
                                </classpath>
                            </java>
                            <ant antfile="plugins.xml" target="plugins" inheritAll="true" />
                        </target>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency><groupId>ant-contrib</groupId><artifactId>ant-contrib</artifactId><version>1.0b3</version>
                    <exclusions>
                        <exclusion><groupId>ant</groupId><artifactId>ant</artifactId></exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </plugin>

where plugins.xml is:

<project xmlns:ac="antlib:net.sf.antcontrib">
<target name="plugins">
    <loadfile property="file" srcfile="plugins"/>
    <ac:for param="line" list="${file}" delimiter="${line.separator}">
        <ac:sequential>
            <exec executable="target/jmeter/bin/PluginsManagerCMD.sh">
                <arg value="install"/>
                <arg value="@{line}"/>
            </exec>
        </ac:sequential>
    </ac:for>
</target>

and plugins file contains the list of plugin ids:

jpgc-dummy
jpgc-fifo
jpgc-graphs-basic
jpgc-perfmon
jpgc-tst
jpgc-functions
jpgc-casutg
jpgc-ffw
jpgc-prmctl