8

Maven Surefire を使用すると、並列テストの実行をフォークできません。つまり、私のテスト ケースはそれぞれ別の JVM で実行する必要があるため、フォークします。さらに、テスト ケースを並行して実行したいと考えています。最初の部分は問題なく動作しています。各テスト ケースを独自の JVM で実行できます。ただし、2番目の部分はまだ私にとって挑戦的です. テストケースの並列実行を機能させることができませんでした。私のプラグイン宣言は次のようになります。

    <plugin>
          <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.5</version>
      <configuration>
           <parallel>methods</parallel>
           <forkMode>always</forkMode>
                <argLine>-Xms512m -Xmx512m</argLine>
       </configuration>
</plugin>

メソッドとクラスの両方を試しましたが、並列化は見られません。依存関係宣言で示されているように、私の JUnit バージョンは 4.7 です。

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.7</version>
        <scope>compile</scope>
    </dependency>            

どんな助けでも大いに役に立ちます。

グレゴワール。

4

8 に答える 8

7

threadCountモードを使用するときは、パラメーターを使用することになっていると思いparallelます:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.6</version>
    <configuration>
      <forkMode>always</forkMode>
      <argLine>-Xms512m -Xmx512m</argLine>
      <parallel>methods</parallel>
      <threadCount>4</threadCount>
    </configuration>
  </plugin>
于 2010-08-30T22:25:16.963 に答える
4

私はsurefireバージョン2.7を使用していたため、2.12にアップグレードした後、次の構成で動作したため、同じ問題が発生しました。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.12</version>
  <configuration>
    <parallel>classes</parallel>
    <forkMode>perthread</forkMode>
    <threadCount>4</threadCount>
  </configuration>
</plugin>

4 つのスレッドが生成され、それぞれが独自の jvm を実行しています。

于 2012-07-05T14:21:45.480 に答える
2

次のようなログメッセージが表示されることを確認してください

[INFO] Concurrency config is {perCoreThreadCount=false, threadCount=1, parallel=classes, configurableParallelComputerPresent=true}

この見出しの直前:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

このメッセージは、並列の Surefire Junit プロバイダーがアクティブであることを示しています。

これが存在しない場合は、あなたが思っているよりも確実に異なるバージョンのjunitを選択している可能性があります. 4.7 未満のものは動作しません。mvn dependency:tree を実行して、存在するバージョンを確認します。

また、並列実行に関連する多数の小さなバグが修正されているため、surefire 2.6 にアップグレードする必要があります。同じ理由で、最新のjunitを使用する必要があります。

于 2010-08-31T10:10:45.570 に答える
1

Surefire のパラレル モードは非常にバグが多いです。たとえば、http ://jira.codehaus.org/browse/SUREFIRE-747およびhttp://jira.codehaus.org/browse/SUREFIRE-730を参照してください。

今日まで、単一のテストを並行して実行することはできませんでした (分岐は言うまでもありません)。

于 2011-06-16T04:27:16.717 に答える
1

forkMode を always から "never" に変更してみてください。これはドキュメントには記載されていませんが、現時点では fork と parallel を使用することはできません (確実なコードを掘り下げた結果、これが見つかりました)。

ご存知のように、多くのテスト/サポート ライブラリ (easymock、powermock など) がテストを並列化する機能を無効にしているために、スレッド セーフではないテストに遭遇する可能性があります。

于 2011-09-15T06:49:07.733 に答える
0

動作していませんか?テストに多くのテストメソッドが含まれていない場合、スピードアップはあまり得られない可能性があります。forkMode =の場合、常に最善の方法は、クラス内のすべてのテストメソッドを並行して実行することです。

于 2011-02-24T22:59:27.227 に答える
0

並列設定は TestNG のみの属性ではありませんか? これによると: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#parallel

于 2012-10-09T08:00:56.203 に答える
0

Surefire 2.16 では、JUnit テストに関する並列実行が修正されました。

于 2013-09-08T11:55:58.233 に答える