次の構成で 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: 上記の例では、JMeter テストを 1 つだけ実行しました。ディレクトリ ${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 はテストの実行を並列化しようとしているようですが、IMHO はシリアル化された方法で実行する必要があります。