Behave - Gherkin 关键字

Behave 中的 Gherkin 关键字如下所列 −

  • Features

  • Scenario

  • Steps

  • Background

  • Scenario Outline

  • Text

  • Table

  • Tags

  • Given

  • When

  • Then

  • But

  • And

特征文件是用 Gherkin 语言编写的。 它是纯文本形式,由团队的非技术成员(业务分析师)创建。 功能文件可用于自动化测试和文档。

Behave 中包含行结束语句。 我们可以使用制表符/空格进行缩进。 大多数行以 Scenario、Given、Then 等关键字开头。 可以在文件中的任何位置添加注释。 它们以/不带空格开头,后跟# 符号和文本。

让我们讨论一些关键的 Gherkin 关键字。

Feature

功能(Feature)由场景组成。 它们可能包含/可能不包含描述、背景和一组标签。

一个特征文件的结构如下 −

Feature − Verify book name added in Library
Scenario − Verify Book name
Given Book details
Then Verify book name

功能的名称应该包含对正在测试的功能的描述。 但是,冗长的描述不是强制性的,添加描述只是为了消除特征名称中的歧义。

Background

添加了一个背景(Background)以包含一组步骤。 它接近一个场景。 我们可以使用背景向多个场景添加上下文。 它在功能的每个场景之前运行,但在挂钩之前执行。

背景(Background)一般用于执行登录场景或数据库连接等前置条件。

可以添加背景描述以提高人类可读性。 背景只能在功能文件中出现一次,并且必须在场景或场景大纲之前声明。

不应该使用背景来创建复杂状态(只有在无法避免的情况下)。 这一部分应该简短而真实。 此外,我们应该避免在一个功能文件中包含大量场景。

带背景的特征文件

带有 Background (背景)关键字的特征文件如下 −

Feature: Payment Process
   Background:
      Given launch application
      Then Input credentials
   Scenario: Credit card transaction
      Given user is on credit card payment screen
      Then user should be able to complete credit card payment
   Scenario: Debit card transaction
      Given user is on debit card payment screen
      Then user should be able to complete debit card payment

Scenario

场景定义了正在测试的应用程序的行为。 它有一个标题来描述它的目标。 可以添加其描述以提高人类可读性。

一个场景可能有多个步骤,这些步骤以关键字 Given、Then、When 等开头。 建议有一个场景来检查单个特征或预期结果。

带有场景的特征文件

带有Scenario(场景)关键字的特征文件如下:

Feature − Payment Process
      Scenario − Credit card transaction
   Given user is on credit card payment screen
   Then user should be able to complete credit card payment

Scenario Outline

如果我们有一组相似的标准和要在场景中传递的结果,则使用Scenario Outline(场景大纲)。 场景大纲附带一个示例表,并且可以有多个示例表。

对于示例表中标题行之后的每一行,测试都会执行一次。 要测试的值由包含在 brackets<> 中的名称表示。 这些名称应与示例表标题匹配。

它有助于减少代码行,因为它消除了重复的步骤并安排了我们的测试。

带有场景大纲的特征文件

带有Scenario Outline(场景大纲)关键字的feature特征文件如下 −

Feature − User information
Scenario Outline: Check login functionality
   Given user enters <email> and <password>
   Then user should be logged in

示例

以下是带有场景大纲的特征文件示例 −

Examples: Credentials
   | email        | password  |
   | qa@gmail.com | pwd1      |
   | qe@gmail.com | pwd2      |

使用不同的参数集执行相同的测试。

Given

以关键字 Given 开头的步骤用于在用户与系统交互之前将系统置于熟悉的环境中(类似于先决条件)。 建议不要在 Given 步骤中描述用户操作。

可以添加给定的步骤,用于在数据库中设置配置、登录到应用程序等。

给定的特征文件

带有Given关键字的特征文件如下 −

