TestNG套件采用并行DataProvider和随机顺序的方法 - 如何实现?

Mar*_*ski 6 java testng

我有一个测试类,其中包含许多方法,其中每个方法都受到并行数据提供程序的影响.我想实现方法执行的混合顺序,但我无法控制数据提供程序线程池大小 - 它被多个测试方法复杂化.请看例子:

我的测试套件定义:

<suite data-provider-thread-count="5" parallel="methods" preserve-order="false" name="Data provider problem">
Run Code Online (Sandbox Code Playgroud)

我的考试班:

@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();
}
Run Code Online (Sandbox Code Playgroud)

有了这样的测试套件的配置我已经实现了的执行test1()test2()混合,但数据提供商线程池是不是5,但10!添加新的测试方法会增加线程数.令我感到惊讶的是,testNg文档站点说:"从XML文件运行的并行数据提供程序共享相同的线程池".我只是错误地使用套件'并行'属性?如果是这样,是否有可能通过其他方式实现我的目标(与数据提供者一起执行方法的混合顺序)?

我也尝试使用一个数据提供程序并根据注入的测试方法创建测试数据,但它也没有帮助,见下文:

@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;
}
Run Code Online (Sandbox Code Playgroud)

我仍然可以并行运行10个测试执行.将数据提供者方法移动到单独的类也没有帮助.

Gun*_*h D 2

您是否尝试调整@Test的参数?

@Test(dataProvider = "dp", threadPoolSize=5)
Run Code Online (Sandbox Code Playgroud)