如何使用Cucumber重新运行失败的场景?

时间:2012-07-30 10:45:38

标签: cucumber

我正在使用Cucumber进行测试。如何仅重新运行失败的测试?

5 个答案:

答案 0 :(得分:57)

使用重新运行格式化程序运行Cucumber:

cucumber -f rerun --out rerun.txt

它会将所有失败方案的位置输出到此文件。

然后您可以使用

重新运行它们
cucumber @rerun.txt

答案 1 :(得分:5)

这是我简单明了的解决方案。

第1步:使用rerun:target/rerun.txt编写如下所述的黄瓜java文件。 Cucumber在rerun.txt中写入失败的方案行号,如下所示。

features/MyScenaios.feature:25
features/MyScenaios.feature:45

稍后我们可以在第2步中使用此文件。将此文件命名为MyScenarioTests.java。这是运行标记方案的主文件。如果您的方案测试用例失败,MyScenarioTests.java将在目标目录下写入/标记rerun.txt

@RunWith(Cucumber.class)
@CucumberOptions(
    monochrome = true,
    features = "classpath:features",
    plugin = {"pretty", "html:target/cucumber-reports",
              "json:target/cucumber.json",
              "rerun:target/rerun.txt"} //Creates a text file with failed scenarios
              ,tags = "@mytag"
           )
public class MyScenarioTests   {

}

第2步:创建另一个方案文件,如下所示。我们将其称为FailedScenarios.java。每当您发现任何失败的情况时都会运行此文件。此文件将使用target/rerun.txt作为运行方案的输入。

@RunWith(Cucumber.class)
@CucumberOptions(
    monochrome = true,
    features = "@target/rerun.txt", //Cucumber picks the failed scenarios from this file 
    format = {"pretty", "html:target/site/cucumber-pretty",
            "json:target/cucumber.json"}
  )
public class FailedScenarios {

}

如果您发现任何失败的情况,每次都会在第2步

中运行该文件

答案 2 :(得分:1)

task cucumber() {
    dependsOn assemble, compileTestJava
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'json:target/cucumber-reports/json/cucumber.json',
                    '--plugin', "rerun:target/rerun.txt",
                    '--glue', 'steps',
                    'src/test/resources']
        }
    }
}

task cucumberRerunFailed() {
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'json:target/cucumber-reports/json/cucumber.json',
                    '@target/rerun.txt']
        }
    }
}

答案 3 :(得分:0)

至少需要1.2.0版才能使用@ target / rerun.txt新功能。之后,只需创建一个运行在最后并使用此文件的运行器。此外,如果您使用的是Jenkins,则可以在随机故障功能上添加标记,这样构建就不会失败,除非在运行两次之后。

答案 4 :(得分:0)

我知道这很旧,但我首先在这里找到了自己的方法,然后找到了更新的答案(不是公认的 Cyril Duchon-Doris 的答案): https://stackoverflow.com/a/41174252/215789

从 Cucumber 3.0 开始,您可以使用 --retry 指定重试失败场景的次数。 https://cucumber.io/blog/open-source/announcing-cucumber-ruby-3-0-0/

只需将其添加到您的黄瓜命令中即可: cucumber ... --retry 2