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

时间:2018-03-13 16:12:33

标签: java selenium-webdriver cucumber cucumber-jvm

我有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 {
}

谢谢!

2 个答案:

答案 0 :(得分:2)

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

  1. 为方案创建一个单独的运行器,用于检查环境详细信息是否全部有效。我们称之为RunFirstTest.java,并为tags赋予@Smoke值。其他选项值默认为您拥有的值。
  2. @RunWith(Cucumber.class)
    @CucumberOptions(plugin={ }, tags={"@Smoke"}, glue=" ", features=" ")
    public class RunFirstTest {
    
    1. @Smoke标记添加到功能文件中检查环境等的方案中。您可以选择拆分功能文件。

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

    3. public class SkipFlag {   
           public static boolean skipFlag = false; }
      
      1. 创建After hook,其值选项设置为@Smoke。因此它只会针对烟雾情况运行。
      2. @After(value={"@Smoke"})  
        public void afterSkip(Scenario scen) {        
           if(scen.isFailed())            
              SkipFlag.skipFlag = true;   
        }
        
        1. 为主要测试创建第二个跑步者。我们称之为RunMainTest.java并赋予其tags值@MainTests。其他选项值默认为您拥有的值。
        2.   

          @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标记添加到要素文件中的其他方案。您可以选择拆分要素文件,并在要素选项值中提供要素文件的名称。

          2. 使用maven failsafe插件运行此命令。在此插件的配置中,在pom.xml中添加这两个runner。

          3.  <configuration>
                  <includes>
                      <include>RunFirstTest</include>
                      <include>RunMainTest</include>
                  </includes>
                    <runOrder>alphabetical</runOrder>
             </configuration>
            

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

            1. 用maven运行它。
            2. 希望它有效。

答案 1 :(得分:0)

不要试图在Cucumber中这样做,而是考虑编写一个简单的bash脚本

  • 运行第一个功能文件,例如cucumber features/first_scenarios.feature
  • 使用第一次运行的退出代码来决定是否运行其余功能

您可以在大约3行shell脚本中执行此操作。

关于功能的一个方面是,不同的人会希望根据自己的特定情况以不同的方式运行它们。将这些内容放入您的功能集中可能会使其他用户更加困难。