2013-03-07 14 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)