Behave - 小Cucumber关键词


Behave 中的 Gherkin 关键字如下 -

  • 特征

  • 设想

  • 脚步

  • 背景

  • 场景概要

  • 文本

  • 桌子

  • 标签

  • 给定

  • 什么时候

  • 然后

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

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

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

特征

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

特征文件的结构如下 -

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

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

背景

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

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

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

不应使用背景来创建复杂的状态(仅当无法避免时)。这一部分应该简短而真实。此外,我们应该避免在一个特性文件中包含大量场景。

带背景的特征文件

带有背景关键字的功能文件如下 -

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

设想

场景定义了正在测试的应用程序的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

例子

以下是带有场景大纲的功能文件示例 -

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

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

给定

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

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

带有给定的特征文件

带有给定关键字的功能文件如下 -

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 的特征文件

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

但是

如果我们有多个 Give、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

实现 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'])

步骤数据 – 文本

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

实现 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

标签

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

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

带标签的功能文件

带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

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