Data-Driven Testing in TestWise
Data-Driven Testing means tests' input and output are driven from external sources, quite commonly in Excel or CSV files. For example, if you have a list of user logins with different roles, and login process is the same but with different assertions. In this case, you can extract the pure test data out in an Excel spreadsheet, use the same test script to load test data and execute one by one. Because RWebSpec/Watir tests are in fact Ruby scripts, it is quite easy to do so.
For impatient readers, you can see and run the sample by opening the demo project C:\Program Files\TestWise\samples\demo\demo.tpr in iTest, run test script file: database_spec.rb.
The Excel file: C:\Program Files\TestWise\samples\demo\testdata\users.xls contains 3 username-password combination.
| DESCRIPTION | LOGIN | PASSWORD | EXPECTED_TEXT | 
|---|---|---|---|
| Valid Login | agileway | agileway | Login successful! | 
| User name not exists | nonexists | smartass | Login is not valid | 
| Password not match | agileway | badpass | Password is not valid | 
Test Script
    require 'rwebspec'
require 'spreadsheet'
spec "Use Excel for data driven web tests" do
  include RWebSpec::RSpecHelper
  before(:all) do
    open_browser("http://travel.agileway.net")
    # Load Excel file
    excel_file = File.join(File.dirname(__FILE__), "testdata", "users.xls")
    excel_book = Spreadsheet.open excel_file
    @excel_sheet1 = excel_book.worksheet "Users" # or use 0 for first sheet
  end
  before(:each) do
  end
  after(:all) do
    close_browser unless debugging?
  end
  scenario "Load user list from an Excel spreadsheet to test multiple user logins" do
    # Iterate each row in the spreadsheet, use data for test scripts
    @excel_sheet1.each_with_index do |row, idx|
      next if idx == 0 # ignore first row
      login, password, expected_text = row[1], row[2], row[3]
      goto_page("/")
      enter_text("userName", login)
      enter_text("password", password)
      click_button("Sign In")
      page_text.should include(expected_text)
      failsafe{ click_link("SIGN-OFF") } # if logged in OK, try log out
    end
  end
end
  
