运行 与 TestNG 并行的测试没有按预期工作

Running Tests parallel with TestNG doesn't work as expected

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

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

这是我的测试方法:

@Parameters({"browser", "remoteURL", "user"})
@Test
public void parallelTest(String browser, String remoteURL, String user) {
    // test steps
}

Expect:测试应该同时在各自的Node机器上打开每个浏览器并执行测试步骤(分别用用户登录并做事......)。他们是不同节点上的不同用户,以避免会话。

Actual: 浏览器实际上在2个节点同时打开,但是测试步骤没有运行通过,卡在NoSuchElementException,从 Chrome 上的登录页面开始,在 IE 上更进一步,但仍然是同样的问题

注意,如果我运行测试正常(通过设置parallel="none"),那么每个测试标签都执行成功。我在 IntelliJ 中执行测试,右键单击 testng.xml 和 运行。

我是不是遗漏了一些设置?非常感谢任何帮助。谢谢

当您想 运行 并行测试时,您必须确保为每次测试执行提供资源,例如浏览器实例。例如,TestNG 不提供像 JUnit5 这样的动态管理测试实例的灵活性。

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