出于某种原因,我需要在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并运行。
我错过了一些设置吗?任何帮助非常感谢。感谢
答案 0 :(得分:1)
当您想要并行运行测试时,您必须确保为每个测试执行提供资源,例如浏览器实例。例如,像JUnit5一样,TestNG在动态调整测试实例时没有提供这种灵活性。
因此,对于每次测试运行,您都需要新的浏览器(通常)。如果将webdriver实例创建为静态变量或单例,则不会在并行运行之间共享它。可以通过制作驱动程序ThreadLocal
来处理。