估計(jì)你早已厭煩了成百上千遍的網(wǎng)頁(yè)點(diǎn)擊測(cè)試,至少之前的我是這樣的,那么,讓自己的web測(cè)試自動(dòng)化吧,本文使用Cucumber + Watir來(lái)完成自動(dòng)化測(cè)試,從簡(jiǎn)單例子入手,一步一步重構(gòu)成一個(gè)完整的自動(dòng)化測(cè)試框架。
(一)Cucumber和Watir的關(guān)系
Cucumber和Watir可以沒(méi)有任何關(guān)系,Cucumber只是一個(gè)BDD框架,而Watir只是一個(gè)Web Driver而已,兩者的共同點(diǎn)是均屬于Ruby世界。
(二)單獨(dú)使用Cucumber
關(guān)于Cucumber的執(zhí)行過(guò)程請(qǐng)參考另一篇文章:行為驅(qū)動(dòng)開(kāi)發(fā): Cucumber的目錄結(jié)構(gòu)和執(zhí)行過(guò)程。
由于Cucumber和Watir沒(méi)有必然聯(lián)系,因此兩者均可單獨(dú)使用,下面讓我們用Cucumber來(lái)寫(xiě)一個(gè)非常簡(jiǎn)單的單元測(cè)試。 定義一個(gè)需要測(cè)試的Calculator類如下:
1classCalculator
2def add num1, num2
3num1+num2
4end
5end
1classCalculator
2def add num1, num2
3num1+num2
4end
5end
用于測(cè)試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ù)制代碼
對(duì)應(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行新建了一個(gè)@calculator實(shí)例變量,第9行完成兩個(gè)數(shù)相加(3+5),第13行為測(cè)試斷言。運(yùn)行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