当前位置: 首页 > 知识库问答 >
问题:

如果QAF-Cumber中的第一个场景失败,则停止执行

空成天
2023-03-14

目前,我们正在从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>

共有1个答案

左丘嘉木
2023-03-14

方法之一是通过实现方法调用侦听器。在后方法中,您可以设置标志,在前方法中,您可以根据标志的值检查标志并跳过测试。例如:

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>

使用小cucumber语法,您不能指定依赖项或其他元数据。您可以使用qaf-2.1.14提供的BDD2语法,并设置组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配置将是:

    <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>
 类似资料:
  • 我在功能文件中编写了一系列场景,其中包含断言。如果第一个场景的断言失败,Specflow将跳过它之后的所有场景。我希望我所有的场景都能继续运行,即使其中一个像NUnit一样失败。我使用SpecRun作为测试提供商,我在SpecFlow网站上找不到任何对我有帮助的东西。可能是我的应用程序中缺少了什么。配置文件? 以下是我的App.config文件:

  • 我有一个示例项目,其中使用了Maven、TestNg和Cucumber。我使用testrunner类运行测试。 我创建了一个包含两个方案的功能文件,但两个方案都失败了。我有两个具有不同功能文件的测试运行者类 - 1。特征文件指向所有功能,2。指向仅失败的方案。 当我尝试重新运行场景时,它只运行一个场景。 1- 请告知如何执行所有失败的方案。

  • 我的测试套件在“描述”中包含几个“it”部分。 如果其中一个“it”部分失败(例如,如果找不到元素),它将直接跳到下一个“it”部分并继续测试。 如果一个“它”部分失败了,我只想测试停止运行,并被标记为失败。 你是怎么做到的?

  • 下面的代码完整展示了通过three.js引擎创建的一个三维场景,在场景中绘制并渲染了一个立方体的效果,为了大家更好的宏观了解three.js引擎, 尽量使用了一段短小但完整的代码实现一个实际的三维效果图。 学习建议 刚一开始学习,不需要完全看懂下面的代码,能够修改增删部分代码就可以,随着时间的推移就能够很好的使用三维引擎three.js。 本课程风格和大多数课程风格不同,注意一定要结合案例代码学习

  • 现象: 运行 php start.php stop 提示 stop fail 原因:几种可能性 第一种可能性: 前提是以debug方式启动的workerman,开发者在终端按了ctrl z给workerman发送了SIGSTOP信号,导致workerman进入后台并挂起(暂停),所以无法响应stop命令(SIGINT信号)。 解决: 在启动workerman的终端输入fg(发送SIGCONT信号)