代码之家  ›  专栏  ›  技术社区  ›  Ragnarsson

与TestNG并行运行测试无法按预期工作

  •  0
  • Ragnarsson  · 技术社区  · 7 年前

    出于某种原因,我需要在IE11和Chrome上并行执行测试,每个浏览器都在独立的节点机器上。这是我的测试。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
    }
    

    预料 :测试应同时打开各自节点计算机上的每个浏览器,并执行测试步骤(分别使用用户登录和执行操作…)。他们是不同节点上的不同用户,以避免会话。

    真实的 :浏览器实际上是在两个节点上同时打开的,但测试步骤没有完成,它们被卡住了 NoSuchElementException ,从Chrome上的登录页面,它在IE上更进一步,但仍然存在相同的问题

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

    我是否缺少一些设置?非常感谢您的帮助。谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   RocketRaccoon    7 年前

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

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