【问题标题】:TestNG suite with parallel DataProvider and random order of methods - how to achieve?具有并行 DataProvider 和随机方法顺序的 TestNG 套件 - 如何实现?
【发布时间】:2013-03-07 07:48:45
【问题描述】:

我有一个包含许多方法的测试类,其中每个方法都受够了并行数据提供程序。我想实现方法执行的混合顺序,但我无法控制数据提供者线程池的大小——它被测试方法的数量所放大。请看示例:

我的测试套件定义:

<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 文件运行的并行数据提供程序共享相同的线程池”。我只是错误地使用了套件“并行”属性吗?如果是这样,是否有可能通过其他方式实现我的目标(方法执行与数据提供者的混合顺序)?

我也尝试过使用一个数据提供者并根据注入的测试方法创建测试数据,但这也无济于事,见下文:

@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 个测试执行。将数据提供者方法移动到单独的类也无济于事。

【问题讨论】:

标签: java testng


【解决方案1】:

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

@Test(dataProvider = "dp", threadPoolSize=5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2020-03-01
    相关资源
    最近更新 更多