[英]Selenium - Running tests in parallel locally
我正在尝试在本地并行运行我的硒测试,并且通过在线阅读我知道我可以使用TestNG来进行。 我有以下示例代码,使我可以并行运行2个测试。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Parallel" thread-count="2" parallel="methods" >
<test name="testing">
<classes>
<class name="Sessions"/>
</classes>
</test>
</suite>
@Test
public void testSessionOne() throws IOException {
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.co.uk");
driver.findElement(By.name("q")).sendKeys("one");
}
@Test
public void testSessionTwo() throws IOException {
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.co.uk");
driver.findElement(By.name("q")).sendKeys("two");
}
效果很好,但是我想使用PageObjectModel框架。 我已经对测试进行了一些更改,因此现在看起来像这样。 (我保留了相同的testng.xml)。
public void testSession1() throws IOException{
WebDriver driver = getDriver();
open(driver, url);
enterTextInSearchField(driver, "one");
}
public WebDriver getDriver(){
return new ChromeDriver();
}
public void open(WebDriver driver, String url) {
driver.get(url);
}
public void enterTextInSearchField(WebDriver driver, String search) {
driver.findElement(By.name("q")).sendKeys(search);
}
我现在遇到的问题是,我需要始终将“驱动程序”作为参数传递给所有方法。 如果我不这样做,测试会感到困惑,并尝试在同一浏览器上运行所有内容。 有没有更好的方法可以做到这一点,使我仍然能够并行运行而不必将驱动程序作为参数传递?
其中之一,你可以看一下选项是利用ThreadLocal
变量,其中,无论是在@BeforeMethod
(或)在org.testng.IInvokedMethodListener#beforeInvocation()
在(或) org.testng.IHookable
实现你可以有你WebDriver
实例化已完成,并推送到ThreadLocal
变量中,您的@Test
方法可以弹出该变量并对其进行处理。
我已经在我的这篇博客文章中对此进行了解释。 请查看是否有帮助。
博客链接: https : //rationaleemotions.wordpress.com/2013/07/31/parallel-webdriver-executions-using-testng/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.