优化Cucumber中的复杂场景

时间:2017-05-25 06:28:31

标签: automated-tests cucumber bdd

我一直致力于自动化项目,我必须为搜索过滤器编写黄瓜测试。搜索过滤器在嵌套参数的情况下动态工作 - 根据先前的参数填充下一个参数,例如在选择“订户”下拉列表中的下一个参数是“名称”,“城市”,“网络”。同样,在选择“服务台”时,后续下拉列表中的参数为“状态”,“票号”,“受让人”。我正在使用Scenario Outline,如下所示:

Scenario Outline: As a user, I can search records
   Given I am on search page
   When I search on "<category>" and "<nestedfilter>"
   Then I see records having "<category>" category

Examples:
|category    |nestedfilter|
|Subscribers |Name        |
|Subscribers |City        |
|Subscribers |Network     |
|Service Desk|Status      |
|Service Desk|Ticket no.  | 
|Service Desk|Assignee    |

过滤器可能更复杂,因为可能有更多基于先前嵌套过滤器的嵌套过滤器。

我需要知道是否有更有效的方法来处理这个问题?例如,将数据表传递给step_definition,我不太确定。

由于

3 个答案:

答案 0 :(得分:1)

如果您确实需要保留项目的顺序,请使用数据表而不是场景大纲。

方案大纲是多种方案的简写表示法。不保证每个方案的执行。或者至少假设一个特定的执行顺序是错误的。如果使用List作为参数,则数据表中项目的顺序不会改变,因此在您的情况下更安全。

答案 1 :(得分:0)

Cucumber的一个常见错误是使用Scenario Outline和示例表来进行某种半详尽的测试。这往往会隐藏许多有关正在开发的功能的有趣内容。

我会开始为您正在使用的搜索编写单个功能,并探索这些搜索的内容以及它们的重要性。所以,如果我们从你的第一个开始,我们得到......

注意:以下所有内容均采用后台步骤Given I am searching

When I search on subscribers and name
Then I should see records for subscribers

和第二个

When I search on subscribers and city
Then I should see records for subscribers

现在很明显,这些场景存在严重缺陷,因为两种情况都在寻找相同的结果。

所以你实际测试的是那个

  1. 订阅者搜索包含名称和城市过滤器
  2. 订阅者搜索应返回订阅者结果
  3. 现在你可以重构并获得

    When I do a subscriber search
    Then I should see city, name, network filters
    
    When I do a subscriber search
    Then I should only see subscriber results
    

    注意:由于您已将场景数量从3减少到2,并且必须将搜索次数从3减少到1,因此效率已经提高了。

    现在我不知道这是否是您想要做的,但这就是您当前的情况。但是,因为您使用的是大纲和示例表,所以无法看到它。

答案 2 :(得分:0)

您有一个下拉列表和嵌套过滤器的事实是一个实现细节,它描述了用户如何尝试实现他们想要实现的目标。

如果你想到你正在尝试做什么作为系统行为的例子,而不是测试,它可能会更容易。你并不是在寻找详尽无遗的东西。您还希望您的场景具体,以便您使用实际数据和具体示例来说明它们。如果你通常会有一些典型的数据,那么使用Background进行设置是完美的。

例如,我可能会遇到以下情况:

Background:
  Given I have subscribers
  | Name | City   | Network | Status | etc.
  | Bob  | Rome   | ABC     | Alive  | ...
  | Sam  | Berlin | ABC     | Dead   | ...
  | Sue  | Berlin | DEF     | Dead   | ...
  | Ann  | Berlin | DEF     | Alive  | ...
  | Jon  | London | DEF     | Dead   | ...

Scenario: First level search

  Given I'm on the search page
  When I search for Subscribers who are in Rome
  Then I should see Bob
  But not Sue or Jon.

Scenario: Second level search

  Given I'm on the search page
  When I search for Subscribers in Berlin on the ABC network
  Then I should see Sam
  But not Sue or Ann

etc.

全系统方案应足以了解正在发生的事情。不要使用BDD进行回归。它可以帮助解决这个问题,但如果你试图覆盖每一个案例,情景会很快变得缓慢而且无法维持。在适当情况下委托进行集成和单元测试(参见&#34;测试金字塔&#34;)。