簡體   English   中英

使用dataprovoder的TestNG並行測試/方法

[英]TestNG parallel test/method using dataprovoder

我有一個像這樣的testNG方法:

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

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

}

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

  • 我想同時有5種方法。 網絡驅動程序應同時打開5個瀏覽器。 在並行執行這5個測試之后,應執行其他5個測試

要么

  • 網絡驅動程序應打開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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM