How do I re-run a cucumber scenario outline with d

2020-03-26 03:50发布

I have a cucumber scenario outline for testing a webservice that is similar to:

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    |

which works fine, however I want to re-run the same scenario outline and scenarios for each of our webservices. Basically, I would like to add another Scenarios block like:

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                   |

and have cucumber do a cross join between the two tables.

Even better would be a way to specify the "api" table in a way to have it apply to all scenarios in the feature.

Is there a way to implement this in cucumber?

标签: cucumber
2条回答
成全新的幸福
2楼-- · 2020-03-26 04:33

you can use table , but table only iterates single step over number of rows , so I converted two steps into one. code is as follows :

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                   |

Second is conventional way which you might be using

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                     |
查看更多
我命由我不由天
3楼-- · 2020-03-26 04:34

Cucumber doesn't really support 'iteration' over scenarios. Your only 'native' option really is to do the 'cross join' yourself, by hand.

Where I work we have a very similar situation, and we run Cucumber 8 separate times and then aggregate the results, which requires a lot of plumbing and the performance is terrible.

I recently put together a gem intended to help with this type of problem, it's very rough and I haven't personally used it in anger, but it may help you, take a look at https://github.com/jmerrifield/cuke_iterations. I'd be happy to help you get up and running with it if you think it might be of use.

查看更多
登录 后发表回答