qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

Ruby测试框架Rspec初探

  Rspec 是Ruby社区的主流测试框架,今天简单玩了一下,觉得有几个特性是十分值得借鉴的
  树状的用例组织结构
  我们知道很多测试用例工具,例如: testlink ,其测试用例组织是树状的,但是,我之前接触到的测试框架,例如: TestNg ,它是无法支持这种用例组织结构的
  Rspec却可以!
  简单的讲,Rspec可以仅由 describe与it 两种语句块构成
  首先声明,Rspec是基于 BDD 测试思想的,并没有传统意义上的 测试用例(testcase) 的概念
  describe可以层层嵌套describe及it,从而构成树状结构
  it语句块是这棵树的叶子节点,功能上接近于测试用例这个概念,用例断言(Assertion)一般就在这里面
  还是看示例吧
  先看代码,描述的是一盏飞利浦台灯在出厂之路上所经历的种种测试
# encoding: utf-8
describe 'PHILIPS台灯 - 出厂质检' do
# Rspec是一门测试DSL 但其中可以夹杂原生Ruby代码 比如这个echo()函数
def echo(input)
puts input
end
# Rspec与TestNG/JUnit一样 也有类似before/after的hook
# 其作用范围为其所在的describe
# before在it语句块之前执行
before(:each) do
echo '--- 开始本次测试 ---'
end
# after在it语句块之后执行
after(:each) do
echo "--- 结束本次测试 ---\n\n"
end
it "冒烟测试(插电源 - 开开关 - 灯亮了)" do
echo '插电源 - 开开关 - 灯亮了'
end
# describe可以与it语句块并列 例如 "冒烟测试" 与 "正向测试"
# describe可以层层嵌套 从测试用例组织的角度讲 就是构成了一个树状结构
describe '正向测试' do
describe '发光性' do
# it语句块接近于传统意义上的testcase
it '亮度可以调节' do
echo 'min-1-2-3-4-5-max'
end
it '最大亮度不得超过10000' do
echo 'no more than 1w'
end
it "只能发射白色光" do
echo 'white light'
end
end
describe '节能性' do
it "符合国家节能标准" do
echo '符合国标'
end
it "每小时耗电不多于0.000001度" do
echo '0.000001kwh'
end
end
end   describe '异常测试' do
# 这里的before hook就只能作用在'异常测试'describe之内了
before(:each) do
echo '--- 准备一盏全新台灯 ---'
end
describe '破坏性测试' do
it '榔头砸不坏' do
echo '榔头砸不坏'
end
it '泡水里不短路' do
echo '泡水里不短路'
end
end
describe '耐久性测试' do
it '连续使用七天七夜不灭' do
echo '连续使用七天七夜不灭'
end
it '风吹雨打也不能阻止我发光' do
# 对于未完成的用例 可以先把描述写下来 具体的用例里面使用pending关键字占位
pending '这个用例待完成'
end
end
end
end
  再看一下运行结果报表,两相对照,用例的树状结构一目了然
  用例命名简单化,且有实际含义
  之前写用例,用例命名是一个十分关键但也很头疼的工作,大家懂得
  而Rspec本质上是一门 DSL (Domain Specific Language),实际上,从上面的示例代码和运行结果截屏中大家已经可以看到,在Rspec中是无须给测试用例命名的,或者说,用例的命名可以非常书面化,一般就是用例意图的简单描述(即:describe及it关键字后面跟着的描述性语句)
  支持未完成的用例先占位
  不解释,还是看图
  对于未完成的用例,可以先把描述写下来,具体的用例步骤里面使用pending关键字占位
  it '风吹雨打也不能阻止我发光' do
  # 对于未完成的用例 可以先把描述写下来 具体的用例里面使用pending关键字占位
  pending '这个用例待完成'
  end
  反映在用例报表中,这个用例就被标志为黄色了 树状的用例组织结构/用例命名简单化/支持未完成的用例先占位,这三个特性使得使用Rspec编写测试用例时,思路可以非常自由,开阔,很像是在写 markdown ,来不及的地方,也可以先使用 pending 占位
  写完以后,跑一遍用例,生成的html报表可读性很强,可以直接用于策划,开发,测试之间的沟通(必杀技,有木有!)
  其它不错的特性
  Rspec是一门DSL,但它仍旧支持在用例中参杂原生Ruby代码,如下所示
  Rspec与TestNG/JUnit一样,也有类似before/after的hook(如下所示),其作用范围是当前的describe
  由于describe允许层层嵌套,因此,Rspec中的before/after的作用域也是层层嵌套的,比之TestNG的Before/After,灵活性大大超过
  describe 'PHILIPS台灯 - 出厂质检' do
# Rspec是一门测试DSL 但其中可以夹杂原生Ruby代码 比如这个echo()函数
def echo(input)
puts input
end
# Rspec与TestNG/JUnit一样 也有类似before/after的hook
# 其作用范围为其所在的describe
# before在it语句块之前执行
before(:each) do
echo '--- 开始本次测试 ---'
end
# after在it语句块之后执行
after(:each) do
echo "--- 结束本次测试 ---\n\n"
end

posted on 2013-12-17 09:10 顺其自然EVO 阅读(588) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