Qmetry中TestNG测试用例执行顺序未按XML文件设定顺序执行的问题咨询
我来帮你排查这个问题——虽然你已经设置了preserve-order="true",但Qmetry环境和TestNG的一些细节可能会干扰执行顺序,试试下面这些方案:
检查Qmetry平台的执行配置
Qmetry作为测试管理工具,可能自带执行顺序控制逻辑,会覆盖TestNG的XML配置。你需要登录Qmetry后台,找到对应的测试套件/执行计划,检查是否开启了自动排序(比如按用例ID、名称排序),如果有的话,把排序规则改成「按testng.xml定义的顺序」或者直接禁用自动排序选项。确认TestNG版本兼容性
部分旧版本的TestNG(比如6.x早期版本)在处理<groups>标签下的preserve-order时存在bug,不会严格按照include的顺序执行。建议你升级到TestNG 7.x的稳定版本,新版本对preserve-order的支持更完善,尤其是针对分组执行的场景。排查测试方法的@Priority注解
如果你的测试方法上标注了@Priority注解,TestNG会优先按照优先级数值排序执行,这会直接覆盖XML里的顺序。检查所有相关测试方法,要么移除@Priority,要么确保优先级数值和你期望的执行顺序一致(比如test1设为1,test2设为2,test3设为3)。替换分组执行方式为直接指定方法
有时候<groups>的include顺序可能不被preserve-order完全尊重,你可以尝试直接在XML里指定测试方法的顺序,绕过分组:<test name="611e18500e79671e660bde2c - Config-1" enabled="true" preserve-order="true"> <parameter name="env.resources" value="resources;EXECUTIONS/exec_1"/> <classes> <class name="com.yourpackage.YourTestClass"> <methods> <include name="test1"/> <!-- 对应@611e18500e79671e660bde2f的方法 --> <include name="test2"/> <!-- 对应@611e18500e79671e660bde30的方法 --> <include name="test3"/> <!-- 对应@611e18500e79671e660bde31的方法 --> </methods> </class> </classes> </test>验证preserve-order的作用范围
确认preserve-order="true"是添加在<test>标签下(你当前的配置是对的),而不是<suite>标签。另外,如果你的suite里有多个test节点,每个test的preserve-order是独立生效的,不要混淆范围。检查Qmetry的测试用例关联设置
确保Qmetry里的测试用例和你的TestNG方法是一一正确关联的,有时候关联错误也会导致执行顺序混乱。你可以在Qmetry里查看每个用例对应的TestNG方法,确认映射关系无误。
内容的提问来源于stack exchange,提问作者sanjay pujari

