Reputation: 3
I have a single test case to test a particular scenario in a particular environment everyday, this is automatically done by a jenkins job.
Scenario Outline: Verify a user can book
Given I navigate to the "xxxxx" Page
And I set the "Location" field with "<location>" value
And I click on the "Search" button on "xxxxx" page
Then I verify the "Results" page is displayed
Examples:
| location |
|Boston |
I need to internally have a list of 20 locations and everytime the test case is executed it changes the location some how, can be ramdon or in any order, but always changing. I'm using cucumber, capybara and of course ruby
Thoughts please?
Upvotes: 0
Views: 79
Reputation: 26768
Cucumber has a lot of limitations in terms of being used as a programming language. It's easier to do this kind of thing if you move it into a ruby file (cucumber files aren't ruby).
One option would be to make a single step that calls these other steps internally. Some people might say it's better to call methods rather than steps from inside other steps, but if you already have your cases written as steps than this will be quicker to do it this way, because you don't have to rewrite the code into methods. It is a good idea to write test code in methods and then call them from steps, by the way, rather than putting all the logic in the test cases.
Cucumber file:
Scenario Outline: Verify a user can book
Given I navigate to the "xxxxx" Page
Then the search bar works
Ruby file:
Then /the search bar works/ do
locations = ["Boston", "Berkeley"].shuffle
locations.each do |location|
step %{I set the "Location" field with "#{location}" value}
step %{I click on the "Search" button on "xxxxx" page}
step %{I verify the "Results" page is displayed}
end
end
Another reason this could be considered nonidiomatic is because it's packing too much into a single test case. However I'm not sure a good way to get around this other than simply copy-pasting the original step definitions in the cucumber file with different hard-coded values.
Upvotes: 1
Reputation: 1193
It's possible
locations = ["Boston", ...]
day_of_the_month = Date.new(2001,2,3).mday
today_location = locations[(day_of_the_month - 1) % locations.count]
I use - 1
in the third line since #mday
returns integer from 1 to 31.
Upvotes: 0