[英]TestNG parallel test/method using dataprovoder
我有一個像這樣的testNG方法:
@Test(dataProvider="takeMyProvider")
public void myTest(String param1, String param2){
System.out.println(param1 + " " + param2);
}
我的數據提供者返回10個元素。 我的方法將在一個線程中執行10次。 這怎么可能並行? 例如
要么
有人有主意嗎?
您可以通過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
線程。 然后,每個線程在可用時僅輪詢隊列中的下一個元素。
TestNG的@Test
注釋已經具有了您想要的東西...在某種程度上:
// Execute 10 times with a pool of 5 threads
@Test(invocationCount = 10, threadPoolSize = 5)
這不會完全適合您的第一種情況,即運行前5個,等待它們完成,再運行其他5個。
您的反饋意見和有用的建議很多。 我的測試-可能-以任何並行方式運行,但僅在一個瀏覽器實例中運行。
讓我們詳細跳一下:
我的數據提供者返回一個對象[] []
@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個測試。
順便說一句,我正在硒網格上運行測試。 也許有100個節點。 當100個節點並行進行此測試時,這將是完美的。 甚至1.000,取決於dataprovider。
有人有主意嗎?
最好的祝福
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.