第一个场景失败时如何跳过所有 cucumber-jvm 场景
How to skip all cucumber-jvm scenarios when first scenario is failed
我有 8 个 cucumber-jvm
场景,第一个场景测量页面加载时间和环境可用性。为了避免不必要的运行,如果第一个场景失败了——比如环境不可用,或者加载太慢——所有其他场景应该被跳过。
我该怎么做?
我的CucumberOptions
:
@RunWith(Cucumber.class)
@CucumberOptions(
strict = true,
features = {"src/test/resources/features"},
glue = {"stepDefinitions"},
format = { "progress", "html:target/Results",
"json:target/Results/cucumber.json"},
tags = {"@test"})
public class TestRunner {
}
谢谢!
您可以使用 Assume.assumeTrue(false)
跳过测试。但这将需要对测试 运行ner 和代码进行一些更改。
- 为场景创建一个单独的 运行ner,检查环境细节是否正常。我们称它为 RunFirstTest.java 并给
tags
一个值 @Smoke。其他选项值默认为您所拥有的值。
@RunWith(Cucumber.class)
@CucumberOptions(plugin={ }, tags={"@Smoke"}, glue=" ", features=" ")
public class RunFirstTest {
将@Smoke
标签添加到检查环境等的功能文件中的场景。您可以选择拆分功能文件。
创建一个新的 class 来保存静态标志。这是一个简单的实现,您可能会考虑使其更加健壮。
public class SkipFlag {
public static boolean skipFlag = false; }
- 创建一个
After hook
并将值选项设置为 @Smoke
。因此,它将 运行 仅用于烟雾场景。
@After(value={"@Smoke"})
public void afterSkip(Scenario scen) {
if(scen.isFailed())
SkipFlag.skipFlag = true;
}
- 为主要测试创建第二个 运行ner。我们称它为 RunMainTest.java 并为其赋予 @MainTests 的
tags
值。其他选项值默认为您所拥有的值。
@RunWith(Cucumber.class) @CucumberOptions(plugin={" "},
tags={"@MainTests"}, glue=" ", features=" ") public class RunMainTest
{<br>
@BeforeClass
public static void before() {
if(SkipFlag.skipFlag)
Assume.assumeTrue(false);
}
}
将@MainTests
标签添加到功能文件中的其他场景。您可以选择拆分功能文件并在功能选项值中给出功能文件的名称。
运行 这通过使用 maven 故障安全插件。在此插件的配置中,将这 2 个 运行ners 添加到 pom.xml.
中
<configuration>
<includes>
<include>RunFirstTest</include>
<include>RunMainTest</include>
</includes>
<runOrder>alphabetical</runOrder>
</configuration>
如果您只有 2 个 运行 用户,则包含部分可能是可选的。 最重要的一点是 RunFirstTest
应该是第一个到 运行,所以按字母顺序应该是第一个。
- 运行 它与 maven.
希望有用。
与其尝试在 Cucumber 中执行此操作,不如考虑编写一个简单的 bash 脚本
- 运行s 第一个特征文件,例如
cucumber features/first_scenarios.feature
- 使用第一个的退出代码运行决定是否运行其余的特征
您大概可以在大约 3 行 shell 脚本中完成此操作。
关于功能的一件事是,不同的人会希望 运行 根据自己的特定情况以不同的方式使用它们。将这些内容放入您的功能集中可能会使其他用户更加困难。
我有 8 个 cucumber-jvm
场景,第一个场景测量页面加载时间和环境可用性。为了避免不必要的运行,如果第一个场景失败了——比如环境不可用,或者加载太慢——所有其他场景应该被跳过。
我该怎么做?
我的CucumberOptions
:
@RunWith(Cucumber.class)
@CucumberOptions(
strict = true,
features = {"src/test/resources/features"},
glue = {"stepDefinitions"},
format = { "progress", "html:target/Results",
"json:target/Results/cucumber.json"},
tags = {"@test"})
public class TestRunner {
}
谢谢!
您可以使用 Assume.assumeTrue(false)
跳过测试。但这将需要对测试 运行ner 和代码进行一些更改。
- 为场景创建一个单独的 运行ner,检查环境细节是否正常。我们称它为 RunFirstTest.java 并给
tags
一个值 @Smoke。其他选项值默认为您所拥有的值。
@RunWith(Cucumber.class) @CucumberOptions(plugin={ }, tags={"@Smoke"}, glue=" ", features=" ") public class RunFirstTest {
将
@Smoke
标签添加到检查环境等的功能文件中的场景。您可以选择拆分功能文件。创建一个新的 class 来保存静态标志。这是一个简单的实现,您可能会考虑使其更加健壮。
public class SkipFlag { public static boolean skipFlag = false; }
- 创建一个
After hook
并将值选项设置为@Smoke
。因此,它将 运行 仅用于烟雾场景。
@After(value={"@Smoke"}) public void afterSkip(Scenario scen) { if(scen.isFailed()) SkipFlag.skipFlag = true; }
- 为主要测试创建第二个 运行ner。我们称它为 RunMainTest.java 并为其赋予 @MainTests 的
tags
值。其他选项值默认为您所拥有的值。
@RunWith(Cucumber.class) @CucumberOptions(plugin={" "}, tags={"@MainTests"}, glue=" ", features=" ") public class RunMainTest {<br> @BeforeClass public static void before() { if(SkipFlag.skipFlag) Assume.assumeTrue(false); } }
将
@MainTests
标签添加到功能文件中的其他场景。您可以选择拆分功能文件并在功能选项值中给出功能文件的名称。运行 这通过使用 maven 故障安全插件。在此插件的配置中,将这 2 个 运行ners 添加到 pom.xml.
中
<configuration> <includes> <include>RunFirstTest</include> <include>RunMainTest</include> </includes> <runOrder>alphabetical</runOrder> </configuration>
如果您只有 2 个 运行 用户,则包含部分可能是可选的。 最重要的一点是 RunFirstTest
应该是第一个到 运行,所以按字母顺序应该是第一个。
- 运行 它与 maven.
希望有用。
与其尝试在 Cucumber 中执行此操作,不如考虑编写一个简单的 bash 脚本
- 运行s 第一个特征文件,例如
cucumber features/first_scenarios.feature
- 使用第一个的退出代码运行决定是否运行其余的特征
您大概可以在大约 3 行 shell 脚本中完成此操作。
关于功能的一件事是,不同的人会希望 运行 根据自己的特定情况以不同的方式使用它们。将这些内容放入您的功能集中可能会使其他用户更加困难。