2013-03-07 60 views
6

我有许多方法的测试类,其中每个方法都厌倦了并行数据提供程序。我想实现方法执行的混合顺序,但我无法控制数据提供程序线程池的大小 - 它通过多个测试方法进行多重复制。请看例子:具有并行DataProvider和随机顺序的方法的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文件运行的并行数据提供程序共享相同的线程池,这令我感到惊讶。我只是错误地使用套件“并行”属性?如果是这样,是否有可能通过其他方式实现我的目标(与数据提供者一起执行方法的混合顺序)?

我还试图用一个数据提供者和注射测试方法的基础上创建的测试数据,但它并没有帮助,见下图:

@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 2017-09-11 13:32:13

回答

2

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

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