估计你早已厌烦了成百上千遍的网页点击测试,至少之前的我是这样的,那么,让自己的web测试自动化吧,本文使用Cucumber + Watir来完成自动化测试,从简单例子入手,一步一步重构成一个完整的自动化测试框架。
(一)Cucumber和Watir的关系
Cucumber和Watir可以没有任何关系,Cucumber只是一个BDD框架,而Watir只是一个Web Driver而已,两者的共同点是均属于Ruby世界。
(二)单独使用Cucumber
关于Cucumber的执行过程请参考另一篇文章:行为驱动开发: Cucumber的目录结构和执行过程。
由于Cucumber和Watir没有必然联系,因此两者均可单独使用,下面让我们用Cucumber来写一个非常简单的单元测试。 定义一个需要测试的Calculator类如下:
1classCalculator
2def add num1, num2
3num1+num2
4end
5end
1classCalculator
2def add num1, num2
3num1+num2
4end
5end
用于测试Calculator类的add方法的feature文件如下:
复制代码
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'
复制代码
对应的step文件为:
复制代码
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
复制代码
在以上的step文件中,第1,2行分别require了自定义的Calculator类和rspec(用于assertion,参考第13行的“should”), 第5行新建了一个@calculator实例变量,第9行完成两个数相加(3+5),第13行为测试断言。运行cucumber命令,输出结果如下:
复制代码
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