当第一个场景失败时如何跳过所有 cucumber-jvm 场景

are*_*ena 5 java cucumber cucumber-jvm selenium-webdriver

我有 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 {
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Gra*_*per 5

您可以使用它Assume.assumeTrue(false)来跳过测试。但这需要对测试运行程序和代码进行一些更改。

  1. 为该场景创建一个单独的运行程序,用于检查环境详细信息是否全部正常工作。我们将其命名为 RunFirstTest.java 并指定tags值 @Smoke。其他选项值默认为您拥有的值。
@RunWith(Cucumber.class)
@CucumberOptions(plugin={ }, tags={"@Smoke"}, glue=" ", features=" ")
public class RunFirstTest {
Run Code Online (Sandbox Code Playgroud)
  1. @Smoke标签添加到检查环境等的功能文件中的场景中。您也可以选择拆分功能文件。

  2. 创建一个新类来保存静态标志。这是一个简单的实现,您可能会考虑使其更加健壮。

public class SkipFlag {   
     public static boolean skipFlag = false; }
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个After hook,并将值选项设置为@Smoke。因此它只会在烟雾场景下运行。
@After(value={"@Smoke"})  
public void afterSkip(Scenario scen) {        
   if(scen.isFailed())            
      SkipFlag.skipFlag = true;   
}
Run Code Online (Sandbox Code Playgroud)
  1. 为主要测试创建第二个运行程序。我们将其命名为 RunMainTest.java 并为其指定tags值 @MainTests。其他选项值默认为您拥有的值。

@RunWith(Cucumber.class) @CucumberOptions(plugin={" "}, tags={"@MainTests"}, glue=" ", features=" ") public class RunMainTest {
@BeforeClass public static void before() { if(SkipFlag.skipFlag) Assume.assumeTrue(false); } }

  1. @MainTests标签添加到功能文件中的其他场景。或者,您可以考虑拆分功能文件,并在 features 选项值中给出功能文件的名称。

  2. 使用 Maven 故障安全插件运行它。在此插件的配置中,在 pom.xml 中添加这 2 个运行程序。

 <configuration>
      <includes>
          <include>RunFirstTest</include>
          <include>RunMainTest</include>
      </includes>
        <runOrder>alphabetical</runOrder>
 </configuration>
Run Code Online (Sandbox Code Playgroud)

如果您只有 2 个跑步者,则包含部分可能是可选的。最重要的一点是RunFirstTest应该是第一个运行的,所以按字母顺序应该是第一个。

  1. 用maven运行它。

希望它有效。