name: cucumber-fundamentals user-invocable: false description: 核心Cucumber概念、Gherkin语法和特性文件结构
Cucumber 基础
掌握用于行为驱动开发的核心Cucumber和Gherkin概念。
Gherkin 语法
使用 Given-When-Then 结构编写场景:
Feature: 用户认证
As a user
I want to log in to the application
So that I can access my account
Scenario: 使用有效凭证成功登录
Given 我位于登录页面
When 我输入有效凭证
And 我点击登录按钮
Then 我应该被重定向到仪表板
And 我应该看到欢迎消息
关键词
- Feature:软件特性的高级描述
- Scenario:说明业务规则的具体示例
- Given:上下文或前提条件
- When:动作或事件
- Then:预期结果
- And/But:连接多个步骤
- Background:所有场景的通用前提条件
- Scenario Outline:多个示例的模板
- Examples:Scenario Outline 的数据表
特性文件
逻辑结构化特性文件:
Feature: 购物车管理
In order to purchase products
As a customer
I want to manage items in my shopping cart
Background:
Given 我以客户身份登录
And 我的购物车为空
Scenario: 添加产品到购物车
When 我将“笔记本电脑”添加到购物车
Then 我的购物车应包含 1 件商品
And 购物车总计应为“$999.99”
Scenario: 从购物车移除产品
Given 我的购物车中有一台“笔记本电脑”
When 我从购物车移除“笔记本电脑”
Then 我的购物车应为空
And 购物车总计应为“$0.00”
场景大纲
使用数据表进行参数化测试:
Scenario Outline: 使用不同用户类型登录
Given 我位于登录页面
When 我以“<user_type>”身份登录
Then 我应该看到“<dashboard>”仪表板
And 我应该拥有“<permissions>”权限
Examples:
| user_type | dashboard | permissions |
| admin | Admin | full_access |
| user | User | limited_access |
| guest | Public | read_only |
标签
使用标签组织和筛选场景:
@smoke @authentication
Scenario: 用户登录
Given 我位于登录页面
When 我输入有效凭证
Then 我应该登录成功
@wip
Scenario: 密码重置
Given 我位于密码重置页面
# 进行中的工作
最佳实践
- 编写声明式场景 - 关注“是什么”,而不是“怎么做”
- 保持场景独立 - 每个场景应独立运行
- 使用领域语言 - 用业务术语编写,而非技术实现
- 一个场景,一个行为 - 一次测试一件事
- 避免在 Given/When/Then 中包含 UI 细节 - 保持在业务逻辑层面
示例:好与坏场景
❌ 不好(命令式、实现导向):
Scenario: 更新用户资料
Given 我导航到“http://example.com/profile”
When 我找到 id 为“firstName”的元素
And 我清除输入字段
And 我输入“John”
And 我点击类为“save-btn”的按钮
Then 我应该看到文本“资料已更新”
✅ 好(声明式、业务导向):
Scenario: 更新用户资料
Given 我在我的资料页面
When 我将我的名字更新为“John”
Then 我的资料应被保存
And 我应该看到成功消息
数据表
向步骤传递结构化数据:
Scenario: 注册新用户
Given 我位于注册页面
When 我填写注册表单:
| Field | Value |
| First Name | John |
| Last Name | Doe |
| Email | john@example.com |
| Password | SecurePass123! |
Then 我应该成功注册
文档字符串
向步骤传递多行文本:
Scenario: 提交联系表单
Given 我位于联系页面
When 我提交一条消息:
"""
你好支持团队,
我有一个关于最近订单 #12345 的问题。
请尽快联系我。
诚挚问候,
John Doe
"""
Then 我应该看到确认消息
关键原则
- 活文档:特性作为可执行规范
- 协作:由开发人员、测试人员和业务利益相关者编写
- 通用语言:一致使用领域术语
- 示例优于规则:具体示例澄清需求
- 自动化:场景是自动化测试
记住:Cucumber 场景首先是规范,其次是测试。它们以人人都能理解的语言记录预期行为。