Selenium - 在本地并行运行测试

时间:2016-11-22 17:15:04

标签: java selenium testng

我正试图在本地并行运行我的硒测试并通过在线阅读我知道我可以通过使用TestNG来实现。 我有以下示例代码,允许我并行运行2个测试。

的testng.xml

<!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>

Sessions.class

@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)。

Sessions.class

public void testSession1() throws IOException{
    WebDriver driver = getDriver();
    open(driver, url);
    enterTextInSearchField(driver, "one");
}

MyMethods.class

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);
}

我现在遇到的问题是我需要始终将“driver”作为所有方法的参数传递。如果我不这样做,测试会混淆并尝试在同一浏览器上运行所有内容。 有没有更好的方法可以做到这一点,所以我仍然可以并行运行,而不必将驱动程序作为参数传递?

1 个答案:

答案 0 :(得分:0)

您可以查看的其中一个选项是利用ThreadLocal变量,其中@BeforeMethod(或)位于org.testng.IInvokedMethodListener#beforeInvocation()(或)org.testng.IHookable中实施后,您可以对WebDriver实例进行处理,并将其推送到ThreadLocal变量中,@Test方法可以弹出并使用它。

我已经在我的博文中解释了这一点。请看看是否有帮助。

博客链接:https://rationaleemotions.wordpress.com/2013/07/31/parallel-webdriver-executions-using-testng/