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

时间:2017-03-20 13:51:21

标签: cucumber bdd cucumber-jvm gherkin cucumber-java

如果您有一个简单的表单,请输入您的姓名,性别并保存。当您选择Gender下拉列表时,它将列出[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. 

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

3 个答案:

答案 0 :(得分:1)

我的方法是考虑在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

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

答案 1 :(得分:0)

如果您需要对包含多个数据的黄瓜进行测试,您可以继续使用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|

答案 2 :(得分:0)

黄瓜不是要测试你如何做事,而是要说明你做事的原因。这个场景是关于用户如何与表单进行交互,所有这些都是关于点击它并输入,这些都没有在场景中有任何地方。

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

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中完成它更清晰)

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中表达你的问题,为什么你在使用你的场景时做了什么,然后你就按照你的步骤定义所使用的辅助方法来做事。