在一个Cucumber场景中拥有多个是正确的吗?

时间:2016-04-03 06:00:59

标签: cucumber bdd acceptance-testing

我是Cucumber的新人。我正在尝试编写一个测试

的功能文件
  1. 现有网页上的新下拉列表
  2. 并选择此新值条目将进入新的数据库表
  3. 我写过这个功能文件。这似乎不正确。

    • 我不确定我们是否可以有两个Then
    • 或者是否有某种方式我们可以拥有相互依赖的功能,例如新下拉列表的一个功能和数据库条目的一个功能?

    功能文件类似于

    Scenario: Admin user should be able to assign ReadOnly role to a searched user via  Change User page
    
    Given user logs into webapp with Admin role 
    And Navigates to Change User page 
    
    When user searches for user with id 123 
    And clicks select link corresponding to correct id
    
    Then Change User page loads 
    And it has a new drop down with Read Only role
    And when user selects MS distributor in drop down  # note when with small w
    And Presses Submit button then a new entry is saved in DB table # then with small t
    

    或许我可以使用以下内容:

    Scenario: Admin user should be able to assign ReadOnly role to a searched user via  Change User page
    
    Given user logs into webapp with Admin role 
    And Navigates to Change User page 
    
    When user searches for user with id 123 
    And clicks select link corresponding to correct id to open Change User page
    And it has a new drop down with Read Only role # need to check this new value in my selenium test case
    And when user selects MS distributor value in drop down  # note when with small w
    And presses Save button 
    
    Then a new entry is saved in DB table
    

    我期待着从你的经历中学习。

2 个答案:

答案 0 :(得分:2)

当你完成代码编写后,一切正常,某人(或类似自动化系统之类的东西)能够做到以前无法做到的事情?

你能想到一个例子吗?

我很确定会发生什么不是将字段放入数据库。除非其他人正在使用该数据库,否则即使这样,他们拥有的功能也将读取您刚刚放入的信息

您在验收标准中告诉我的是:

Admin user should be able to assign ReadOnly role to a searched user via  Change User page

你能举个例子吗?你能给我一个Admin用户的例子吗?他们能做什么?还是不行?用户将无法做什么?你能给我一个他们想要编辑的条目的例子吗?

每当我看到任何通用的东西(例如“用户”)时,我都会问你一个例子。给我一个名字!即使这是一个愚蠢,有趣的。

这是我的意思的一个例子:

Given Andy Admin has privileges for changing users
And Reggie Writer is a user with privileges for writing entries
And a page on "Dancing with Unicorns" is editable to writers
When Andy Admin changes Reggie Writer's privileges to be Read Only
Then Reggie Writer should no longer be able to edit the page "Dancing with Unicorns".

您会看到该语言与实现无关。你无法分辨Andy和Reggie是使用网页,移动电话上的应用程序还是旧式DOS提示符。这是关于问题,而不是解决方案。数据库通常是解决问题的一种方法。

此外,除非实际使用,否则数据库条目无值。场景必须具有有价值的结果。

当然可以有不止一个:

Given Martin Moneybags has plenty of money <-- we could define how much if we wanted
And he's authenticated himself with the cash machine
When he asks for £1000
Then the cash machine should give him £1000
And it should debit his account by £1000.

毕竟你不想忘记最后一个。

拥有多个Given,并且不止一个,那就完全没问题了。

有些人规定在时只应该有一个。但是,如果重要的行为是关于两个人的行为的交互,或者与时间传递等事物的交互,则可以有多个时间。但这是一种罕见的情况。

如果您有超过七个步骤,请查看是否存在一些非常常见且可以移动到其他功能的上下文或结果。例如,我希望看到所有处理人们在透支上赚钱的情景都处于不同的特征,即使他们可能会分享一些相同的步骤。

比其他任何事情更重要的是与理解问题的人交谈。问他们一个例子。进行对话。如果你是为自己做的话,至少和橡皮鸭说话。这是你希望未来与你的对话的替身。

如果您没有进行对话,则表示您没有进行BDD。

答案 1 :(得分:0)

据我所知,到目前为止,我的写作方式是这样的:

Scenario: Admin user should be able to assign ReadOnly role to a searched user via Change User page
    When I log in as an admin
    And I navigate to the Change User page
    And I search for the user with ID 123 
    And I click the link to user 123's Change User page
    And I select the MS distributor value from the dropdown with the Read Only role
    And I press the Save button 
    Then a new entry is saved in the database table

重点是没有必要断言下拉存在。只是使用它。如果下拉列表不存在,则方案将失败。

When(以及And之后的When)用于用户操作。 Then(以及And之后的Then}用于断言。在单个场景中有多个When / Then部分,这很好;这里没有必要。我喜欢在第二个及之后When之前的空行,以便更容易看到有多个此类部分。

其他要点:

  • 每一步都应该有一个明确的主题,意思是句子的主语:“用户”或“我”。为简洁起见,我使用“我”而不是“用户”。也可以使用“用户”。

  • 我在前两个步骤中使用When而不是Given,因为它们的措辞就好像它们是用户正在采取的一系列操作的一部分。或者,您可以编写两个步骤,好像他们说的那样已经是这种情况并将其与Given一起使用:

    Given that I am logged in as an admin
    And I am on the Change User page
    
  • “新条目保存在数据库表中”是模糊的,对于场景语言来说太过疯狂。重申具体内容,并说明商业术语中发生的事情。