我正在使用 Cucumber 进行测试。如何仅重新运行失败的测试?
5 回答
使用重新运行格式化程序运行 Cucumber:
cucumber -f rerun --out rerun.txt
它将所有失败场景的位置输出到此文件。
然后你可以使用重新运行它们
cucumber @rerun.txt
这是我简单而整洁的解决方案。
第 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中运行该文件
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']
}
}
}
我知道这很旧,但我先在这里找到了自己的方式,然后又找到了一个更新的答案(不是公认的 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
您至少需要 1.2.0 版才能使用 @target/rerun.txt 新功能。之后,只需创建一个在最后运行并使用此文件的运行器。此外,如果您使用 Jenkins,您可以在随机失败功能上添加标签,这样构建不会失败,除非运行两次。