java.lang.NoSuchMethodError 用于在 jmeter-maven-plugin 中创建仪表板

java.lang.NoSuchMethodError for dashboard creation in jmeter-maven-pugin

我正在为我的 Jmeter 运行 生成仪表板。通过jmeter-maven-plugin.

执行

我的POM中的关键插件如下

<plugin>
    <groupId>com.lazerycode.jmeter</groupId>
    <artifactId>jmeter-maven-plugin</artifactId>
    <version>2.0.3</version>
    <configuration>
        <testFilesDirectory>src/test/jmeter/TestPlans</testFilesDirectory>
        <!-- <postTestPauseInSeconds>10</postTestPauseInSeconds> -->
        <testResultsTimestamp>false</testResultsTimestamp>
        <overrideRootLogLevel>DEBUG</overrideRootLogLevel>
        <suppressJMeterOutput>false</suppressJMeterOutput>
        <ignoreResultFailures>true</ignoreResultFailures>
        <resultsFileFormat>xml</resultsFileFormat>
        <propertiesJMeter>
            <jmeter.save.saveservice.thread_counts>true</jmeter.save.saveservice.thread_counts>
        </propertiesJMeter>
        <jmeterPlugins>
            <plugin>
                <groupId>kg.apc</groupId>
                <artifactId>jmeter-plugins</artifactId>
            </plugin>
        </jmeterPlugins>
        <jmeterExtensions>

            <artifact>kg.apc:jmeter-plugins-standard:jar:1.4.0</artifact>
            <artifact>kg.apc:jmeter-plugins-extras:jar:1.3.0</artifact>
            <artifact>kg.apc:jmeter-plugins-redis:jar:0.1</artifact>
        </jmeterExtensions>
    </configuration>
    <executions>
        <execution>
            <id>execute-jmeter-tests</id>
            <goals>
                <goal>jmeter</goal>
            </goals>
            <phase>integration-test</phase>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>kg.apc</groupId>
            <artifactId>jmeter-plugins</artifactId>
            <version>1.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>kg.apc</groupId>
                    <artifactId>perfmon</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.hbase</groupId>
                    <artifactId>hbase</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.jmeter</groupId>
                    <artifactId>jorphan</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.bsf</groupId>
                    <artifactId>bsf-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.bouncycastle</groupId>
                    <artifactId>bcmail-jdk15</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.bouncycastle</groupId>
                    <artifactId>bcprov-jdk15</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.activation</groupId>
                    <artifactId>activation</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</plugin>


<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>verify</phase>
            <configuration>
                <tasks>
                    <mkdir dir="${basedir}/target/jmeter/results/dashboard" />
                    <copy file="${basedir}/src/test/resources/reportgenerator.properties"    tofile="${basedir}/target/jmeter/bin/reportgenerator.properties" />
                    <copy todir="${basedir}/target/jmeter/bin/report-template">
                         <fileset dir="${basedir}/src/test/resources/report-template" />
                    </copy>
                    <java jar="${basedir}/target/jmeter/bin/ApacheJMeter-3.0.jar" fork="true">
                        <arg value="-g" />
                        <arg value="${basedir}/target/jmeter/results/*.jtl" />
                        <arg value="-o" />
                        <arg value="${basedir}/target/jmeter/results/dashboard/" />
                    </java>
                        </tasks>
            </configuration>
            <goals>
                        <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

执行失败,出现以下错误。

当尝试手动执行命令时,看到以下日志。

C:\Program Files\Java>  jdk1.8.0_112\bin\java -jar C:\Users\testing\automation\jmeter_regression\target\jmeter\bin\ApacheJMeter-3.0.jar -g C:\Users\testing\automation\jmeter_regression/target/jmeter/results/CSS_Regression.jtl -o C:\Users\testing\automation\jmeter_regression/target/jmeter/results/dashboard/
log_file=jmeter.log java.io.FileNotFoundException: jmeter.log (Access is denied)
[log_file-> System.out]
2017/02/28 16:49:51 INFO  - jmeter.util.JMeterUtils: Setting Locale to en_AU
2017/02/28 16:49:51 INFO  - jmeter.JMeter: Loading system properties from: C:\Users\testing\automation\jmeter_regression\target\jmeter\bin\system.properties
2017/02/28 16:49:51 INFO  - jmeter.JMeter: Copyright (c) 1998-2016 The Apache Software Foundation
2017/02/28 16:49:51 INFO  - jmeter.JMeter: Version 3.0 r1743807
2017/02/28 16:49:51 INFO  - jmeter.JMeter: java.version=1.8.0_112
2017/02/28 16:49:51 INFO  - jmeter.JMeter: java.vm.name=Java HotSpot(TM) 64-Bit Server VM
2017/02/28 16:49:51 INFO  - jmeter.JMeter: os.name=Windows 7
2017/02/28 16:49:51 INFO  - jmeter.JMeter: os.arch=amd64
2017/02/28 16:49:51 INFO  - jmeter.JMeter: os.version=6.1
2017/02/28 16:49:51 INFO  - jmeter.JMeter: file.encoding=Cp1252
2017/02/28 16:49:51 INFO  - jmeter.JMeter: Max memory     =2835349504
2017/02/28 16:49:51 INFO  - jmeter.JMeter: Available Processors =4
2017/02/28 16:49:51 INFO  - jmeter.JMeter: Default Locale=English (Australia)
2017/02/28 16:49:51 INFO  - jmeter.JMeter: JMeter  Locale=English (Australia)
2017/02/28 16:49:51 INFO  - jmeter.JMeter: JMeterHome=C:\Users\testing\automation\jmeter_regression\target\jmeter
2017/02/28 16:49:51 INFO  - jmeter.JMeter: user.dir  =C:\Program Files\Java
2017/02/28 16:49:51 INFO  - jmeter.JMeter: PWD       =C:\Program Files\Java
2017/02/28 16:49:51 FATAL - jmeter.JMeter: An error occurred:  java.lang.NoSuchMethodError: org.apache.jorphan.util.JOrphanUtils.canSafelyWriteToFolder(Ljava/io/File;)V
        at org.apache.jmeter.JMeter.extractAndSetReportOutputFolder(JMeter.java:530)
        at org.apache.jmeter.JMeter.start(JMeter.java:476)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.jmeter.NewDriver.main(NewDriver.java:259)

An error occurred: org.apache.jorphan.util.JOrphanUtils.canSafelyWriteToFolder(Ljava/io/File;)V

C:\Program Files\Java>

我尝试了 中的解决方案。但似乎没有用。我想我没有正确配置pom。

我应该在这里做什么?

原因是以下扩展之一的版本。

     <artifact>kg.apc:jmeter-plugins-standard:jar:1.4.0</artifact>
     <artifact>kg.apc:jmeter-plugins-extras:jar:1.3.0</artifact>
     <artifact>kg.apc:jmeter-plugins-redis:jar:0.1</artifact>

其中一个复制了 jorphan.jar 的 2.x 版本,其中没有引入方法 canSafelyWriteToFolder(Ljava/io/File)。

我更新到最新版本如下

      <artifact>kg.apc:jmeter-plugins-standard:jar:1.4.0</artifact>
      <artifact>kg.apc:jmeter-plugins-extras:jar:1.4.0</artifact>
      <artifact>kg.apc:jmeter-plugins-redis:jar:0.2</artifact>

将 jorphan-3.0.jar 复制到 jemeter lib.