如何在黄瓜中编写多步骤测试

How to write Tests with multiple steps in cucumber

如果您有一个简单的表格,请输入您的姓名、性别并保存。当您 select 性别下拉列表时,它将列出 [Male |女].

所以在写上面的测试场景时,典型的做法是分步写。

Precondition : User Loged in and Form Opened

Steps                                | Expected Result
------------------------------------------------------------------------
1 : User Enters the name             | Entered name should be there         
2 : User Clicks on Gender Drop-down  | Male and Female should be listed
3 : Users Selects a Gender           | Selected Gender should be there
4 : Clicks on Save                   | Information get saved.   

以下是表示这是 Cucumber 的一种方式。

Given User Loged in and Form Opened
When User Enters the name
Then Entered name should be there         
When User Clicks on Gender Drop-down
Then Male and Female should be listed
When Users Selects a Gender
Then Selected Gender should be there
When Clicks on Save 
Then Information get saved. 

现在我们如何在 Cucumber 中表示它?正如我所读,您不应该在同一场景中执行多项操作。如果您为上面的每个步骤添加多个测试用例,则测试用例将呈指数增长。处理此问题的最佳方法是什么?

我的方法是考虑在 Gherkin 中记录(使用 BDD 原则)- 应用程序行为 而不是 测试用例。 事实上,this article 提供了一些关于 BDD 误解的良好背景。

话虽如此,即使您尝试在单个场景中验证上述标准,我还是建议您至少分成 2 个,以保持您的验收测试简洁、可读和可维护。

这是我重新制定的尝试:

Scenario: Gender Dropdown values
Given a user is logged in
When the user clicks the Gender dropdown
Then Male and Female options are displayed

@EndtoEnd
Scenario Outline: Saving User information
Given a user is logged in
When the user enters a <Name> and selects a <Gender>
And Clicks on Save
Then the information gets saved

Examples:
|Name|Gender|
|Keith|Male|
|Jenn|Female|
||Female| # Negative
|Rob||    # Negative

此外,你也可以考虑加入一些负面的测试场景。

如果您需要使用多个数据在 Cucumber 上进行测试,您可以继续使用 scenario outline 功能,在场景之后的示例中加载数据。

Scenario Outline: User enters details and stores
Given User Loged in and Form Opened
When User Enters the <Name>        
And Users Enters the <Gender>
And Clicks on Save 
Then Information get saved. 
Then I Go back (In case view info)
Then I assert for <Name>
Then I assert for <Gender>

Examples:
|Name| |Gender|
|x|     |Male|
|y|     |female|

Cucumber 不是要测试你如何做事,而是要说明你为什么做事。这个场景是关于用户如何与表单交互的,它是关于点击这个并输入那个,none 这个在场景中有任何位置。

你的场景和问题甚至没有告诉我们你想做什么,所以我只需要编一些东西。假设您正在尝试添加朋友

Feature: Adding a friend

  Scenario: Add Alison
    Given I am logged in
    When I add Alison to my friends
    Then I should see Alison is my friend

差不多就这些了。请注意如何在场景中捕获有关如何添加朋友的详细信息 none,这不是 Cucumber 的用途。

现在让我们从技术方面探讨一下我们如何获得这个场景来实际添加朋友。首先步骤定义

When 'I add Alison to my friends' do
  add_a_friend name: 'Alison' # perhaps add a gender param here
end

请注意,即使是步骤定义也不知道如何填写表格。

终于有了一个实际完成工作的辅助方法(在 Ruby 中完成,因为它更清晰)

module FriendStepHelper
  def add_a_friend(name:)
    # here is where we fill in the form and choose the gender
  end
end
World FriendStepHelper # makes add_a_friend visible to step def

所以从技术上讲,这就是你在 Cucumber 中表达你的问题的方式,你写了为什么你在使用你的场景时做事,并将你做事的方式下推到你的步骤定义所使用的辅助方法