Cucumber 标签复用场景大纲实践指南
本文介绍如何在Cucumber+SpringBoot(Java)项目中,利用场景标签(@hotel、@car)配合ScenarioOutline的Examples表,实现同一业务流程(如搜索)在多个网站(如hotels.com、cars.com)间高效复用,避免代码重复。

本文介绍如何在 Cucumber + Spring Boot(Java)项目中,利用场景标签(@hotel、@car)配合 Scenario Outline 的 Examples 表,实现同一业务流程(如搜索)在多个网站(如 hotels.com、cars.com)间高效复用,避免代码重复。
本文介绍如何在 Cucumber + Spring Boot(Java)项目中,利用场景标签(@hotel、@car)配合 Scenario Outline 的 Examples 表,实现同一业务流程(如搜索)在多个网站(如 hotels.com、cars.com)间高效复用,避免代码重复。
在 Cucumber 测试自动化中,当需对多个相似站点(如 hotels.com 和 cars.com)执行相同业务逻辑(例如搜索功能)但使用不同测试数据时,最佳实践是复用 Scenario Outline,通过 Cucumber 标签(Tags)控制数据集的激活范围,而非复制整个 Feature 文件或维护多套 Gherkin 脚本。
具体做法如下:
- 为每个站点的数据块添加专属标签(如 @hotel、@car),置于 Examples 表上方;
- 在运行时,通过 Maven 或 IDE 指定 --tags "@hotel" 或 --tags "@car",仅执行对应数据集;
- 保持 Step Definition 完全通用,无需修改——Cucumber 自动将匹配标签的 Examples 行注入当前 Scenario Outline 实例。
✅ 正确的 .feature 文件示例:
Feature: Search
@smoke @search
Scenario Outline: I want to search for products
Given I enter "" as a keyword to a search field
Then I should see search results page
Then I should see at least results containing ""
@hotel
Examples:
| keyword | count |
| hotel | 3 |
@car
Examples:
| keyword | count |
| cars | 3 | ? 运行方式(Maven):
# 仅执行 hotels.com 相关数据 mvn test -Dcucumber.filter.tags="@hotel" # 仅执行 cars.com 相关数据 mvn test -Dcucumber.filter.tags="@car" # 同时运行两个站点(用 OR 逻辑) mvn test -Dcucumber.filter.tags="@hotel or @car"
⚠️ 注意事项:
- 标签必须紧邻 Examples 行上方,且独占一行;
- 同一 Scenario Outline 下可定义多个带不同标签的 Examples 块,Cucumber 会按需加载;
- 确保 cucumber-junit-platform-engine(或对应 runner)版本 ≥ 7.0,以完整支持 @tagged Examples 语法;
- 若使用 Spring Boot 集成,建议在 @CucumberContextConfiguration 类中统一管理 WebDriver、Base URL 等上下文——可通过 @Before("@hotel") Hook 动态切换 baseUrl = "https://www.hotels.com",进一步解耦环境配置。
这种设计兼顾了可维护性与可扩展性:新增站点(如 @flight)只需追加带标签的 Examples 块,无需改动 Gherkin 结构或 Java 步骤逻辑,真正实现“一次编写,多站复用”。


































