多数のメソッドを持つテスト クラスがあり、それぞれが並列データ プロバイダーにうんざりしています。メソッドの実行順序を混在させたいのですが、データ プロバイダーのスレッド プール サイズを制御できません。テスト メソッドの数が倍増します。例を参照してください:
私のテストスイートの定義:
<suite data-provider-thread-count="5" parallel="methods" preserve-order="false" name="Data provider problem">
私のテストクラス:
@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();
}
このようなテスト スイートの構成では、test1()
との実行test2()
が混在していることがわかりましたが、データ プロバイダーのスレッド プールは 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回のテスト実行が並行して実行されます。データプロバイダーメソッドを別のクラスに移動しても役に立ちません。