You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QAF中使用@dependsOnMethods出现嵌套异常错误求助

QAF中使用@dependsOnMethods依赖Scenario Outline触发异常问题

在以下测试场景中使用@dependsOnMethods注解时会触发嵌套异常,不使用该注解则所有场景可正常运行:

  • 测试版本:qaf.version 3.2.0(Selenium 3.141.59)、4.0.0-RC2(Selenium 4.11.0)

测试代码示例

@test0 @priority:1 @dependsOnMethods:[]
Scenario Outline: Scenario Test 1
  Given Test step
  Then I comment "<test_data>"
Examples: 
  | test_data   |
  | test data 1 |
  | test data 2 |

@test @priority:2 @dependsOnMethods:["Scenario Test 1"]
Scenario: Scenario Test 2
  Given Test step

报错信息

T E S T S
-------------------------------------------------------
Running TestSuite
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Added "QAFMethodSelector"
include groups []
 exclude groups: [] Scanarios location: tests/ 
org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:172)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:104)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70)
Caused by: org.testng.TestNGException: 
Method "tests.test.feature.Scenario Test 2()[pri:2, instance:com.qmetry.qaf.automation.step.client.Scenario@2]" depends on nonexistent method "Scenario Test 1"
        at org.testng.DependencyMap.getMethodDependingOn(DependencyMap.java:65)
        at org.testng.TestRunner.createDynamicGraph(TestRunner.java:1041)
        at org.testng.TestRunner.privateRun(TestRunner.java:723)
        at org.testng.TestRunner.run(TestRunner.java:610)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
        at org.testng.SuiteRunner.run(SuiteRunner.java:289)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
        at org.testng.TestNG.runSuites(TestNG.java:1133)
        at org.testng.TestNG.run(TestNG.java:1104)
        at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:122)
        at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92)
        at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:101)
        ... 9 more
Preparing For Shut Down...

问题原因与解决方案

核心原因

Scenario Outline会根据Examples中的数据生成多个实际运行的测试方法,原始的Scenario Outline名称不会作为有效方法名存在,导致@dependsOnMethods无法匹配到对应方法,触发TestNG依赖异常。

解决方案

改用@dependsOnGroups注解实现依赖,给Scenario Outline指定一个分组,让依赖场景关联该分组:

@test0 @priority:1 @groups:["scenario1_group"] @dependsOnMethods:[]
Scenario Outline: Scenario Test 1
  Given Test step
  Then I comment "<test_data>"
Examples: 
  | test_data   |
  | test data 1 |
  | test data 2 |

@test @priority:2 @dependsOnGroups:["scenario1_group"]
Scenario: Scenario Test 2
  Given Test step

这种方式下,Scenario Outline生成的所有实例化测试方法都会继承该分组,依赖场景会等待分组内所有方法执行完成后再运行,是适配Scenario Outline依赖的可靠方式。

内容的提问来源于stack exchange,提问作者Renish K.R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:47:44