现在越来越多的项目采用
敏捷开发模式。不管是真的敏捷,还是假的敏捷,总之接触到的国内项目基本上都是挂着羊头卖狗肉。不过不管怎么着,很多人越来越熟悉user story。其实,作为一个
测试人员,如果只会单纯的测试将来的路只会越来越窄,复合型人才才是最终的目标。
所以,一个QA,如果想将来有所成就,而不是混吃等死,最起码应该具备BA,QA,Automation Development,Configuration Admin,Network topology 等方面的相关知识。
BA(QA)书写user story =》QA 实现
测试用例 =》测试 =》发布
=》Dev 开始实现代码
所以从上可知,主要是QA在Dev完成代码开发的同时完成了测试用例,从而并发节省时间。
一般来说SDD都是以
自动化测试为住。我们就拿一个ruby+cucubmer+watir的自动化框架来作为实例。
怎么去安装这些工具很简单,我们就不多说了,自己google吧。
首先我们要理解cucubmer实现SDD的方法:
1. 书写user story 和每个story所可能出现的scenario
2. 将scenario的每个step通过正则表达式来map到自动化测试脚本
3. 实现自动化测试脚本
按上面的步骤 我们现在举一个实例
现在有一个俱乐部的会员系统,能实现的功能有:基本信息管理,积分管理,产品管理和机构管理
在基本信息管理中,我们可以开卡,删卡和改卡
那么我们就可以有如下user story
user story 1:
作为一个信息管理人员
我可以开通一个新的会员卡
user story 2:
作为一个信息管理人员
我可以修改一个指定的会员卡
user story 3:
作为一个信息管理人员
我可以删除一个指定的会员卡
我们拿user story 1来进行scenario的描述
user story 1:
作为一个信息管理人员
我可以开通一个新的会员卡
scenario 1:
假如我已经输入了新的会员卡卡号123
并且输入了卡号对应的激活码999
并且输入了初始金额500
当我点击开卡按键时
系统报告新卡正确开通
scenario 2:
假如我输入了卡号对应的激活码999
并且输入了初始金额500
当我点击开卡按键时
系统报错需要输入用户卡号
scenario 3:
假如我已经输入了新的会员卡卡号123
并且输入了初始金额500
当我点击开卡按键时
系统报错需要输入激活码
scenario 4:
假如我已经输入了新的会员卡卡号123
并且输入了卡号对应的激活码999
当我点击开卡按键时
系统报错需要输入初始金额
scenario 5:
假如我已经输入了新的会员卡卡号123
并且输入了卡号对应的激活码000
并且输入了初始金额500
当我点击开卡按键时
系统报错错误的激活码
scenario 6:
假如我已经输入了新的会员卡卡号1234
并且输入了卡号对应的激活码000
并且输入了初始金额500
当我点击开卡按键时
系统报错卡号已经使用
我们可以研究一下上面的scenario,
simple的步骤,或者说唯一的步骤有
我已经输入了新的会员卡卡号#d (#d 代表卡号)
我输入了卡号对应的激活码#d (#d 代表激活码)
我输入了初始金额#d (#d 代表金额)
我点击开卡按键
系统报告新卡正确开通
系统报错错误的激活码/需要输入初始金额/需要输入激活码/卡号已经使用/需要输入用户卡号
也就说 我只需要把以上的步骤进行整合,就能用如下语句描述
scenario 1:
假如我输入了123在会员卡卡号
并且我输入了999在激活码
并且我输入了500在初始金额
当我点击开卡按键
系统显示信息新卡正确开通
scenario 2:
假如我输入了999在激活码
并且我输入了500在初始金额
当我点击开卡按键
系统显示信息需要输入用户卡号
scenario 3:
假如我输入了123在会员卡卡号
并且我输入了500在初始金额
当我点击开卡按键
系统显示信息需要输入激活码
scenario 4:
假如我输入了123在会员卡卡号
并且我输入了999在激活码
当我点击开卡按键
系统显示信息需要初始金额
scenario 5:
假如我输入了123在会员卡卡号
并且我输入了000在激活码
并且我输入了500在初始金额
当我点击开卡按键
系统显示信息错误的激活码
scenario 6:
假如我输入了1234在会员卡卡号
并且我输入了000在激活码
并且我输入了500在初始金额
当我点击开卡按键
系统显示信息已使用的会员卡
这样,这些就可以存储在一个properties文件中
然后 我们define这些step
Given /我输入了#d在会员卡卡号/ then do
customer_number.entry(#d)
end
Given /我输入了#d在激活码/ then do
customer_actcode.entry(#d)
end
Given /并且我输入了#d在初始金额/ then do
customer_inimoney.entry(#d)
end
Given /当我点击#s按键/ then do
button(:value, #s).click
end
Given/ 系统显示信息#s/ then do
message.verify(#s)
end
这样 我们就完成了每个自然语言描述的步骤对应的自动化测试脚本的步骤
然后 我们就可以去实现这些自动化步骤,即使我们不知道最后的代码如何,但是依据我们的自动化测试框架,我们就可以开始构建这些自动化测试代码
Module New_Customer_Card
def customer_number.entry(no)
$page.text_field(:value, customer number).set(no)
end
......
def message.verify(message)
if case 1 then message == "新卡正确开通"
...
end
当然 你也可以把你的代码构建的更加简练:
在define 步骤中:
Given /我输入了#d在#s/ then do
customer.entry(#d,#s)
end
在自动化测试脚本:
def customer.entry(number_value,field_label)
$page.text_field(:vaule, field_label).set(number_value)
end
好了 现在大家大概能明白 如何使用cucumber去实现SDD了,我们接下来将会详细的进行分析和实现。