gpt4 book ai didi

java - TestNG 类并行运行,但方法则不然。如何配置 testng.xml 文件和测试类,以便方法也可以并行运行?

转载 作者:行者123 更新时间:2023-11-30 03:35:22 24 4
gpt4 key购买 nike

我有一套 Selenium WebDriver 测试,正在与 Grid 一起运行。当我运行这个 testng.xml 文件时:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes" thread-count="20">
<test name="Test">
<classes>
<class name="testcases.test1"/>
<class name="testcases.test2"/>
<class name="testcases.test3"/>
<class name="testcases.test4"/>
<class name="testcases.test5"/>
<class name="testcases.test6"/>
<class name="testcases.test7"/>
<class name="testcases.test8"/>
<class name="testcases.test9"/>
<class name="testcases.test10"/>
<class name="testcases.test11"/>
<class name="testcases.test12"/>
<class name="testcases.test13"/>
<class name="testcases.test14"/>
<class name="testcases.test15"/>
<class name="testcases.test16"/>
<class name="testcases.test17"/>
<class name="testcases.test18"/>
<class name="testcases.test19"/>
<class name="testcases.test20"/>
<class name="testcases.test21"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

打开多个浏览器,每个浏览器运行@BeforeClass方法和第一个@Test方法。但是,每个浏览器完成第一个 @Test 方法后,它将等待所有其他浏览器完成各自的第一个 @Test 方法。

测试的结构如下:

public class sampleTestClass {
@BeforeClass
public void setup(){
//setup Remote WebDriver
}
@Test
public void method1(){
//do things
}
@Test(dependsOnMethods = "method1")
public void method2(){
//do things
}
@Test(dependsOnMethods = "method2")
public void method3(){
//do things
}
@AfterClass
public void teardown(){
//call teardown
}

}

每个类中有多个@Test方法。我要补充的是,当我使用这个 .xml 文件时,一切都会按照我喜欢的方式运行:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="MySuite" parallel="tests" thread-count="20">
<test name="First Test">
<classes>
<class name="testcases.test1"/>
</classes>
</test>
<test name="Second Test">
<classes>
<class name="testcases.test2"/>
</classes>
</test>
<test name="Third Test">
<classes>
<class name="testcases.test3"/>
</classes>
</test>
<test name="Fourth Test">
<classes>
<class name="testcases.test4"/>
</classes>
</test>
<!--<test name="Fifth Test">
<classes>
<class name="testcases.test5"/>
</classes>
</test>-->
<test name="Sixth Test">
<classes>
<class name="testcases.test6"/>
</classes>
</test>
<test name="Seventh Test">
<classes>
<class name="testcases.test7"/>
</classes>
</test>
</suite>

我对这种配置不满意的原因是,一是我认为它根本不保留标签的语义,二是(最重要的是)我希望能够运行自动并行生成一系列故障,但该 .xml 文件的配置与我遇到问题的最上面的配置相同。

在我看来,在套件标签中指定parallel="classes"与TestNG文档一致,但没有实现单独类中@Test方法的异步执行。

为什么 .xml 文件的此配置不起作用?我需要做哪些不同的事情才能使其发挥作用?

最佳答案

在具有多个方法的 webdriver 测试类的上下文中,假设该类中有一个 webdriver 实例,我不知道如何在方法之间同时共享一个 webdriver 实例。我似乎必须一次调用一个方法,以便每个方法都轮流使用 webdriver 实例。否则,您似乎会遇到某种并发异常。

我曾多次尝试让并行方法与 TestNG 一起使用,但从未成功。 There is an example in the source code though这可能是一个线索;只需查看同一文件夹中的 testng.xml 即可。

关于java - TestNG 类并行运行,但方法则不然。如何配置 testng.xml 文件和测试类,以便方法也可以并行运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com