如果第一个场景在 QAF 中失败 - 黄瓜,则停止执行
Stopping the execution if first scenario fails in QAF - Cucumber
目前我们正在从 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 语法,您无法指定依赖项或其他元数据。您可以使用 qaf-2.1.14 可用的 BDD2 syntax 并设置组 test1
对 test2
的依赖性。它将确保组 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>
目前我们正在从 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 语法,您无法指定依赖项或其他元数据。您可以使用 qaf-2.1.14 可用的 BDD2 syntax 并设置组 test1
对 test2
的依赖性。它将确保组 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>