Behave 简明教程

Behave - Gherkin Keywords

行为中的 Gherkin 关键字列在下面 −

  1. Features

  2. Scenario

  3. Steps

  4. Background

  5. Scenario Outline

  6. Text

  7. Table

  8. Tags

  9. Given

  10. When

  11. Then

  12. But

  13. And

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

行尾结束语句包含在行为中。我们可以使用制表符/空格来缩进。大多数行均以 Scenario、Given、Then 等关键字开始。可以在文件中的任何位置添加注释。它们以 / 或 # 符号及其相关内容开始,前面可能带有空格。

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

Feature

功能包含用例。它们可能包含或不包含描述、背景和一组标记。

功能文件结构如下 -

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

功能的名称应该包含被测试功能的描述。不过,不会强制要求提供冗长的描述,只在功能名称有歧义时才添加描述。

Background

添加背景以包含一组步骤。它接近于用例。我们可以使用背景为多个用例添加上下文。它在功能的每个用例之前运行,但处于 before hook 执行之后。

Background 通常用于执行前提条件,例如登录场景或数据库连接等。

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

不应将背景用于创建复杂状态(仅在不可避免时)。这段应简短且真实。此外,我们应该避免在一个功能文件中包含大量用例。

Feature File with 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 等开头。建议使用用例来检查单个特征或预期结果。

Feature File with 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

如果我们有一组类似的条件和要传递到用例中的结果,则使用用例大纲。用例大纲附带一个示例表,并且可以有多个示例表。

测试根据示例表中标题行内找到的每一行执行一次。要测试的值由括号 <> 中包含的名称表示。这些名称应与示例表标题匹配。

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

Feature File with Scenario Outline

具有用例大纲关键字的功能文件如下 -

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

Example

以下是具有用例大纲的功能文件示例 -

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

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

Given

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

我们可以添加一个 Given 步骤来设置数据库中的配置,登录应用程序,等等。

Feature File with 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 开始的步骤用于添加用户要执行的重要任务。通过此步骤,用户可以与系统进行通信,从而更改系统的状态或影响其他地方。

Feature File with 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 步骤用于数据库场景,因为它本质上用于描述最终用户可注意的后果。

Feature File with 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 步骤。它为用户提供了更好的可读性。

Feature File with multiple consecutive Then/Given steps

在 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

Feature File without multiple Then/Given steps

没有多个 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

Step Data – Table

一个步骤可以有一个与其关联的文本和数据表。我们可以为一个步骤添加一个数据表。建议将表格数据缩进,并且必须为每行指定相等数量的列。

列数据应使用 | 符号分隔。

Feature File with 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 的实例。

Implementation logic for 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'])

Step Data – Text

在 """ 中封闭的步骤后的文本块将与该步骤关联。在此处,会分析缩进。从文本中删除所有开头的空格。此外,所有后续行都必须至少有一个空格作为起始行。

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

Feature File with 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 能够仅验证该功能文件的部分章节。只有场景、功能、场景大纲可以进行标记。

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

Feature File with 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

标记有助于通过排除/包含取决于该标记的特定场景或功能来管理测试执行。