1

次の構成で 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 はシリアル化された方法で実行する必要があります。

4

2 に答える 2

0

出力先を指定しないため、すべての結果がドロップされます

以下に指定されているように構成を変更し、「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 または出力形式で結果が得られないことが予想されます。例: 2 つのテストプランがあり、最初は適切に実行され、2 つ目はテストプランのエラーが原因で失敗したとします [プランの依存関係の jar が欠落しているなど]。この場合、両方のプランで同じ jtl ファイルを使用しているため、jtl ファイルのバランスが崩れ、null になります。

私がお勧めします

1. 2 つのサンプル テスト計画を作成し、それらを ${basedir}/src/test/jmeter に配置して実行します。ビルドの失敗が引き続き発生するかどうかを確認します。成功した場合は、jtl ファイルで結果を確認します。

  1. テストを開始する前に、必ずスレーブ/リモート jmeter プロセスを再起動してください。
于 2014-09-30T08:01:17.493 に答える
0

プラグインのスナップショット バージョンを使用し、プラグイン リポジトリを指定すると、問題が解決しました。

Poms でスナップショット バージョンを使用するのが理想的ではないことはわかっていますが、テスト プロジェクトで jmeter を使用していて、コードを作成していない場合は、それほど大きな問題にはなりません。

私の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>
于 2014-01-02T21:16:23.217 に答える