我想在TestNg中並行運行使用@dataprovider的硒測試。理想情況下,測試是通過方法(一個測試=一個方法)並行,而不是瀏覽器的簡單套件並行。我曾經在某處讀過大約5個ChromeDriver實例可以被控制,所以我認爲這應該是可能的。後來我打算轉到grid2。對於開發,我通過右鍵單擊+在XML配置文件上運行,使用IntelliJ Idea測試運行器運行。使用數據提供程序執行並行TestNG硒測試的驅動程序行爲
我在並行運行我的測試時遇到問題(在grid2和本地),所以我創建了一個或多或少我想要做的樣本。
這裏是我的測試類
package tests;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.*;
import java.util.concurrent.TimeUnit;
import static org.testng.Assert.assertNotNull;
public class ParallelTest {
public static final String SEARCH_TERMS = "search-terms";
private WebDriver driver;
@BeforeMethod
@Parameters({"browser"})
public void beforeMethod(@Optional("chrome") String browser){
driver = getBrowser(browser);
driver.manage().deleteAllCookies();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
private WebDriver getBrowser(String browser) {
if(browser.equals("chrome")){
System.setProperty("webdriver.chrome.driver", "webdrivers\\chromedriver.exe");
return new ChromeDriver();
}
return new FirefoxDriver();
}
@AfterMethod
public void afterMethod(){
driver.quit();
}
@Test(description = "Check parallel selenium works.",
dataProvider = SEARCH_TERMS)
public void parallelSeleniumTest(String searchTerm){
driver.get("http://google.com");
WebElement search = driver.findElement(By.id("gbqfq"));
new Actions(driver)
.sendKeys(search, searchTerm)
.sendKeys(search, Keys.ENTER)
.perform();
String firstResult = driver.findElements(By.className("r")).get(0).getText();
assertNotNull(firstResult);
System.out.println(firstResult);
}
@DataProvider(name = SEARCH_TERMS, parallel = true)
public Object[][] getSearchTerms(){
return new Object[][]{
{"google"},
{"microsoft"},
{"facebook"},
{"amazon"},
{"apple"},
{"oracle"},
{"yahoo"},
{"jetbrains"},
{"intellij idea"},
{"selenium"},
{"java"},
{"testng"},
{"code"}
};
}
}
我在一些本地的事件扔,因爲我在測試套件中大量使用它們。
這裏是TestNG的XML配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="4" name="vfr6-ui-tests" parallel="methods">
<test name="parallel-test-firefox">
<parameter name="browser" value="firefox"/>
<classes>
<class name="tests.ParallelTest"/>
</classes>
</test>
<test name="parallel-test-chrome">
<parameter name="browser" value="chrome"/>
<classes>
<class name="tests.ParallelTest"/>
</classes>
</test>
</suite>
我讀實例每次測試一個司機往往是最易於維護。問題在於,firefox測試以串行方式運行,而chrome測試作爲測試用例吐出所有數據點,試圖打開一大堆瀏覽器實例,然後一切都失敗。我的測試將有10-25或300-500個數據點(在客戶端或客戶端x產品之間循環)。
設置驅動程序,數據提供者和測試運行器以在運行測試中實現最佳並行性的最佳方式是什麼?
很好的迴應,聽起來很合理。我很早就回到了編寫應用程序的語言(C#)。希望別人認爲這有用! – craastad