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

Java 如果QAF中的第一个场景失败,则停止执行-cumber,java,cucumber,testng,qaf,Java,Cucumber,Testng,Qaf,目前,我们正在从testng.xml触发冒烟测试,在这里我们有两个不同的sceanrio需要验证 我们的要求是,如果一个场景失败(@Test1),那么另一个场景就不应该执行(@Test2)。如何在QAF、Testng-Cumber设置中实现这一点 <groups> <run> <include name="@Test1" /> <include name="@Test2" />

目前,我们正在从testng.xml触发冒烟测试,在这里我们有两个不同的sceanrio需要验证

我们的要求是,如果一个场景失败(@Test1),那么另一个场景就不应该执行(@Test2)。如何在QAF、Testng-Cumber设置中实现这一点

    <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方法中可以检查标志并根据标志的值跳过测试。例如:

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

package com.qmetry.qaf.example.test;
...
公共类StopRunListener实现IInvokedMethodListener{
私有静态布尔hasFailure=false;
@凌驾
调用前公共无效(IInvokedMethod方法,ITestResult testResult){
String[]groups=testResult.getMethod().getGroups();
if(hasFailure&&Arrays.asList(groups.contains)(“Test2”)){
抛出新的SkipException(“由于失败而停止执行”);
}
}
@凌驾
调用后公共void(IInvokedMethod方法,ITestResult testResult){
String[]groups=testResult.getMethod().getGroups();
如果(!testResult.issucess()&&Arrays.asList(groups.contains)(“Test1”)){
hasFailure=true;
}
}
}
在XML配置文件中添加侦听器


使用小黄瓜语法,您不能指定依赖项或其他元数据。您可以与qaf-2.1.14一起使用,并在
test2
上设置组
test1
的相关性。它将确保在组
test1
之后执行组
test2
中的测试。但是,如果依赖组中的一个测试失败,它将不会跳过测试。您可以使用上面示例中提供的侦听器来实现

例如:

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

XML将是:



我可能不太了解QAF,但我想说的是,如果有人通过Maven surefire插件执行自动化测试,那么它会立即失败,而不会在执行过程中执行挂起的脚本。这可能会给你一些想法。谢谢!你的第一个方法帮助我解决了这个问题。您需要对StopRunListener类进行更正。您在if(hasFailure&&Arrays.asList(groups.contains)(“Test2”))中缺少“@”。它应该是if(hasFailure&&Arrays.asList(groups.contains)(“Test2”))