使用远程主机配置时,JMeter Maven插件不提供测试结果

使用远程主机配置时,JMeter Maven插件不提供测试结果,maven,jmeter,jmeter-maven-plugin,Maven,Jmeter,Jmeter Maven Plugin,使用以下配置的JMeter maven插件启动JMeter测试时 <project> ... <build> <plugins> <plugin> <groupId>com.lazerycode.jmeter</groupId> <artifactId>jmeter-maven-plugin</a

使用以下配置的JMeter maven插件启动JMeter测试时

<project>
...
    <build>
        <plugins>
            <plugin>
                <groupId>com.lazerycode.jmeter</groupId>
                <artifactId>jmeter-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>jmeter-tests</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>jmeter</goal>
                        </goals>
                    </execution>
                </executions>                       
                <configuration>
                    <customPropertiesFile>${basedir}/src/test/jmeter/jmeter.properties</customPropertiesFile>
                    <testFilesDirectory>${basedir}/src/test/jmeter</testFilesDirectory>
                    <remoteConfig>
                        <startServersBeforeTests>true</startServersBeforeTests>
                        <serverList>server01,server02</serverList>
                        <stopServersAfterTests>true</stopServersAfterTests>
                    </remoteConfig>
                    <testResultsTimestamp>false</testResultsTimestamp>
                </configuration>
            </plugin>
        </plugins>
    </build>            
...
</project>
但是没有收集到任何测试结果。如果您检查了相应的JMeter结果文件,则会发现一个空文件:

cat /home/me/demo/target/jmeter/results/20130925-test.jtl

#empty
因此,在远程服务器完成测试执行之前,Maven过程就已经完成了。我认为jmeter maven插件应该收集远程主机的测试结果,而不是编写一个0字节的文件20130925-test.jtl,这是错误的吗

如果我在不使用远程JMeter代理的情况下启动相同的测试,那么一切正常。jmeter maven插件执行测试并将结果写入相应的jtl文件。那么,上面关于remoteConfig元素的配置会有什么问题呢

更新1: 我使用了jmeter maven插件版本1.8.1和maven 3.0.5

更新2: 上面的示例只执行了1个JMeter测试。如果${basedir}/src/test/JMeter目录中有超过1个JMeter测试,那么Maven构建将失败。在这种情况下,第一个JMeter测试的日志文件没有错误,但所有其他测试日志(例如../target/JMeter/logs/test2.log)都会显示以下消息:

Error in NonGUIDriver java.lang.IllegalStateException: Engine is busy - please try later

因此,第一个测试也在远程代理上执行,没有在客户端站点的相应jtl文件中收集任何结果,但其他测试已被远程主机拒绝。因此,maven jmeter插件似乎试图并行执行测试,但我认为应该以序列化的方式执行测试。

使用插件的快照版本并指定插件repo,为我解决了这个问题

我知道在poms中使用快照版本并不理想,但是如果您在测试项目中使用jmeter而不是prod代码,那么这应该不是什么大问题

我的2美分

<pluginRepositories>
    <pluginRepository>
        <id>sonatype-snapshots</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </pluginRepository>
</pluginRepositories>

<build>
         <plugins>
             <plugin>
                 <groupId>com.lazerycode.jmeter</groupId>
                 <artifactId>jmeter-maven-plugin</artifactId>
                 <version>1.8.2-SNAPSHOT</version>
                 <executions>
                     <execution>
                         <id>jmeter-tests</id>
                         <phase>verify</phase>
                         <goals>
                             <goal>jmeter</goal>
                         </goals>
                     </execution>
                 </executions>
                     <configuration>
                         <remoteConfig>
                             <startServersBeforeTests>true</startServersBeforeTests>
                             <!--<stopServersAfterTests>true</stopServersAfterTests>-->
                             <serverList>192.168.1.27</serverList>
                         </remoteConfig>
                     </configuration>
             </plugin>
         </plugins>
 </build>

您无法指定输出的位置,因此所有结果都将被删除

添加“java.rmi.server.hostname”更改下面指定的配置

<remoteConfig>                  
    <startServersBeforeTests>true</startServersBeforeTests>                 
        <serverList>server01,server02</serverList>
    <stopServersAfterTests>false</stopServersAfterTests>                                        
</remoteConfig>
<propertiesSystem>
<java.rmi.server.hostname>**Master.invoking.machine.com**</java.rmi.server.hostname>
</propertiesSystem>
如果生成失败,并且在Test plan.jmx文件中出现任何错误,那么您将无法获得任何JTL或任何输出格式的结果。 示例:假设您有两个测试计划,第一个执行正确,第二个由于测试计划中的某些错误而失败[比如缺少计划的一些依赖项jar]。如果发生这种情况,由于您对两个计划使用相同的jtl文件,您的jtl文件将不平衡,并且将为空

我推荐

1.创建2个示例测试计划,并将它们放在${basedir}/src/test/jmeter中,然后执行它们,检查是否仍然看到构建失败。如果成功,请检查jtl文件中的结果

在开始测试之前,请始终重新启动从属/远程jmeter进程。
我也有同样的问题。我甚至尝试了Maven插件的1.8.2-SNAPSHOT版本,不同的错误。测试可以从cmd行正常运行。然后在恐慌中,我尝试使用Ant的JMeter插件,工作起来很有魅力。目前,我还没有找到任何令人满意的解决方案。最后,我编写了一个小型Shell脚本Bash,由持续集成服务Jenkins调用,并执行相同的操作。因此,我也能够充分利用它,并增强测试执行,以便能够断言测试计划的吞吐量请求/秒:-这是一个已知的错误,应该在当前的snapshot 1.9.0-snapshot中修复。了解您是否仍有问题是很有用的。Maven Central现在提供了1.9.0版,因此您不需要再使用快照。
<remoteConfig>                  
    <startServersBeforeTests>true</startServersBeforeTests>                 
        <serverList>server01,server02</serverList>
    <stopServersAfterTests>false</stopServersAfterTests>                                        
</remoteConfig>
<propertiesSystem>
<java.rmi.server.hostname>**Master.invoking.machine.com**</java.rmi.server.hostname>
</propertiesSystem>