cucumber 7.2.3 中多标签(tags)表达式语法详解与常见错误排查:cucumber 7.x 版本起全面采用 tag expressions 语法替代旧版 junit-style 标签逻辑,`@test1 and @test2` 表示同时拥有两个标签的场景,若无场景满足则不执行任何用例,导致“process finished with exit code 0”——这并非报错,而是正常退出(零用例运行)。
在 Cucumber 7.2.3 及更高版本中,@CucumberOptions.tags 不再支持旧版空格分隔(如 "@test1 @test2")或 &&/|| 运算符,而是统一使用 Tag Expression 语法(由 cucumber/tag-expressions 规范定义)。该语法严格区分逻辑语义:
例如,以下 .feature 文件片段:
@smoke @regression
Feature: Login Functionality
@test1
Scenario: Valid login
Given user opens login page
When user enters valid credentials
Then dashboard is displayed
@test1 @test2
Scenario: Password reset flow
Given user clicks "Forgot Password"
When user submits email
Then reset link is sent若 Runner 中配置 tags = "@test1 and @test2",仅会执行 Password reset flow;而 tags = "@test1 or @test2" 将执行两个 Scenario。
⚠️ 注意事项:
✅ 正确的 Runner 配置示例:
@CucumberOptions(
plugin = {"json:target/cucumber.json"},
features = "src/test/resources/features",
glue = "com.company.definitions",
dryRun = false,
tags = "@test1 or @test2" // ← 关键修正:使用 'or' 而非 'and' 实现“任一标签匹配”
)
public class TestRunner extends AbstractTestNGCucumberTests {
}总结:Cucumber 7+ 的标签机制更严谨、可组合性更强,但要求开发者明确区分 and(交集)与 or(并集)语义。遇到“P
