2016-07-31 41 views
0

我有一個TestNG的方法只是這樣的:TestNG的並行測試/方法,使用dataprovoder

@Test(dataProvider="takeMyProvider") 
public void myTest(String param1, String param2){ 

    System.out.println(param1 + " " + param2); 

} 

我的數據提供器返回10個元素。我的方法將在一個線程中執行10次。這怎麼可能呢?例如

  • 我想有5個方法並行。網絡驅動器應該同時打開5個瀏覽器。這些並行5次測試之後,其他5試驗應執行

  • 的webdriver的應該打開10個瀏覽器和做所有10個元素平行

沒有任何人有一個想法?

回答

0

TestNG的@Test註解已經有你想要的...在某種程度上:

// Execute 10 times with a pool of 5 threads 
@Test(invocationCount = 10, threadPoolSize = 5) 

這是什麼不會做的是適合你的第一個場景完全相同,也就是說,運行第5,恨不得完成後,運行其他5.

1

您可以在TestNG中通過套件文件定義並行性。例如下面的方法運行並聯10個線程:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="MySuiteNameHere" parallel="methods" thread-count="10"> 

    <test name="Selenium Tests"> 
     <classes> 
      <class name="foo.bar.FooTest"/> 
     </classes> 
    </test> 
</suite> 

您還需要注意的是您的數據提供者可以是線程安全的,允許它不強制方法按順序運行。

// data providers force single threaded by default 
@DataProvider(name = "takeMyProvider", parallel = true) 

不過要小心。在使用並行方法運行時,TestNG不會創建類對象的新實例。這意味着如果您將測試類對象的值保存在線程中,則可能會遇到線程問題。

另請注意,如果將線程數設置爲5,則不會等待前5個完成,然後啓動下5個。它基本上將所有測試方法放入隊列中,然後啓動x線程。然後,每個線程只需在隊列可用時輪詢隊列中的下一個元素。

0

許多thx爲您的反饋和有用tipps。 我的測試運行 - 也許 - 以任何並行的方式,但只在一個瀏覽器實例。

允許跳躍中詳細:

我的數據提供器返回一個[] [],執行

@Dataprovider(name = "takeMyProvider", parallel = true) 
public object[][] myProvider(){ 
    return new object[][]{{"1", "name1"}, {"2", "name2"} {"3", "name3"}} 
} 

本試驗方法對象三次

@Test(dataProvider="takeMyProvider") 
public void myTest(String param1, String param2){ 

    System.out.println(param1 + " " + param2); 

} 

但只是在一個瀏覽器實例。那不是我想要的。

我想要testNG啓動3個chrome實例,並行執行3個測試。

btw我正在硒網格上運行測試。也許有100個節點。 當100個節點並行執行此測試時,這將是完美的。甚至1.000,取決於數據提供者。

有沒有人有想法?

致以問候

相關問題