1. 引言
本文将介绍如何在Cucumber中有选择性地运行或跳过场景。
Cucumber是一个支持行为驱动开发(BDD)的工具。它能读取纯文本的可执行规范,并验证软件是否符合这些规范的要求。
2. 创建场景
先创建几个场景示例。以一个生成问候消息的API接口/greetings
为例:
Feature: 基于时间的问候生成器
# 早晨
Scenario: 应在早晨返回"早上好"
Given 当前时间是"0700"点
When 我请求问候
Then 应收到"Good Morning!"
# 傍晚
Scenario: 应在傍晚返回"晚上好"
Given 当前时间是"1900"点
When 我请求问候
Then 应收到"Good Evening!"
# 夜晚
Scenario: 应在夜晚返回"晚安"
Given 当前时间是"2300"点
When 我请求问候
Then 应收到"Good Night!"
# 午夜
Scenario: 应在午夜返回"晚安"
Given 当前时间是"0000"点
When 我请求问候
Then 应收到"Good Night!"
接下来实现符合上述规范的控制器方法:
@GetMapping("/greetings")
@ResponseBody
public String greet(@RequestParam("hours") String hours) {
String greeting;
int currentHour = Integer.parseInt(hours.substring(0, 2));
if (currentHour >= 6 && currentHour < 12) {
greeting = "Good Morning!";
} else if (currentHour >= 12 && currentHour < 16) {
greeting = "Good Afternoon!";
} else if (currentHour >= 16 && currentHour <= 19) {
greeting = "Good Evening!";
} else {
greeting = "Good Night!";
}
return greeting;
}
3. 实现方式
现在看看如何忽略已定义的场景:
3.1. 使用自定义标签
通过为场景添加自定义标签(如@ignore
、@skip
或@disable
)来控制执行。这里用@custom-ignore
演示(实际建议使用有意义的名称)。
操作分两步:
标记需要忽略的场景
给第三个场景添加标签:# 夜晚 @custom-ignore Scenario: 应在夜晚返回"晚安" Given 当前时间是"2300"点 When 我请求问候 Then 应收到"Good Night!"
配置标签过滤器
在test/resources
目录下的junit-platform.properties
中添加:cucumber.filter.tags=not @custom-ignore
✅ 该场景在后续测试中将被跳过。
⚠️ 如果使用Junit4,需要在TestRunner
类上使用@CucumberOptions
注解:
@CucumberOptions(tags = "not @custom-ignore")
3.2. 注释场景
另一种简单粗暴的方式是直接注释整个场景:
# 夜晚
# Scenario: 应在夜晚返回"晚安"
# Given 当前时间是"2300"点
# When 我请求问候
# Then 应收到"Good Night!"
❌ 但这种方式容易出错,特别是需要处理多行注释时容易遗漏。
4. 结论
本文介绍了通过自定义标签可靠忽略Cucumber场景的方法。Cucumber的标签机制提供了灵活的场景标注和跳过能力。虽然存在其他方案(如注释),但基于标签的方式是官方推荐的最佳实践。