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

标签 java testng

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

我的测试套件定义:

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

我也尝试过使用一个数据提供者并在注入(inject)测试方法的基础上创建测试数据,但它也无济于事,见下文:

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

最佳答案

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

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

关于java - 具有并行 DataProvider 和随机顺序方法的 TestNG 套件 - 如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15265771/

相关文章:

java - 寻找wordnet中同义词集之间的距离

ruby-on-rails - 如何在 Controller 的 Rails 5 测试中测试或绕过 Basic Auth

java - Selenium TestNG 测试依赖于其他方法

java - 在 Java 中旋转多边形

java - 为什么我的 Spring session 作用域 bean 在 session 之间共享?

java - 无法在本地运行 GCP DataflowTemplates

java - 当我在 JPanel 上绘制背景图像时,它在 Windows 下的行为与在 Linux 下的行为不同

java - 如果测试失败,则重试 TestNG 代码中的特定代码段,而不是整个测试

java - 线程代码中的断言不会使测试用例失败

xslt - 生成 xslt 报告