首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果依赖场景失败,运行场景应该跳过

如果依赖场景失败,运行场景应该跳过
EN

Stack Overflow用户
提问于 2022-01-18 15:52:31
回答 1查看 136关注 0票数 1

QAF是否支持无条件依赖的方案选项?我在下面的链接中看到,dependsOnMethods不工作,也不受支持。

https://github.com/qmetry/qaf/issues/281

如果依赖场景选项在QAF中是不可用的,那么我们可以编写一个自定义函数来检查依赖的场景结果,如果依赖的场景失败,我们可以跳过执行的场景吗?任何过去的职位或指导将是非常有帮助的。

注意:我使用的是BDDTestFactory2。

######################更新了######################

在testng listner中尝试了下面的代码,但是它没有跳过测试。

代码语言:javascript
复制
@Override
    public void onTestStart(ITestResult result) {
        if (dependentTc == "fail") {
            resultOperation(result, "skipped");
            throw new SkipException("################# Testing skip - Triggered. #################");

        }
}

下面的来自控制台日志:

代码语言:javascript
复制
org.testng.SkipException: ################# Testing skip - Triggered. #################
        at com.rt.listener.rt_listener.onTestStart(rt_listener.java:117)
        at org.testng.internal.Invoker.runTestListeners(Invoker.java:1724)
        at org.testng.internal.Invoker.runTestListeners(Invoker.java:1699)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:622)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
        at org.testng.TestRunner.privateRun(TestRunner.java:756)
        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)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-20 04:02:56

用java编写的用QAF编写的测试/场景支持测试依赖项。

在BDD中设置场景之间的依赖不是一个好主意,其中一种可能的方法是使用testng 监听程序在after方法中设置标记,在a方法中使用检查标志。假设场景2依赖于场景1,

  • 确保功能文件中的顺序是正确的
  • 在方法之后,检查测试名称或元数据是否为方案1,状态是否失败,设置标志为my-preconditionfalse
  • 在方法之前,检查测试名称或元数据是否为场景2,my-preconditionfalse,抛出SkipExeption

上述方法也可能有副作用。

如果您想要利用测试依赖关系以及BDD,RuntimeScenarioFactory支持它。它的优点是,它不需要单独的特性文件。如果出于任何原因需要有特性文件,则可以使用行为发生器生成功能文件。此外,使用RuntimeScenarioFactory,您可以在特性文件中有更多的编程控件,而不是场景。

您还可以将特性文件(场景)中的测试和java文件中的测试(使用RuntimeScenarioFactory)进行组合。两者具有相同的功能,例如:详细报告、试运行、数据驱动、元数据、元数据筛选等.

编辑:下面的示例中的对我来说很好。

示例特性文件:

代码语言:javascript
复制
@smoke
Feature: scenario with dependency

@TestCaseId:Test-111
Scenario: scenario1
    Given COMMENT: "some situation"
    When process data
    Then verify update address response with {'addr1':'123 main st'}
    
@dependsOnMethods:['scenario1']
@TestCaseId:Test-112
Scenario: scenario2
    Given COMMENT: "some situation"
    When COMMENT: "some_action_performed"
    Then COMMENT: "it_should_have_some_behavior"

示例侦听器,该侦听器将跳过场景,如果其中一个方案失败,则依赖该方案。

代码语言:javascript
复制
package qaf.example.listener;
...
public class DependecyListener implements ITestListener{
    
    @Override
    public void onTestStart(ITestResult result) {
        ITestNGMethod method = result.getMethod();
        String[] methodsDependedUpon = method.getMethodsDependedUpon();
        if (method.isTest() && null != methodsDependedUpon && methodsDependedUpon.length > 0) {
            List<String> methodsDependedUponLst = Arrays.asList(methodsDependedUpon);
            IResultMap failedTests = result.getTestContext().getFailedTests();
            List<ITestResult> falildMethodsDependedUpon = failedTests.getAllResults().stream()
                    .filter(t -> methodsDependedUponLst.contains(t.getName())).collect(Collectors.toList());
            if(!falildMethodsDependedUpon.isEmpty()) {
                throw new SkipException("Skipped because of dependency failure!");
            }
        }
    }
}

在xml配置file>中添加侦听器

代码语言:javascript
复制
    <listeners>
        <listener class-name="qaf.example.listener.DependecyListener" />
    </listeners>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70758542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档