如何让Factory配合DataProvider按队列顺序执行每个参数对应的整套测试
TestNG Factory+DataProvider按实例顺序执行解决方案
你遇到的交叉执行是TestNG默认的方法级调度逻辑导致的,TestNG默认会优先按测试方法维度执行,即先执行所有实例的test1,再执行所有实例的test2,才会出现执行顺序交叉的情况。可以通过以下几种方案调整:
方案1:通过testng.xml配置(最常用)
在suite标签中添加group-by-instances="true"属性,即可让TestNG按测试实例为单位执行,跑完一个实例的所有生命周期方法和测试方法后,再执行下一个实例。
配置示例:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd"> <suite name="TestSuite" group-by-instances="true"> <test name="SingleInstanceTest"> <classes> <class name="你的包路径.SomeTest"/> </classes> </test> </suite>
方案2:Maven运行场景配置
如果是通过Maven执行测试,不需要单独维护testng.xml的话,可以直接在maven-surefire-plugin插件中添加对应配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <properties> <property> <name>group-by-instances</name> <value>true</value> </property> </properties> </configuration> </plugin> </plugins> </build>
方案3:注解方式配置
如果不想修改配置文件,也可以直接在测试类上添加@Test(singleThreaded = true)注解,该注解的作用是保证当前类的所有实例在同一个线程中按顺序执行,也能达到预期效果:
@Test(singleThreaded = true) public class SomeTest { // 原有代码不变 }
内容的提问来源于stack exchange,提问作者hhrzc
相关产品推荐
相关产品推荐

