Gherkin 语言:Cucumber 中的格式、语法和 Gherkin 测试

什么是 Gherkin 语言?

Gherkin 是一种业务可读语言,可帮助您描述业务行为而无需深入了解实施细节。它是一种领域特定语言,用于以 Cucumber 格式定义规范的测试。它使用纯语言描述用例,并允许用户从行为测试中删除逻辑细节。

Gherkin 语言中的文本作为自动化测试的文档和骨架。Gherkin 格式基于 TreeTop 语法,该语法存在于 37 种以上语言中。因此,您可以用 37 种以上口语编写 Gherkin。

此脚本有两个主要目的

  • 文档用户场景
  • 编写自动化测试 (BDD)

为什么选择 Gherkin?

Gherkin 的必要性可以通过以下图片轻松解释

使用 Gherkin 之前

Before Gherkin

使用 Gherkin 之后

After Gherkin

Gherkin 语法

Gherkin 是一种面向行的语言,就像 YAML 和 Python 一样。每行称为一个步骤,以关键字开头,以终止符结尾。制表符或空格用于缩进。

在此脚本中,您可以在任何位置添加注释,但它应以 # 符号开头。它在删除 Ghrekin 的关键字(如 given、when、then 等)后读取每一行。

典型的 Gherkin 步骤如下所示

Gherkin 脚本:将人类的因果概念与软件的输入/过程/输出概念连接起来。

Gherkin 语法

Feature: Title of the Scenario
Given [Preconditions or Initial Context]
When [Event or Trigger]
Then [Expected output]

Gherkin 文档的扩展名为 .feature,它只是一个带有特殊扩展名的测试文件。Cucumber 读取 Gherkin 文档并执行测试以验证软件是否按照 Gherkin 语法运行。

Gherkin 中使用的重要术语

  • 特性
  • 背景
  • 场景
  • 给定
  • 然后
  • 但是
  • 场景大纲示例

命名约定用于功能名称。但是,Cucumber 中没有关于名称的既定规则。

特性

文件应具有扩展名 .feature,每个功能文件应只有一个功能。功能关键字以 Feature: 开头,然后添加一个空格,并写入功能名称。

场景

每个功能文件可能包含多个场景,每个场景都以 Scenario: 开头,后跟场景名称。

背景

Background 关键字可帮助您为场景添加一些上下文。它可以包含场景的一些步骤,但唯一的区别是它应该在每个场景之前运行。

给定

使用 Given 关键字的目的是在用户开始与系统交互之前将系统置于熟悉的状态。但是,如果 Given 在“先决条件”步骤中,您可以省略在 Given 步骤中编写用户交互。

语法

Given
Given - a test step that defines the 'context
Given I am on "/."

When 步骤用于定义用户执行的操作。

语法

When
A When - a test step that defines the 'action' performed
When I perform "Sign In."

然后

使用“then”关键字的目的是查看 when 步骤中的操作后的结果。但是,您只能验证明显的变化。

语法

 Then
Then - test step that defines the 'outcome.'
Then I should see "Welcome Tom."

和 & 但是

您可能有多个 Given、When 或 Then。

语法

But
A But - additional test step which defines the 'action' 'outcome.'
But I should see "Welcome Tom."
And - additional test step that defines the 'action' performed
And I write  "EmailAddress" with "Tomjohn@gmail.com."

Given、When、Then、And 和 But 是测试步骤。您可以互换使用它们。解释器不会显示任何错误。但是,当阅读时,它们肯定不会有任何“意义”。

Important Terms used in Gherkin
Gherkin 中使用的重要术语
Given The login page is opening
When I input username, password and click the Login button 
Then I am on the Homepage

Gherkin 示例

示例 1

Feature:  Login functionality of social networking site Facebook. 
Given:  I am a facebook user. 
When: I enter username as username. 
And I enter the password as the password 
Then I should be redirected to the home page of facebook 

上面提到的场景是用户登录功能。

Gherkin 将分析步骤定义文件中编写的每个步骤。因此,功能文件中给出的步骤和步骤定义文件应匹配。

示例 2

Feature: User Authentication Background:
Given the user is already registered to the website Scenario:
Given the user is on the login page
When the user inputs the correct email address
And the user inputs the correct password
And the user clicks the Login button
Then the user should be authenticated
And the user should be redirected to their dashboard
And the user should be presented with a success message 

使用 Gherkin 的最佳实践

  • 每个场景应单独执行
  • 每个功能都应能够单独执行
  • 步骤信息应独立显示
  • 将您的场景与您的要求联系起来
  • 完整跟踪要求文档中应包含哪些场景
  • 创建模块化且易于理解的步骤
  • 尝试组合所有常见的场景

Gherkin 的优点

  • Gherkin 足够简单,非程序员也能理解
  • 程序员可以将其用作开始测试的非常坚实的基础
  • 它使用户故事更容易理解
  • Gherkin 脚本可以被业务主管和开发人员轻松理解
  • Gherkin 测试针对业务需求
  • 很大一部分功能规范以用户故事的形式编写
  • 您无需成为专家即可理解小型 Gherkin 命令集
  • Gherkin 测试用例将验收测试直接链接到自动化测试
  • 编写测试用例的样式更易于在其他测试中重用代码

Gherkin 的缺点

  • 它需要高水平的业务参与和协作
  • 可能并非适用于所有场景
  • 编写不当的测试很容易增加测试维护成本

摘要

  • Gherkin 是 Cucumber 规范的格式
  • Gherkin 是一种面向行的语言,就像 YAML 和 Python 一样
  • Gherkin 脚本将人类的因果概念与软件的输入/过程和输出概念联系起来
  • Feature、Background、Scenario、Given、When、Then、And 和 But 在 Gherkin 中很重要
  • 在 Gherkin 中,每个场景应单独执行
  • Gherkin 最大的优点是足够简单,非程序员也能理解
  • Gherkin 测试可能并非适用于所有类型的场景