
cucumber 7.2.3 中使用 `and`/`or` 组合多个标签时,需严格遵循 tag expression 语法规则;`@test1 and @test2` 表示同时拥有两个标签的场景,若无场景满足则不执行任何用例,导致“process finished with exit code 0”——这并非报错,而是正常退出(无匹配场景)。
在 Cucumber 7.x 版本中,旧版 tags = {"@test1", "@test2"}(数组形式)已被弃用,统一采用 Tag Expression 语法(基于 cucumber/tag-expressions 规范)。该语法支持布尔逻辑操作符:and、or、not,以及括号分组,但不支持空格分隔或逗号分隔的旧写法。
✅ 正确用法示例:
@CucumberOptions(
plugin = {"json:target/cucumber.json"},
features = "src/test/resources/features",
glue = "com/company/definitions",
dryRun = false,
tags = "@test1 or @test2" // ✅ 匹配带 @test1 或 @test2 的任一场景
)⚠️ 常见误区与说明:
- tags = "@test1 and @test2":仅匹配同时标注了两个标签的场景(如 @test1 @test2),若无此类场景,则 Cucumber 找不到可执行用例,直接退出(exit code 0),控制台无错误日志——这是预期行为,不是异常。
- tags = "@test1, @test2" 或 tags = {"@test1", "@test2"}:在 Cucumber 7+ 中无效,将被忽略或抛出 IllegalArgumentException。
- tags = "not @wip":合法,用于排除指定标签的场景。
- 复杂表达式:tags = "(@smoke or @regression) and not @ignored" 支持嵌套逻辑,推荐用于精细化测试筛选。
? 验证建议:
- 检查 .feature 文件中场景是否真实包含对应标签,例如:
@test1 @test2 Scenario: Both tags present Given ...
- 启用 dryRun = true 并观察控制台输出:若显示 0 Scenarios,即确认无匹配场景,应检查标签拼写、位置(必须紧贴 Scenario 或 Feature 行)及逻辑表达式是否符合预期。
- 使用 IDE 运行配置时,确保 @CucumberOptions 未被其他配置(如 Maven Surefire
)覆盖。
总结:Process finished with exit code 0 在多标签场景下通常意味着“零匹配”,而非程序崩溃。请优先校验 Tag Expression 语义、.feature 文件中的实际标签声明,以及 Cucumber 版本兼容性——Cucumber 7.2.3 完全遵循 Tag Expression 规范,不存在兼容性更新导致的隐式变更。










