Behave 关键字


Behave中的Gherkin关键字如下:

  • Features

  • Scenario

  • 步骤s

  • 背景

  • 情景大纲

  • Text

  • Table

  • Tags

  • Given

  • When

  • Then

  • But

  • And

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

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

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

Feature

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

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

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

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

背景

添加背景以具有一组步骤。它接近于一个场景。我们可以为具有背景的多个场景添加上下文。它在功能的每个场景之前运行,但在执行之前的钩子之后执行。

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

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

背景不应用于创建复杂状态(仅在无法避免的情况下)。这一段应该简短而真实。此外,我们应该避免在一个特征文件中包含大量场景。

具有背景的特征文件

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

Feature: Payment Process
    Background:
        Given launch application
        Then 输入 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

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

一个场景可能有多个步骤,以关键字 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 关键字的特征文件如下:

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

例子

以下是带有 Scenario Outline 的特征文件示例:

例子s: Credentials
    | email        | password  |
    | qa@gmail.com | pwd1      |
    | qe@gmail.com | pwd2      |

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

Given

以关键字 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关键字的特征文件如下:

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关键字的特征文件如下:

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 代码可以访问一个表(在 step 函数中传递)。表是表的一个实例。

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 函数中传递)中的 .text 属性由实现 Python 代码访问。

带有文本的特征文件

带有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 能够仅验证特征文件的特定部分。 A Scenario, Feature, Scenario Outline 只能被标记。

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

带有标签的功能文件

带有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

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