Cucumber测试中的Scenario是什么?

2025年3月17日 | 阅读 3 分钟

Scenario(场景)是Gherkin语言的核心结构之一。Scenario包括feature(特性)的所有可能情况以及这些情况的测试脚本。

关键字 "Scenario(场景)" 在Gherkin语言中代表一个场景。

一个feature可以有多个scenario,每个scenario由一个或多个步骤组成。

Scenario in Cucumber Testing

让我们通过一个例子来理解scenario

示例

为了确保Web应用程序的反馈功能正常,我们创建一个Cucumber测试来验证它是否正常工作。

Scenario - Verification of Feedback Functionality
Given the user navigates to JavaTpoint.com
When the user clicks on Feedback, then the Feedback page opens
And the user submits feedback message
Then feedback should be received on the admin page
And admin can reply to the user

每个scenario遵循 Given(假设), When(当), And(并且), 和 Then(那么) 格式。 这种格式属于一种特定的语言,称为 "Gherkin语言"。

  • Given(假设): 它描述了应用程序特定功能的任务。 它基本上是测试的预知状态或前提条件。
  • When(当): 它用于描述动作。 例如,当用户尝试登录时,它被视为一个动作。
  • Then(那么): 期望的结果应该放在这里。 例如,成功登录的验证就是一个结果。
  • And(并且): 我们可以使用它来组合同一类型的两个或多个动作。 例如,用户名和密码属于同一类型,即登录功能。

Scenario Outline(场景大纲)

在Gherkin语言中,scenario outline是用于多次运行同一scenario的关键字。

它也被定义为 "当使用不同的值组合多次执行相同的测试时,可以使用场景大纲。"

关键字 scenario outline 也可以用名称 Scenario Template(场景模板)来表示。换句话说,关键字Scenario Template是场景大纲的同义词。

场景大纲与scenario结构完全相似,但唯一的区别是提供多个输入。 为了使用场景大纲,我们不需要任何聪明的想法,我们只需要复制相同的步骤并重新执行代码。

让我们通过一个例子来理解场景大纲

示例

假设我们需要测试多个用户的登录功能是否正常工作。 这种情况需要多次执行登录功能场景。 因此,场景大纲可以用于测试具有多个用户名和密码的登录功能场景。

在Gherkin语句中提及诸如 "Username(用户名)" 和 "Password(密码)" 之类的变量时,请用 "<>" 提及它们。 考虑以下测试脚本

Scenario: Successful Login with Valid entries
Given user navigates to the website javatpoint.com 
When User Navigate to Login Page
And user logs in through Login Window by using <Username> as "username1"
And <Password> as "password1"
Then login must be successful.

让我们采用上面的测试脚本,我们需要使用几个不同的用户名和密码集来测试登录功能。

Feature: Login Functionality  
Scenario Outline: Login functionality
Username | Password
username1 | password1
username2 | password2
username3 | password3
username4 | password4

在上面的例子中,我们为变量 "Username(用户名)" 和 "Password(密码)" 提供了多个输入值。 在执行实际测试时,Cucumber会将变量替换为提供的输入值。

一旦username1已经与password1一起执行,测试将针对第二次迭代执行另一个输入值。 Cucumber将遵循此路径,直到完成所有提供的值。

注意:Scenario Outline(场景大纲)必须包含一个Scenario(场景)部分。Scenario步骤被解释为一个模板,永远不会直接执行。