我想用DataProvider实现并行测试运行以测试输入字段。
预期结果 DataProvider中每个文本的并行测试
实际结果 将DataProvider中的每个字符串作为一个
进行一次测试如何在DataProvider中输入字段的每个字符串中解决此问题? 这是我的代码。
的testng.xml:
<suite name="TestParallel" parallel="tests" thread-count="2" data-provider-thread-count="2" preserve-order="false" >
<test name="ChromeTest">
<parameter name="browser" value="Chrome" />
<classes>
<class name="com.test.DataProviderTestParallel"/>
</classes>
</test>
<test name="FirefoxTest">
<parameter name="browser" value="Firefox" />
<classes>
<class name="com.test.DataProviderTestParallel"/>
</classes>
</test>
<test name="EdgeTest">
<parameter name="browser" value="Edge" />
<classes>
<class name="com.test.DataProviderTestParallel"/>
</class>
</classes>
</test>
</suite>
测试
@BeforeTest
@Parameters("browser")
public static void initSelenium(String browser) throws Exception {
// Check if parameter passed from TestNG is 'firefox'
if(browser.equalsIgnoreCase("firefox")){
// Create firefox instance
FirefoxDriverManager.getInstance().setup();
driver = new FirefoxDriver();
}
// Check if parameter passed as 'chrome'
else if(browser.equalsIgnoreCase("chrome")){
ChromeDriverManager.getInstance().setup();
driver = new ChromeDriver();
}
// Check if parameter passed as 'Edge'
else if(browser.equalsIgnoreCase("Edge")){
EdgeDriverManager.getInstance().setup();
driver = new EdgeDriver();
}
else{
// If no browser passed throw exception
throw new Exception("Browser is not correct");
}
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@DataProvider(name = "forSearch", parallel = true)
public Object[] forSearch() {
return new Object[]{
"Text1",
"Text2",
"Text3"
};
}
@Test(description = "Search text", dataProvider = "forSearch")
public void searchWithButton(String searchText) {
SupportPageObject supportPage = new SupportPageObject();
SearchResultPageObject searchResultPage = new SearchResultPageObject();
supportPage.open();
supportPage.isOpen();
// Input text into field
supportPage.writeQuestion(searchText);
// Press "search" button
supportPage.searchWithButton();
searchResultPage.isOpen();
}
UPD:我发现当我拥有 data-provider-thread-count 时,此问题的重现次数大于1。 在这种情况下,它会打开 thread-count 的窗口数,然后在最后一个输入 data-provider-thread-count 来自DataProvider的文本。 但仍然不知道如何修复它并将DataProvider文本分别输入到每个打开的窗口中。
答案 0 :(得分:0)
您需要返回一个Object [] []。
@DataProvider(name = "forSearch", parallel = true)
public Object[][] forSearch() {
return new Object[][]{
new Object[] { "Text1"},
new Object[] { "Text2"},
new Object[] { "Text3"}
};
}