QMETRY下TestNG并行配置后Scenario Outline执行异常咨询
QAF并行测试场景异常排查
问题场景说明
QMetry QAF框架在并行测试场景下出现执行逻辑异常,具体表现如下:
基础并行配置示例(testing.xml)
<suite name="name" parallel="methods" thread-count="5"> <test> ... </test> </suite>
可正常并行的用例场景
编写带@smoke标签的普通Scenario格式feature文件时,上述并行配置可正常生效:
@smoke Feature: <feature message> Scenario: <scenario1 message> ... Scenario: <scenario2 message>
触发异常的用例场景
将上述普通Scenario改写为Scenario Outline形式后,即使TestNG并行配置完全保持不变,并行执行逻辑也无法按预期运行。
异常根因与解决方案
针对QMetry QAF框架下该问题,核心触发原因及对应处理方式如下:
- TestNG并行粒度匹配偏差
TestNG的parallel="methods"规则,调度粒度为框架识别到的独立测试方法。普通Scenario在QAF的TestNG适配层中会被映射为独立测试方法,天然适配方法级并行逻辑。但Scenario Outline默认会被映射为同一个测试方法的多组参数数据,在未开启参数拆分开关时,同一方法下的所有参数集会在单线程内顺序执行,不会触发TestNG的并行调度。
处理方式:在TestNG suite配置中增加参数<parameter name="qaf.scenario.outline.as.method" value="true"/>,将Example下的每一组参数集映射为独立测试方法,即可适配原有方法级并行规则。 - 框架内置串行执行锁约束
QAF默认对Scenario Outline的执行逻辑添加串行锁,避免同一Outline下的多组数据并行执行时出现场景上下文共享冲突。如果未解除该默认约束,即使TestNG识别到了多个独立测试方法,也会被框架内置的串行拦截逻辑拦住,无法分配多线程执行。
处理方式:调整配置项<parameter name="qaf.outline.serial.execution" value="false"/>,关闭内置的串行执行锁,确保线程池可以正常调度不同Example的执行任务。 - 线程池调度范围偏差
部分版本的QAF在使用方法级并行配置时,会默认将Scenario Outline对应的测试类绑定到单一线程执行,未将类下拆分的方法纳入全局线程池调度范围。此时可补充配置参数<parameter name="threadPoolFactory.class" value="com.qmetry.qaf.automation.core.automation.CustomThreadPoolFactory"/>,使用QAF内置的自定义线程池实现,确保所有拆分的Outline方法都能被全局线程池均匀调度。
内容的提问来源于stack exchange,提问作者George Salinas
相关产品推荐
相关产品推荐

