SpecFlow - Gherkin 关键字
主要的 Gherkin 关键字是 −
- Feature
- Scenario
- Rule(till Gherkin 6)
- Example or Scenario
- Background
- Scenario Outline
- Examples
- | for Data table
- """ for Document Strings
- @ for Tags
- # for Comments
- Given
- When
- Then
- But
- And
Gherkin 使用多种语言的本地化,上述每个关键字在相应语言中都有其等效术语。
让我们探索一些重要的 Gherkin 关键字 −
Feature
添加功能是为了对应用程序的功能进行总体描述并将其与相关场景组合在一起。这是 Gherkin 文档中最重要的关键字。
功能后跟一个冒号:符号,然后是该功能的简短描述。我们可以添加多行以获得更多描述。这些不被考虑SpecFlow 在执行时被忽略,但被添加到 html 报告中。
一旦完成了对功能的描述,我们就应该用关键字 Background、Example 等开始新的一行。我们可以在功能上方添加标签来组合类似的功能,而不管文件或目录的结构如何。
Tags
Tags 是添加到场景或功能的标记。给功能添加标签就像给该功能文件中的每个场景标记该标签一样。标签名称在 @ 符号后提及。
我们可以过滤和组合要使用标签运行的测试。例如,我们可以用 @important 标记紧急测试并经常运行它。 SpecFlow 将 @ignore 标签视为重要标签,并使用此标签从场景中生成忽略的单元测试方法。
此处,功能文件包含两个带有 @Calculator 标签的场景。Test Explorer 中也应反映相同的内容,以选择要运行的测试。
Scenario
Scenario 是描述业务逻辑的完整实例。它有多个步骤。它通常被认为是关键字 Example 的同义词。场景没有固定的步骤数。但建议每个场景有 3 到 5 个步骤。
如果步骤太多,可能会失去作为规范和文档的价值。场景就像开发生命周期中的测试。此外,它可以分为先决条件、测试步骤和验证。
Given
Given用于描述系统预先存在的条件的步骤。它通常处理过去发生的事件。在执行输入步骤时,它负责设置数据库意识到、测试数据并使系统处于正确状态。
因此,Given 步骤有助于在用户与系统交互之前将系统定义在已知条件下。我们可以有多个给定步骤。两个或多个给定步骤可以使用 And 关键字。简而言之,它用于定义先决条件。
When
When 是用于描述动作或事件的步骤。这可以是人与系统的交互,也可以是由另一个系统引起的事件。在一个场景中只有一个"何时"步骤是一种很好的做法。
如果我们被迫有多个"何时"步骤,我们最好将场景分解为更小的"何时"步骤。
Then
Then 是用于描述预期结果的步骤。Then 步骤的相应步骤定义应该具有断言来验证实际结果与预期结果。
因此,它基本上处理从测试中获得的输出(消息、报告等),而不是内部系统的特征,例如数据库记录。换句话说,它用于从最终用户角度看明显的结果。
But, And
如果我们重复了Given, When, Then步骤,那么我们可以通过将连续的Given, When, Then步骤替换为And, But步骤,使场景更有条理。
以上示例显示了 And 和 But 的用法。
* 符号
* 符号用于代替另一个步骤关键字。这可用于表示项目列表的步骤。它更像是一个项目符号。对于以下示例,两个 And 步骤相继出现。
连续的 And 步骤应表示为像这样 −
Background
有时,我们可能需要重复相同的步骤Feature 文件中的所有场景。我们可以将这些步骤合并到 Background 段下,从而将这些步骤移至背景。
这有助于为场景添加上下文。它可以有多个 Given 步骤。因此,它应在每个场景执行之前执行,但发布任何Before 钩子。
背景保留在第一个示例或< b>Scenario,缩进级别类似。简而言之,Background 用于声明所有测试的通用步骤。
在上面的例子中,有两个场景,在执行每个场景之前,背景步骤应运行一次。
Scenario Outline
Scenario Outline(场景大纲)用于复制具有不同数据集的相同场景。使用不同的值编写相同的测试既麻烦又耗时。例如,
我们可以将上述两种场景与Scenario Outline(场景大纲)结合起来。
因此,我们看到场景大纲应该附带关键字示例 。针对示例段下方出现的每一行,都会执行一次场景大纲。
此外,我们已经看到 Given 步骤具有 <> 分隔符。它指向示例表的标题。 SpecFlow 应在将步骤与步骤定义进行匹配之前将值放入此表中。
Data Table
Data Table(数据表)用于发送以列表形式将一组值添加到步骤定义文件中。这对于处理大型数据集非常有用。SpecFlow 具有丰富的 API,可用于步骤定义文件中的表格操作。
SpecFlow Assist Helpers 包用于处理表格。此外,我们必须将命名空间 TechTalk.SpecFlow.Assist 添加到我们的代码中。