简体   繁体   中英

Is there anyway I can run the same test case but with different values everytime?

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?

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM