如何在cucumber中编写包含多个步骤的测试

如何在cucumber中编写包含多个步骤的测试,cucumber,bdd,cucumber-jvm,gherkin,cucumber-java,Cucumber,Bdd,Cucumber Jvm,Gherkin,Cucumber Java,如果您有一个简单的表单,请输入您的姓名、性别并保存。当您选择性别下拉列表时,它将列出[男性|女性] 因此,在编写上述测试场景时,典型的方法是分步编写 Precondition : User Loged in and Form Opened Steps | Expected Result ------------------------------------------------------------------------ 1

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

因此,在编写上述测试场景时,典型的方法是分步编写

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. 

现在,我们如何用黄瓜来表达这一点?正如我所读到的,在同一个场景中,你不应该有多个动作。如果您为上面的每一步添加多个测试用例,测试用例将呈指数增长。处理这个问题的最佳方法是什么?

我的方法是考虑用小黄瓜(使用BDD原则)记录应用程序行为,而不是测试用例。 事实上,它为BDD的误解提供了一些良好的背景

话虽如此,尽管您试图在单个场景中验证上述标准,但我建议至少分为两部分,以保持验收测试简洁、可读和可维护

以下是我的尝试,重新制定:

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
场景:性别下拉列表值
给定用户已登录
当用户单击性别下拉列表时
然后显示男性和女性选项
@完完全全
场景大纲:保存用户信息
给定用户已登录
当用户输入并选择
然后点击Save
然后信息被保存
示例:
|姓名|性别|
|基思|男|
|詹|女|
||女|#阴性
|罗伯| | |#否定

此外,您还可以考虑加入一些负面测试场景。

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

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|
场景大纲:用户输入详细信息并存储
给定用户登录并打开表单
当用户输入
用户进入
然后点击Save
然后保存信息。
然后我返回(以防查看信息)
那么我主张
那么我主张
示例:
|姓名| |性别|
|x | |男|
|y | |女性|

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

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

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
差不多就是这样。请注意,场景中没有捕获到关于如何添加朋友的任何细节,Cucumber并不是这样做的

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

When 'I add Alison to my friends' do
  add_a_friend name: 'Alison' # perhaps add a gender param here
end
请注意,即使步骤定义也不知道如何填写表单

最后是一个实际完成工作的助手方法(在Ruby中完成,因为它更清晰)

所以从技术上讲,这就是你如何用Cumber来表示你的问题,你写下你为什么在使用你的场景中做事情,然后你把你如何做事情下推到步骤定义使用的助手方法中

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