Feature − Payment Process
            Scenario − Credit card transaction
   Given user is on credit card payment screen
   Then user should be able to complete credit card payment

When

以关键字 When 开头的步骤用于添加要由用户执行的基本任务。 这样,用户就可以与系统进行通信,从而改变系统状态或对其他地方产生影响。

带有When的特征文件

带When关键字的特征文件如下 −

Feature − Payment Process
            Scenario − Credit card transaction
   Given user is on credit card payment screen
      When user clicks on the Payment with Credit Card button
   Then user should be able to complete credit card payment

Then

以关键字 Then 开头的步骤用于获得预期结果。 在此步骤中观察到的结果(理想情况下以输出形式 - 消息、报告等)应与业务场景及其存在的功能文件相关联。

建议不要对数据库场景使用 Then 步骤,因为它主要用于描述最终用户会注意到的后果。

带有 Then 的特征文件

带When关键字的特征文件如下 −

Feature − Payment Process
            Scenario − Credit card transaction
   Given user is on credit card payment screen
   When user clicks on the Payment with Credit Card button
   Then user should be able to complete credit card payment

And, But

如果我们有多个 Given、When、Then 连续步骤,我们可以使用 And 和 But 步骤。 它为用户带来了更好的可读性。

包含多个连续 Then/Given 步骤的特征文件

Behave中有多个连续的Then/Given步骤的特征文件如下 −

Feature − Verify book names added in Library
   Scenario − Verify Book name
      Given Book1 details
      Given Book2 details
      Then Verify book names
      Then Verify newly added book names should not be in Delete History

没有多个 Then/Given 步骤的特征文件

没有多次Then/Given步骤的特征文件如下 −

Feature − Verify book names added in Library
   Scenario − Verify Book name
      Given Book1 details
      And Book2 details
      Then Verify book names
         But Verify newly added book names should not be in Delete History

步骤数据 – table(表格)

一个步骤可以有一个与之关联的文本和数据表。 我们可以添加一个带有步骤的数据表。 建议缩进表格数据,并且每行必须有相同的列号。

A列数据应该用 | 符号分隔。

带 table 表格的特征文件

带table关键字的特征文件如下 −

Feature − User Registration
Scenario − User enters registration details
   When User enters name and password
      | name |password |
      | t1   | pwd     |
      | t2   | pwd1    |
Then user should be able to complete registration

在上下文变量(在步骤函数中传递)中具有 .table 属性的实现 Python 代码可以访问表。 table 是表的一个实例。

Table 的实现逻辑

下面是Table中.table属性的实现逻辑 −

@when('User enters name and password')
def step_impl(context):
   for r in context.table:
      model.delete_usr(name=r['name'], password=r['password'])

步骤数据 - Text(文本)

包含在 """ 中的步骤后的文本块将与该步骤链接。 在这里,缩进被解析。 开头的所有空格都从文本中删除。 此外,所有后续行必须至少有一个最小空白作为起始行。

在上下文变量(在步骤函数中传递)中具有 .text 属性的实现 Python 代码可以访问文本。

带text文本的功能文件

带text关键字的特征文件如下 −

Feature − Verify book name added in Library
   
   Scenario − Verify Book name
      Given Book details
         """
          Text added for a step
         """
      Then Verify book name

Tags

可以标记特征文件的一部分,以便 Behave 能够仅验证特征文件的特定部分。 场景、功能、场景大纲只能被标记。

此外,用于功能的标签应由其所有场景和场景大纲继承。 标签放置在我们要标记的场景或功能之前。 我们也可以在一行中用空格分隔多个标签。 标记以 @ 开头,后跟标记名称。

带有tags标签的特征文件

带tags关键字的特征文件如下:

@payment
@high
Feature − Payment Process
      Scenario − Credit card transaction
   Given user is on credit card payment screen
   Then user should be able to complete credit card payment

Tags 通过根据标签排除/包含特定场景或功能来帮助管理测试执行。