
在 TestNG 中,可通过 parallel="tests" 实现不同 标签间并行执行,同时在 内部设置 parallel="false" 保证其下所有测试类按声明顺序串行执行,从而避免跨类方法交错运行。
在 testng 中,通过 `parallel="tests"` 实现不同 `
TestNG 默认对 <test></test> 下的 <classes></classes> 采用并行调度策略(尤其在 suite 级 parallel="tests" 时),这会导致同一 <test></test> 内多个类的方法被线程交叉执行——例如 FBTwoClass 的 @Test 方法可能早于 FBOneClass 的全部方法完成,违背串行依赖逻辑。
✅ 正确解法:在 <test></test> 标签内显式指定 parallel="false",覆盖 suite 级并行策略对该 test 的影响。修改后的 testng.xml 如下:
<suite name="MyTestSuite" parallel="tests" thread-count="2">
<test name="Test1" parallel="false">
<classes>
<class name="com.example.FBOneClass" />
<class name="com.example.FBTwoClass" />
</classes>
</test>
<test name="Test2" parallel="false">
<classes>
<class name="com.example.GOneClass" />
<class name="com.example.GTwoClass" />
</classes>
</test>
</suite>? 关键说明:
-
suite@parallel="tests":使Test1和Test2两个<test></test>并行运行(各分配独立线程); -
test@parallel="false":强制该<test></test>内所有<class></class>按 XML 声明顺序逐个执行,且每个类内所有@Test方法也严格串行(即FBOneClass全部方法执行完毕后,才启动FBTwoClass); - 无需使用
dependsOnMethods或dependsOnGroups,规避了跨类依赖难以维护、易断链的风险。
⚠️ 注意事项:
- 该行为自 TestNG 7.5.1(JDK 8)或 7.8.0(JDK 11+)起稳定支持,低版本可能存在调度不一致问题,请务必升级至对应最新稳定版;
- 若类内需进一步控制方法执行顺序,可配合
priority属性或@Test(dependsOnMethods = "..."),但仅限同类内使用; -
parallel="false"作用域仅限当前<test></test>,不影响其他<test></test>的并行性,兼顾灵活性与确定性。
综上,通过“suite 级 tests 并行 + test 级 classes 串行”的双层并行策略配置,即可精准满足「测试套件并行、类内方法严格串行」的工程化诉求。

















