如何为Cucumber设置默认标签并追加命令行传入的标签?
Cucumber默认标签与命令行标签自动结合的解决方案
问题根源
你当前@CucumberOptions中配置的tags = "not @ignore"会被命令行传入的-Dcucumber.filter.tags参数直接覆盖,导致默认排除@ignore标签的规则失效,最终运行了包含@ignore的@regression场景。
解决方案:利用Cucumber属性占位符实现标签组合
修改@CucumberOptions中的tags配置,通过属性占位符+逻辑与表达式,让默认标签和命令行传入的标签自动组合:
@CucumberOptions( dryRun = false, plugin = { "pretty", "html:src/test/java/testresult/cucumber-report/index.html", "junit:src/test/java/testresult/cucumber-report/cucumber.xml", "json:src/test/java/testresult/cucumber-report/cucumber.json", "com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:", }, features = { "src/test/java/features" }, glue = { "Hooks","stepDefinitions" }, tags = "not @ignore and ${cucumber.filter.tags:*}", monochrome = true )
配置说明
${cucumber.filter.tags:*}是Cucumber的属性占位符:- 当命令行未传入
cucumber.filter.tags参数时,*作为默认值(代表匹配所有场景),此时实际生效的标签规则为not @ignore and *,等价于原有的not @ignore,会运行所有未标记@ignore的场景。 - 当命令行传入
-Dcucumber.filter.tags="@regression"时,占位符会被替换为@regression,实际规则变为not @ignore and @regression,只会运行带@regression且未标记@ignore的场景。
- 当命令行未传入
验证命令
- 运行所有非忽略场景:
mvn test - 运行指定标签且非忽略的场景:
mvn test -Dcucumber.filter.tags="@regression"
注意事项
确保你的Cucumber版本为v6及以上,该版本开始支持属性占位符功能。
内容的提问来源于stack exchange,提问作者Kurella Hemanth
相关产品推荐
相关产品推荐

