114

私は JUnit 4.4 と Maven を使用しており、実行時間の長い統合テストが多数あります。

テスト スイートの並列化に関しては、単一のテスト クラスで各テスト メソッドを並列に実行できるソリューションがいくつかあります。しかし、これらはすべて、何らかの方法でテストを変更する必要があります。

XスレッドでX個の異なるテストクラスを並行して実行する方が、はるかにクリーンなソリューションになると本当に思います。何百ものテストがあるので、個々のテストクラスをスレッド化することはあまり気にしません。

これを行う方法はありますか?

4

10 に答える 10

80

Maven プラグインを使用します。

<build>
    <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.7.1</version>
        <configuration>
            <parallel>classes</parallel>
            <threadCount>5</threadCount>
        </configuration>
    </plugin>
    </plugins>
</build>
于 2012-02-29T11:31:18.833 に答える
42

junit 4.7 から、TestNG を使用せずにテストを並行して実行できるようになりました。実際には 4.6 から可能になりましたが、4.7 でいくつかの修正が行われ、実行可能なオプションになります。ここで読むことができるSpringで並列テストを実行することもできます

于 2009-07-08T14:31:26.817 に答える
5

tempus-fugitも同様のものを提供しています。詳細についてはドキュメントを確認してください。これは JUnit 4.7 に依存しており、テストを にマークするだけ@RunWith(ConcurrentTestRunner)です。

乾杯

于 2010-01-02T12:22:57.937 に答える
3

オープン ソース ライブラリのTest Load Balancerを確認できます。それはあなたが求めていることを正確に行います - 異なるテストクラスを並行して実行します。これはant-junitレベルで統合されるため、テストを変更する必要はありません。私はライブラリの作成者の 1 人です。

また、プロセス レベルのサンドボックスが必要になる場合があるため、スレッドで実行しないことを検討してください。たとえば、統合テストで DB にヒットしている場合、別のテストが別のスレッドにデータを追加したために 1 つのテストが失敗することは望ましくありません。ほとんどの場合、テストはこれを念頭に置いて作成されていません。

最後に、これまでどのようにこの問題を解決してきましたか?

于 2011-06-04T05:26:45.813 に答える
2

Junit 自体が提供する ParallelComputer を使用して、テストを並行して実行できます。ここでは、開始するための小さなスニペットを示します。

Class[] cls = { TestCase1.class, TestCase2.class };
Result result = JUnitCore.runClasses(ParallelComputer.classes(), cls);
List<Failure> failures = result.getFailures();

これは、Maven やその他のビルド管理ツールに依存しないため、コードからテストを実行する必要がある場合に役立ちます。

これにより、すべてのテスト ケースが並行して実行されることに注意してください。異なるテスト ケース間に依存関係がある場合、誤検出が発生する可能性があります。いずれにせよ、相互に依存するテストを行うべきではありません。

于 2013-12-26T11:30:31.673 に答える
2

TestNG はそれを行うことができます(これは私の最初の反射でした。その後、既に多くのテストケースがあることがわかりました)。

JUnit については、parallel-junitを参照してください。

于 2009-01-08T11:01:05.177 に答える
-3

コンピューティング グリッド全体にテストを分散して実行できるGridgainを試すことができます。

于 2009-04-08T08:23:56.780 に答える
-3

すぐにテストを TestNg テストに変更できます (インポートを変更するだけです)。TestNG は並列テストに最適です。

于 2009-01-08T16:34:22.787 に答える