- SpecFlow 教程
- SpecFlow - 首页
- SpecFlow - 简介
- 测试驱动开发 (Test Driven Development)
- 行为驱动开发 (Behaviour Driven Development)
- SpecFlow - Visual Studio 安装
- Visual Studio 扩展安装
- SpecFlow - 项目设置
- 其他项目依赖项
- SpecFlow - 运行器激活
- SpecFlow - HTML 报告
- SpecFlow - 绑定测试步骤
- SpecFlow - 创建第一个测试
- 配置 Selenium Webdriver
- SpecFlow - Gherkin
- SpecFlow - Gherkin 关键字
- SpecFlow - 特性文件 (Feature File)
- SpecFlow - 步骤定义文件 (Step Definition File)
- SpecFlow - Hook
- SpecFlow - 背景示例
- 使用 Examples 进行数据驱动测试
- 不使用 Examples 进行数据驱动测试
- 表格转换为数据表
- 表格转换为字典
- 使用 CreateInstance 的表格
- SpecFlow - 使用 CreateSet 的表格
- SpecFlow 有用资源
- SpecFlow - 快速指南
- SpecFlow - 有用资源
- SpecFlow - 讨论
SpecFlow - Gherkin 关键字
主要的 Gherkin 关键字如下:
- Feature (特性)
- Scenario (场景)
- Rule (规则) (Gherkin 6 之前)
- Example 或 Scenario (示例或场景)
- Background (背景)
- Scenario Outline (场景大纲)
- Examples (示例)
- | 用于数据表
- """ 用于文档字符串
- @ 用于标签
- # 用于注释
- Given (给定)
- When (当)
- Then (那么)
- But (但是)
- And (并且)
Gherkin 使用本地化支持多种语言,以上每个关键字在各自的语言中都有等效的术语。
让我们探索一些重要的 Gherkin 关键字:
Feature (特性)
添加 Feature 用于对应用程序功能的总体描述以及组合相关的场景。这是 Gherkin 文档中最重要的关键字。
Feature 后面跟着一个冒号:符号,然后是对该特性的简短描述。我们可以添加多行以进行更详细的描述。这些在 SpecFlow 执行时不会被考虑,但会添加到 html 报告中。
完成 Feature 的描述后,我们应该用 Background、Example 等关键字开始新的一行。我们可以在 Feature 上方添加标签来组合类似的 Feature,而不管文件或目录的结构如何。
标签
标签是添加到场景或特性中的标记。为特性添加标签就像为该特性文件中的每个场景标记该标签一样。标签名称在 @ 符号后提及。
我们可以使用标签过滤和组合要运行的测试。例如,我们可以使用@important标记紧急测试,并经常运行它。SpecFlow 将@ignore标签视为重要标签,并根据带有此标签的场景生成一个被忽略的单元测试方法。
这里,特性文件包含两个带有@Calculator标签的场景。这也会反映在测试资源管理器中,以便选择要运行的测试。
Scenario (场景)
场景是一个完整的实例,描述业务逻辑。它有多个步骤。它通常被认为是关键字Example的同义词。场景没有固定的步骤数量。但建议每个场景有 3 到 5 个步骤。
如果步骤太多,它可能会失去作为规范和文档的价值。场景就像开发生命周期中的一个测试。它也可以分为前提条件、测试步骤和验证。
Given (给定)
Given 用于描述系统的预先存在的条件。它通常处理过去发生的事件。执行 Given 步骤时,它将设置对象、测试数据库中的数据,并将系统置于适当的状态。
因此,Given 步骤有助于在用户与系统交互之前定义系统处于已知条件。我们可以有多个 Given 步骤。可以使用And关键字使用两个或多个 Given 步骤。简而言之,它用于定义前提条件。
When (当)
When 是一个用于描述动作或事件的步骤。这可以是人与系统的交互,也可以是由另一个系统引起的事件。在一个场景中只有一个 When 步骤是一个好习惯。
如果我们被迫使用多个 When 步骤,我们应该理想地将场景分解成更小的场景。
Then (那么)
Then 是一个用于描述预期结果的步骤。Then 步骤的相应步骤定义应该有一个断言来验证实际结果与预期结果是否一致。
因此,它基本上处理从测试中获得的输出(消息、报告等),而不是处理系统的内部特性,例如数据库记录。换句话说,它用于最终用户可以注意到的结果。
But, And
如果我们重复使用 Given、When 和 Then 步骤,那么我们可以通过用 And、But 步骤替换连续的 Given、When、Then 步骤来使场景更有条理。
上面的例子显示了 And 和 But 的用法。
* 符号
* 符号用于代替另一个步骤关键字。这可以用于表示项目列表的步骤。它更像是一个项目符号。对于下面的示例,出现了两个连续的 And 步骤。
连续的 And 步骤应该这样表示:
Background (背景)
有时,我们可能需要在特性文件中的所有场景中重复相同的步骤。我们可以通过将这些步骤组合在 Background 部分下将其移到背景中。
它有助于为场景添加上下文。它可以有多个 Given 步骤。因此,它将在执行每个场景之前执行,但在任何Before hook之后。
Background 保持在第一个Example或Scenario之前,在相同的缩进级别。简而言之,Background 用于声明所有测试的通用步骤。
在上面的示例中,有两个场景,Background 步骤将在每个场景执行之前运行一次。
Scenario Outline (场景大纲)
Scenario Outline 用于使用不同的数据集复制相同的场景。使用不同的值编写相同的测试既麻烦又费时。例如:
我们可以使用Scenario Outline组合以上两个场景。
因此,我们看到 Scenario Outline 应该与关键字Examples一起使用。Scenario Outline 为 Examples 部分下方出现的每一行执行一次。
此外,我们还看到 Given 步骤有<>分隔符。它指向 Examples 表的标题。SpecFlow 将在将步骤与步骤定义匹配的任务之前将值放入此表中。
数据表
数据表用于以列表的形式将一组值发送到步骤定义文件。它对于处理大型数据集很有用。SpecFlow 具有丰富的 API,可在步骤定义文件中进行表操作。
SpecFlow Assist Helpers 包用于处理表格。此外,我们还必须将命名空间TechTalk.SpecFlow.Assist添加到我们的代码中。