java - 如果 QAF 中第一个场景失败则停止执行 - Cucumber

标签 java cucumber testng qaf

目前,我们正在从 testng.xml 触发冒烟测试,其中有两个不同的场景需要验证。

我们的要求是,如果一个场景失败(@Test1),则其他场景不应执行(@Test2)。如何在 QAF、Testng - Cucumber 设置中实现此目的?

    <groups>
        <run>
            <include name="@Test1" />
            <include name="@Test2" />
        </run>
    </groups>
    <classes>
        <class
            name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
    </classes>
</test>

最佳答案

其中一种方法是实现方法调用监听器。在 after 方法中,您可以设置一个标志,在 before 方法中,您可以检查标志并根据标志的值跳过测试。例如:

package com.qmetry.qaf.example.test;
...
public class StopRunListener implements IInvokedMethodListener {
   private static boolean hasFailure=false;

    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
        String[] groups = testResult.getMethod().getGroups();

        if(hasFailure && Arrays.asList(groups).contains("Test2")) {
            throw new SkipException("Stop execution due to failure");
        }
    }

    @Override
    public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
        String[] groups = testResult.getMethod().getGroups();

        if(!testResult.isSuccess() && Arrays.asList(groups).contains("Test1")) {
            hasFailure=true;
        }

    }

}

在 XML 配置文件中添加监听器

    <listeners>
       <listener class-name="com.qmetry.qaf.example.test.StopRunListener" />
    </listeners>
    <groups>
        <run>
            <include name="@Test1" />
            <include name="@Test2" />
        </run>
    </groups>
    <classes>
        <class
            name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
    </classes>

使用 Gherkin 语法,您无法指定依赖项或其他元数据。您可以使用BDD2 syntax可用于 qaf-2.1.14 并设置组 test1test2 的依赖性。它将确保组 test2 中的测试在组 test1 之后执行。但如果依赖组中的一项测试失败,则不会跳过该测试。您可以使用上面示例中提供的监听器来实现。

例如:

#meta-data on feature will be assigned to all scenario in feature file
@Test1
Feature: A feature is a collection of scenarios

@Test2
@dependsOnGroups:Test1
Feature: A feature is a collection of scenarios

XML config将是:

    <listeners>
       <listener class-name="com.qmetry.qaf.example.test.StopRunListener" />
    </listeners>
    <groups>
        <run>
            <include name="Test1" /> <!-- don't add @ in group for BDD or BDD2 -->
            <include name="Test2" />
        </run>
    </groups>
    <classes>
        <class
            name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory2" />
    </classes>

关于java - 如果 QAF 中第一个场景失败则停止执行 - Cucumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55282887/

相关文章:

java - Allure 框架 : TestNG adapter generates duplicate XML files

java - 诊断 android 3.0 中不需要的 onPause

java - 如何在使用 Shiro 时在 OSGI E4 环境中加载类?

spring-boot - 从 Spring Boot 应用程序启动的 Cucumber 在 jar 中找不到胶水类

ruby - 如何使用 cucumber 在场景之间共享状态

ruby - 我如何模拟 "does not implement"特定方法的东西?

maven - 使用 Maven 命令行以编程方式运行 TestNG

java - 获取@BeforeSuite注释中的类名 - TestNG - Java

java - 以编程方式恢复出厂设置的 Android 设备代码

java - 我想在使用窗口句柄时拆分存储在字符串中的值