Cucumber基础Skill cucumber-fundamentals

这个技能用于教授Cucumber基础,包括Gherkin语法和特性文件结构,帮助开发人员和测试人员掌握行为驱动开发(BDD),编写可执行的规范,提升软件测试和文档质量。关键词:Cucumber, Gherkin, BDD, 行为驱动开发, 测试自动化, 软件测试

测试 0 次安装 4 次浏览 更新于 3/25/2026

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 我位于密码重置页面
  # 进行中的工作

最佳实践

  1. 编写声明式场景 - 关注“是什么”,而不是“怎么做”
  2. 保持场景独立 - 每个场景应独立运行
  3. 使用领域语言 - 用业务术语编写,而非技术实现
  4. 一个场景,一个行为 - 一次测试一件事
  5. 避免在 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 场景首先是规范,其次是测试。它们以人人都能理解的语言记录预期行为。