TestNG Selenium Grid 2没有并行运行测试

时间:2013-02-14 12:06:22

标签: webdriver testng selenium-grid selenium-chromedriver

尝试使用TestNG和Selenium Grid 2并行运行测试时似乎遇到了问题。

虽然打开了正确数量的浏览器以匹配我正在运行的测试数量,但所有测试的所有指令都会被触发到同一个浏览器窗口。例如,每个测试将打开一个页面并尝试登录。将打开四个浏览器窗口,但一个浏览器窗口将导航到登录页面四次,然后输入用户名4次,而其余的浏览器窗口仍然不活动的。

以下是我开始网格的方式:

java -jar selenium-server-standalone-28.0.jar -role hub
java -jar selenium-server-standalone-28.0.jar -webdriver.chrome.driver="*location*/chromedriver_mac" -role node 

这是xml套件的设置方式:

<suite name="testng" verbose="1" parallel="classes">
    <test name="chrome">
        <packages>
            <package name="login"/>
            <package name="lists"/>
        </packages>
    </test>
</suite>

这是一个如何布置测试的例子:

public class login_logout extends TestBase {
    @Test
    public void login(){
        //initiates login page object and call super user login
        LoginPage login = LoginPage.navigateTo(driver, base_url)
        LoggedInPage loggedIn = login.superuserlogin();
        }
    }

测试基地的布局如下:

public class TestBase {
    public static WebDriver driver;
    public static DesiredCapabilitiess capabilities;
    @BeforeClass
    public static void setUp(){
        base_url = "*login page url*;
        capabilities = DesiredCapabilities.chrome();
        driver = new RemoteWebDriver(capabilities);
        driver.get(base_url);
    }
}

这可能是一件非常明显的事情,我很遗憾,但任何帮助都会受到赞赏。

提前致谢。

2 个答案:

答案 0 :(得分:4)

驱动程序对象是静态的。所以你有4个初始化发生和4个浏览器启动但驱动程序是静态的,它只包含对最后一个初始化浏览器的引用,因此所有命令都是针对同一个驱动程序执行的。您可以尝试为并行运行探索Threadlocal对象。

答案 1 :(得分:0)

从我的角度来看,您在选择WebDriver和TestNG时做出了正确的决定。 但由于这些是非常强大的工具,因此您应该了解一些基础知识。

在第一步中,获得一些编程经验非常重要。

其次,您可以添加一些特定的技巧。

为什么不在每个测试类中初始化WebDriver(在构造函数或@BeforeClass中)?

稍后,您还可以使用@DataProvider和@Factory模式进行配置。

那太酷了!