2013-03-07 20 views
6

私はいくつかのメソッドを持つテストクラスを用意しています。それぞれのクラスはパラレルデータプロバイダにうんざりしています。私はメソッドの実行の混在した順序を達成したいが、私はデータプロバイダのスレッドプールのサイズを制御することはできません - テストメソッドの数によって多元化されています。このようなテストスイートの私はtest1()test2()の実行が混在していることを達成している設定が、データでパラレルDataProviderとランダムな順序のメソッドを持つTestNGスイート - どのように達成するのですか?

@Test(dataProvider = "dp1") 
public void test1(TestData testData) { } 

@Test(dataProvider = "dp2") 
public void test2(TestData testData) { } 

@DataProvider(name = "dp1", parallel = true) 
public static Object[][] dp1() { 
    return createTestData1(); 
} 

@DataProvider(name = "dp2", parallel = true) 
public static Object[][] dp2() { 
    return createTestData2(); 
} 

私のテストスイートの定義:

<suite data-provider-thread-count="5" parallel="methods" preserve-order="false" name="Data provider problem"> 

私のテストクラスの例を参照してくださいプロバイダスレッドプールは5ではなく10です!新しいテストメソッドを追加すると、スレッド数が増えます。 testNgのドキュメンテーションサイトでは、「XMLファイルから実行するパラレルデータプロバイダは、同じスレッドプールを共有しています。私は間違ってスイートの '並列'属性を使用していますか?もしそうなら、私の目標(データプロバイダと一緒にメソッドの実行を混在させる)を他の手段で達成することは可能でしょうか?

下記を参照してください、私はまた、1つのデータプロバイダを使用し、注入された試験法に基づいてテストデータを作成しようとしたが、それはどちらか助けていません:

@Test(dataProvider = "dp") 
public void test1(TestData testData) { } 

@Test(dataProvider = "dp") 
public void test2(TestData testData) { } 

@DataProvider(name = "dp", parallel = true) 
public static Object[][] dp(Method m) { 
    if (m.getName().equals("test1")) { 
     return createTestData1(); 
    } 
    if (m.getName().equals("test2")) { 
     return createTestData2(); 
    } 
    return null; 
} 

それでも私は平行に走る10のテスト実行を取得。クラスを分離するためにデータプロバイダメソッドを移動することは役に立ちません。

+0

次の質問に対する私の答えをご覧ください。https://stackoverflow.com/a/46156794/4178795 – sanitar4eg

答えて

2

@Testのパラメータを調整しようとしましたか?

@Test(dataProvider = "dp", threadPoolSize=5) 
関連する問題