使用具有以下配置的jmeter-maven-plugin启动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>
...然后在给定的远程服务器“server01”和“server02”上正确执行测试。 Maven任务不会等待远程主机的进程,但声明一切正常:
[INFO] -------------------------------------------------------
[INFO] P E R F O R M A N C E T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO]
[INFO] Proxy server is not being used.
[debug] JMeter is called with the following command line arguments: -n -t /home/me/demo/src/test/jmeter/test.jmx -l /home/me/demo/target/jmeter/results/20130925-test.jtl -d /home/me/demo/target/jmeter -q /home/me/demo/src/test/jmeter/jmeter.properties -r -R server01,server02 -X
[info] Executing test: test.jmx
[info] Completed Test: test.jmx
[INFO]
[INFO] Test Results:
[INFO]
[INFO] Tests Run: 1, Failures: 0
[INFO]
[INFO]
[INFO] --- maven-failsafe-plugin:2.15:verify (verify)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.598s
[INFO] Finished at: Wed Sep 25 16:43:00 CEST 2013
[INFO] Final Memory: 21M/349M
[INFO] ------------------------------------------------------------------------
但是没有收集任何测试结果。如果您检查相应的JMeter结果文件,那么您将意识到空文件:
cat /home/me/demo/target/jmeter/results/20130925-test.jtl
#empty
因此,在远程服务器完成测试执行之前,Maven进程已完成。我错误地认为jmeter-maven-plugin应该收集远程主机的测试结果而不是写一个0字节的文件(20130925-test.jtl)?
如果我在不使用远程JMeter代理的情况下开始相同的测试,那么一切正常。 jmeter-maven-plugin执行测试并将结果写入相应的“jtl”文件中。那么关于“remoteConfig”元素的上述配置会出现什么问题?
更新1: 我使用了jmeter-maven-plugin版本1.8.1和Maven 3.0.5
更新2: 上面的例子只执行了1次JMeter测试。如果$ {basedir} / src / test / jmeter目录中有多个JMeter测试,则Maven构建失败。在这种情况下,第一个JMeter测试的日志文件没有错误,但所有其他测试日志(例如./target/jmeter/logs/test2.log)都显示以下消息:
Error in NonGUIDriver java.lang.IllegalStateException: Engine is busy - please try later
因此,第一个测试是在远程代理上执行的(也没有在客户端站点上的相应“jtl”文件中收集任何结果)但是其他测试已被远程主机拒绝。所以似乎maven-jmeter-plugin试图并行化测试的执行,但恕我直言,它们应该以序列化的方式执行。
答案 0 :(得分:0)
使用插件的快照版本并指定插件仓库,为我解决了这个问题。
我知道在poms中创建快照versioin并不理想,但是如果你在测试项目中使用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>
答案 1 :(得分:0)
你指出输出必须去的地方,所以结果都会被删除
按照以下规定更改配置,添加&#39; java.rmi.server.hostname&#39;。
<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>
如果构建因测试plan.jmx文件中的任何错误或错误而失败,则预计您不会以JTL或任何输出格式获得任何结果。 例如:假设您有2个测试计划,首先正确执行,第二个因测试计划中的某些错误而失败[就像您的计划缺少一些依赖性jar]。如果发生这种情况,由于您对两个计划使用相同的jtl文件,因此您的jtl文件将是不平衡的,并且它将为null。
我会推荐
1.创建2个样本测试计划并将它们放在$ {basedir} / src / test / jmeter中并执行它们,检查是否仍然看到构建失败。如果成功,请检查jtl文件中的结果。