如何重新运行具有不同参数的黄瓜场景轮廓?

时间:2011-09-07 14:40:21

标签: cucumber

我有一个用于测试类似于以下网络服务的黄瓜场景大纲:

Scenario Outline: Check the limit functionality
  When I GET "/api/activity-schedule-items.xml" with parameters {<filter>}
  Then the xml attribute "total-count" is "<count>"

  Scenarios:
  | filter        | count |
  | 'limit' => 0  | 0     |
  | 'limit' => 2  | 2     |
  | 'limit' => 2  | 2     |
  | 'limit' => -1 | 15    |

工作正常,但是我想为每个web服务重新运行相同的场景大纲和场景。基本上,我想添加另一个Scenarios块,如:

Scenario Outline: Check the limit functionality
  When I GET "<api>" with parameters {<filter>}
  Then the xml attribute "total-count" is "<count>"

  Scenarios:
  | filter        | count |
  | 'limit' => 0  | 0     |
  | 'limit' => 2  | 2     |
  | 'limit' => 2  | 2     |
  | 'limit' => -1 | 15    |

  Scenarios:
  | api                              |
  | /api/activity-schedule-items.xml |
  | /api/activity-schedules.xml      |
  | /api/tasks.xml                   |

并让黄瓜在两个表之间进行交叉连接。

更好的方法是指定“api”表格,使其适用于该功能中的所有场景。

有没有办法在黄瓜中实现这个?

2 个答案:

答案 0 :(得分:4)

Cucumber并不真正支持场景中的'迭代'。你唯一的“本地”选择就是自己动手做“交叉加入”。

在我工作的地方,我们有一个非常相似的情况,我们分别运行Cucumber 8,然后汇总结果,这需要大量的管道,性能很糟糕。

我最近整理了一个宝石,旨在帮助解决这类问题,它非常粗糙,我没有亲自在愤怒中使用它,但它可以帮到你,看看https://github.com/jmerrifield/cuke_iterations。如果您认为它可能有用,我会很乐意帮助您启动并运行它。

答案 1 :(得分:3)

你可以使用表,但是表只迭代一行数,所以我将两步转换成一步。代码如下:

Scenario Outline: Check the limit functionality
  When I GET api with following parameters Then the xml attribute "total-count" is as follows
    | 'limit' => 0  | 0     | <api> |
    | 'limit' => 2  | 2     | <api> |
    | 'limit' => 2  | 2     | <api> | 
    | 'limit' => -1 | 15    | <api> |

    Examples:
     |         api                     |
     |/api/activity-schedule-items.xml |
     |/api/activity-schedules.xml      |
     |/api/tasks.xml                   |

其次是您可能正在使用的传统方式

Scenario Outline: Check the limit functionality
  When I GET "<api>" with parameters {<filter>}
  Then the xml attribute "total-count" is "<count>"

    Examples:
    | filter        | count |           api                    |
    | 'limit' => 0  | 0     | /api/activity-schedule-items.xml |
    | 'limit' => 2  | 2     | /api/activity-schedule-items.xml |
    | 'limit' => 2  | 2     | /api/activity-schedule-items.xml |
    | 'limit' => -1 | 15    | /api/activity-schedule-items.xml |
    | 'limit' => 0  | 0     | /api/activity-schedules.xml      |
    | 'limit' => 2  | 2     | /api/activity-schedules.xml      |
    | 'limit' => 2  | 2     | /api/activity-schedules.xml      |
    | 'limit' => -1 | 15    | /api/activity-schedules.xml      |
    | 'limit' => 0  | 0     | /api/tasks.xml                 |
    | 'limit' => 2  | 2     | /api/tasks.xml                     |
    | 'limit' => 2  | 2     | /api/tasks.xml                     |
    | 'limit' => -1 | 15    | /api/tasks.xml                     |