使用远程主机配置时,JMeter Maven插件不提供测试结果
使用以下配置的JMeter maven插件启动JMeter测试时使用远程主机配置时,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
<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>