组织黄瓜测试场景和功能

Organizing cucumber test Scenarios and Features

添加新客户时,我想验证新添加的客户信息是否正确。

例如,

创建一个新客户,创建后搜索他的名字并检查详细信息是否正确。 我应该将它们都包含在同一个功能中,还是应该为添加和搜索客户创建不同的功能

Feature: Creating a new Client

    The user is
    Able to add a new Client

    Scenario: Valid client entry.The client has a username,address
        Given User is on the client page
        When When he clicks on the add new client
        Then He should see a pop up
        Then He will enter the client name,address,title,phone no and email
        And Click on the save button
Feature: Search for our newly added user

    The user will be able to search a client  
    
    Scenario: Search for our newly added client 
        Given  User is on the client page
        When   He click on the client search
        And Types the user name
        Then He should be able to match the first result
        When He clicks on the first matched result
        Then It will take him to a page with users details

 

最好分开存放。在许多项目中对我最有效的策略是,您应该将每个功能映射到需求(即高级用户故事或提供给您的需求,您可以从中导出 BDD 场景和步骤)。将每个高级需求保存在单独的功能文件中可以提高可读性和可维护性。

在这种情况下,“创建新客户”和“搜索我们新添加的客户”似乎是两个不同的requirements/user故事,最好分开管理,因为每个故事中的场景这些情况会有所不同。例如,“创建新客户端”可能有以下场景:

场景1:创建一个有效的客户端entry.The客户端有一个用户名,地址 场景 2:由于缺少信息,创建有效的客户端条目失败 情况 3:由于客户端已存在,创建有效的客户端条目失败

对于“搜索我们新添加的客户”,您还有其他场景,例如: 场景 1:使用用户名搜索新添加的用户,搜索结果应显示用户详细信息 场景 2:使用不在数据库中的用户名搜索用户,应显示空搜索结果 场景 3:使用地址详细信息搜索新添加的用户,搜索结果应显示用户详细信息 场景 4:使用不在数据库中的地址详细信息使用用户名搜索用户,应显示空搜索结果

如您所见,每个功能现在都很好地隔离并且有自己的相关场景。随着项目的增长,这些场景可能会增长,通过将每个高级需求保存在单独的功能文件中会更容易管理。

另一种对我来说非常有效的做法是将 Jira 票证(或您用来管理用户故事的任何工具)作为特征文件的前缀,因为它很容易搜索和管理。例如,您的功能应该类似于“TI1001 - 创建新客户端”和“TI1002 - 搜索我们新添加的用户”

有很多方法可以做到这一点

features
  clients
    add_new_client
    search_for_clients

如果客户是其中非常重要的一部分,我会喜欢这个 项目

features
  client_add
  client_search

但是这个可以。

重要的是要努力保持一致。

至于你的场景,尽量让它们更简单,例如

Feature: Add new clients

Background:
  Given I am allowed to add clients

Scenario: Add a client 
  Given there are no clients
  When I add a client
  Then there should be a client

你希望你的快乐之路场景如此简单,这样你就可以用悲伤的道路来扩展它们。例如

Scenario: Add a new client without an address
  Given there are no clients
  When I add a client with no address
  Then I should see that a client cannot be added without an address

就搜索而言,事情可能会变得相当复杂,因此再次从简单开始

Feature: Search for clients

Scenario: Search for client Fred
  Given there is a client Fred
  When I search clients for Fred
  Then I should see client Fred

Scenario: Search for client Fred when Fred does not exist
  Given there is a client Sue
  And there is not a client Fred
  When I search for Fred
  Then I should see a not found result

Scenario: Search for clients by postcode
Scenario: ...

对于搜索,您需要注意不要将所有时间都花在测试您的搜索引擎上(它应该已经过良好测试。

这类功能和场景是声明性的,而不是命令性的。他们陈述他们正在做什么以及为什么,但避免描述任何事情是如何完成的。 Cuking 使用声明式方法更有效。