估計你早已厭煩了成百上千遍的網(wǎng)頁點擊測試,至少之前的我是這樣的,那么,讓自己的web測試自動化吧,本文使用Cucumber + Watir來完成自動化測試,從簡單例子入手,一步一步重構(gòu)成一個完整的自動化測試框架。
(一)Cucumber和Watir的關(guān)系
Cucumber和Watir可以沒有任何關(guān)系,Cucumber只是一個BDD框架,而Watir只是一個Web Driver而已,兩者的共同點是均屬于Ruby世界。
(二)單獨使用Cucumber
關(guān)于Cucumber的執(zhí)行過程請參考另一篇文章:行為驅(qū)動開發(fā): Cucumber的目錄結(jié)構(gòu)和執(zhí)行過程。
由于Cucumber和Watir沒有必然聯(lián)系,因此兩者均可單獨使用,下面讓我們用Cucumber來寫一個非常簡單的單元測試。 定義一個需要測試的Calculator類如下:
1classCalculator
2def add num1, num2
3num1+num2
4end
5end
1classCalculator
2def add num1, num2
3num1+num2
4end
5end
用于測試Calculator類的add方法的feature文件如下:
復(fù)制代碼
1Feature: Unit testforCalculator
2
3Scenario: Add two numbers
4Given I have a calculator created
5WhenI add '3' and '5'
6ThenI should get the result of '8'
復(fù)制代碼
對應(yīng)的step文件為:
復(fù)制代碼
1require File.join(File.dirname(__FILE__), "../calculator")
2require 'rspec'
3
4Given /^I have a calculator created$/do
5@calculator = Calculator.new
6end
7
8When/^I add '([^"]*)' and '([^"]*)'$/do|num1, num2|
9@result = @calculator.add(num1.to_i, num2.to_i)
10end
11
12Then/^I should get the result of '([^"]*)'$/ do |expected_result|
13@result.should == expected_result.to_i
14end
復(fù)制代碼
在以上的step文件中,第1,2行分別require了自定義的Calculator類和rspec(用于assertion,參考第13行的“should”), 第5行新建了一個@calculator實例變量,第9行完成兩個數(shù)相加(3+5),第13行為測試斷言。運行cucumber命令,輸出結(jié)果如下:
復(fù)制代碼
1Feature: Unit testforCalculator
2
3Scenario: Add two numbers # features/Calculator.feature:4
4Given I have a calculator created # features/step_definitions/calculator_step.rb:4
5WhenI add '3' and '5' # features/step_definitions/calculator_step.rb:8
6ThenI should get the result of '8' # features/step_definitions/calculator_step.rb:12
7
81 scenario (1 passed)
93 steps (3 passed)
100m0.002s