与TestNG并行运行测试并不像预期的那样工作

时间:2018-04-12 13:07:56

标签: selenium-webdriver automated-tests testng selenium-grid remotewebdriver

出于某种原因,我需要在IE11和Chrome上并行执行我的测试,每个浏览器都在分离的Node机器上。这是我的testng.xml:

java.net.URI.toASCIIString()

这是我的测试方法:

<suite name="Parallel" parallel="tests">    
    <test name="Performance Test Chrome">
        <parameter name="browser" value="Chrome"/>            
        <parameter name="remoteURL" value="http://myIP1:5555/wd/hub"/>
        <parameter name="user" value="user1"/>
        <classes>
            <class name="com.TestClass"/>
        </classes>
    </test>
    <test name="Performance Test IE11">
        <parameter name="browser" value="IE" />            
        <parameter name="remoteURL" value="http://myIP2:5555/wd/hub"/>
        <parameter name="user" value="user2"/>
        <classes>
            <class name="com.TestClass" />
        </classes>
    </test>
</suite>

期待:测试应该同时打开各个Node机器上的每个浏览器并执行测试步骤(分别使用用户登录并执行操作......)。它们是不同节点上的不同用户以避免会话。

实际:浏览器实际上是在两个节点上同时打开的,但是测试步骤没有完成,他们会遇到@Parameters({"browser", "remoteURL", "user"}) @Test public void parallelTest(String browser, String remoteURL, String user) { // test steps } ,从登录页面开始Chrome,它与IE进一步发展,但仍然是同样的问题

请注意,如果我正常运行测试(通过设置NoSuchElementException),则每个测试标记都会成功执行。我在IntelliJ中执行测试,右键单击testng.xml并运行。

我错过了一些设置吗?任何帮助非常感谢。感谢

1 个答案:

答案 0 :(得分:1)

当您想要并行运行测试时,您必须确保为每个测试执行提供资源,例如浏览器实例。例如,像JUnit5一样,TestNG在动态调整测试实例时没有提供这种灵活性。

因此,对于每次测试运行,您都需要新的浏览器(通常)。如果将webdriver实例创建为静态变量或单例,则不会在并行运行之间共享它。可以通过制作驱动程序ThreadLocal来处理。