46

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

4

5 回答 5

61

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

cucumber -f rerun --out rerun.txt

它将所有失败场景的位置输出到此文件。

然后你可以使用重新运行它们

cucumber @rerun.txt
于 2012-07-30T11:45:07.897 回答
12

这是我简单而整洁的解决方案。

第 1 步:编写你的黄瓜 java 文件,如下所述rerun:target/rerun.txt。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中运行该文件

于 2016-08-02T00:09:25.780 回答
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']
        }
    }
}
于 2020-04-14T09:31:36.903 回答
1

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

Since cucumber 3.0 you can use --retry to specify how many times to retry a scenario that failed. https://cucumber.io/blog/open-source/announcing-cucumber-ruby-3-0-0/

Just tack it on to your cucumber command: cucumber ... --retry 2

于 2021-01-28T20:16:41.560 回答
0

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

于 2017-07-24T20:08:53.807 回答