2017-10-20 24 views
2

testngを使用して並行してテストを実行しようとしていますが、設定に問題があります。testng並列テスト - クラスグループ化を避ける

私は多くのテストを含む多くのクラスファイルを持つプロジェクトを持っています。

私は現在、parallel = 'methods'フラグを使ってテストを実行しており、与えられた時間に実行されているテストの数を最大にしています。

私の目標は、同時に実行されている同じクラスのテストを避け、並列テストの数を最大限にすることです。

ですから、例えばxmlファイル与えられた:

<suite> 
<test parallel='methods' thread-count=40> 
    <classes> 
    <class>Class1</class> 
    <class>Class2</class> 
    </classes> 
</test> 
</suite> 

そして40個の利用可能なスレッドを与えられ、私は任意の時点で実行されている40回のテストを持っていると思います。

私はテストオーダーをランダム化するためにメソッドインターセプターを使用しました。私はそれが正しく動作していることを知っているEclipseデバッガーで、各クラス内で順序を制御できます。クラス2は唯一のClass1はもはや持っていないときに実行を開始

<Test from class1> 
<Test from class1> 
<Test from class2> 
<Test from class2> 

<Test from class1> 
<Test from class2> 
<Test from class1> 
<Test from class2> 

しかし、その代わりに、各クラスには以下のように並行して、それぞれのテストを順次実行します:

私の目標は、このような実行があります実行するテスト。

私はparallel = 'classes'を試しましたが、これはクラスごとに1つのスレッドを与えます。

ランダムな順序を強制し、並行テストの実行量を維持することは可能ですか?

ランダム化されたメソッドのリストを渡し、実行順序を大まかにその順序に従いたいとします。

クラスを別々のスイートとテストに分割しようとしましたが、クラスごとに異なるテストメソッド数を持つ40個のテストを並列に実行するという目標は達成されません。試験方法は不明である。

私の他の考えは、複数の継承を使用してクラスを結合し、各クラスのテストメソッドを1つのクラスに結合することでしたが、javaは多重継承をサポートしないため動作しません。

これを読んだり、アドバイスやヘルプを提供してくださった皆様、ありがとうございます。

編集:可能な複製をアドレッシング:

他の質問で提案された解決策は、私は複数のスレッドと並行して、クラスを実行することができますが、テストは他の人の前に終了した場合、それはそれのために割り当てられたスレッドのように見えます使用されません。

私は並列化するクラスが2つ以上あります。各テストにスレッドを与えるようになると、問題が発生する可能性があります.10クラスでは、それぞれ4スレッド(合計40並列)に制限されます。 1つのテストで4つのメソッドを一度に実行して36のアイドル状態が完了するのを待っている可能性があります。これはおそらくこのソリューションを実装することによるメリットを無効にします。

理想的なソリューションは、基本的な単一テスト/並列= 'メソッド'アプローチのようなテストのための共通スレッドプールを持っています。

+0

[testngのクラスとメソッドを並列化する](https://stackoverflow.com/questions/37874072/parallelizing-classes-and-method-in-testng)の可能な複製 –

+0

このメソッドを使用すると、クラスを並行して実行できます複数のスレッドでテストされますが、他のテストよりも前にテストが終了すると、割り当てられたスレッドは使用されないように見えます。 並列化するクラスが2つ以上あります。各テストにスレッドを与えることを開始すると、問題が発生する可能性があります.10クラスでは、それぞれ4スレッド(合計40並列)に制限されます。 1つのテストで36のアイドル状態で4つのメソッドを一度に実行するのを待っていることがあります。理想的なソリューションには、テスト用の共通スレッドプールがあります。 – testngthrowaway

答えて

0

parallel="methods"属性の近くにthread-count="40"を追加できますか?また、クラス名を指定しない場合はクラス名を指定してください。

+0

申し訳ありませんが、私は擬似XMLの例のスレッドカウントフラグを省略しました。 私の実際のXMLファイルでは、定義しました。 各クラスのテストは問題なく並列に実行されます。 上記の例では、クラス1とクラス2の両方にそれぞれ40個のメソッドがあり、40個のスレッドがある場合、 クラス1のすべてのメソッドが並行して開始され、終了すると、クラス2のすべてのメソッドが開始されます。 私は理想的にclass1とclass2がparallel = 'classes'フラグのように、より多くのスレッドで実行されるようにしたいと思います。 – testngthrowaway

+0

私はあなたの質問はここで答えられると思う:https://stackoverflow.com/questions/37874072/parallelizing-classes-and-method-in-testng。 –

+0

ありがとうございます。私は妥協の道を行くことになるかもしれませんが、私はクラスをテストメソッドの数で均等に分割する必要があることを心配しています。テスト間に共通のスレッドプールを確保する方法はありますか? スイートレベルで40スレッドのソリューションを試しましたが、それぞれ40スレッドで2回のテストを開始しました。合計80回は並列実行しようとしています。 私はこのメソッドに問題があると思います。実行する並列クラスの数を最大限にしようとしますが、アイドル状態のスレッドの可能性は最小限に抑えようとします。 – testngthrowaway

関連する問題