自动化用例的自动生成技术

发表于:2012-12-27来源:淘测试作者:雷藏点击数: 标签:自动化用例
闲话少说,直奔主题。 先来看看用例构成:输入数据(包括方法入参,数据库状态)+ 方法调用+ 预期结果+ 结果比对 而这里面“方法调用”,“结果比对”都是固定的可以封装起来,所以用例的核心就是数据:输入数据,预期数据。只要解决了这两个问题所有
  闲话少说,直奔主题。
  先来看看用例构成:输入数据(包括方法入参,数据库状态)+ 方法调用+ 预期结果+ 结果比对
  而这里面“方法调用”,“结果比对”都是固定的可以封装起来,所以用例的核心就是数据:输入数据,预期数据。只要解决了这两个问题所有问题就解决了。
  空说无凭,将这两天做的一个日常作为实例来说明问题。
  需求说明:
  根据B2B用户nick,获取用户信息(user),用户旺旺处罚规则code(ruleCode),用户状态(suspended),处罚中心相关数据(punishData),如果是子帐号还需要获取子帐号相关信息(mmpData)
  详细设计流程图如下:
  1、解决输入数据问题
  第一步,对上述详细设计进行分析,整理出输入、输出,这里的输入包括“方法调用入参”,“数据库数据”:
输入数据 入参nick
旺旺规则数据wwLimitData
用户状态suspended
处罚中心数据punishData
子帐号数据mmpData
输出数据 用户信息user
旺旺ruleCode
用户suspended
处罚数据punishData
子帐号数据mmpData
  第二步,整理出所有输入数据的取值范围,这里就要把我们生平所学的所有业务知识、测试理论全都用上,什么等价类啊,边界值啊,随便吧,总之八仙过海各显神通,不过这里数据取的不好是会影响测试用例质量的哦!(PS:数据库字段数据的取值范围有个偷懒的办法,可以去线上库distinct一下,立马就有了):
输入数据 类型 取值范围(包含异常取值) 取值个数
nick String “”,空串
null
“1233211”,不存在的用户nick
“leizang_test”, 淘宝帐号
“leizang_btob_1”,B2b帐号
“ leizang_btob_1:subnick01”, 子帐号
6
suspended Integer 0,1,2,3,-9 5
wwLimitData String null
“true”
“OK_WW”
“ LIMIT_WW”
“ {"ruleCode":"","wwuic-limit":"OK_WW"}”
“ {"ruleCode":"xxxx","wwuic-limit":"LIMIT_WW"}”
6
punishData String null
"UEsDBBQACAAIAGL/Ua61XfDlBLBwi2PNplVAAAAPwDAAA="
2
mmpData String null
“{"accountStatus":-1}”
“{"accountStatus":3,"owedStatus":-1}”
3
  一旦输入范围确定,用例的输入就好解决了,最笨的办法就是把所有的数据排列组合一遍,肯定能测试到所有的场景,只是用例的数量庞大一点而已,排列组合后的用例个数为:6*5*6*2*3= 1080个,哇靠,这么多啊,果然不是人能做出来的,看你以后老板还敢不敢要求脚本数量。不过呢,这里面水分很多,有很多重复场景,那有效场景到底有多少呢?我们先放一放,容后再谈,先来解决一下预期数据的准备问题。
  2、解决预期数据问题
  梳理流程图,整理出依赖关系,“A-- > B”表示A依赖于B:
  整理出的依赖关系如下:
中间对象 被依赖对象
user nick
ruleCode user, wwLimitData
isFrozen user, wwLimitData
suspended user, isFrozen
punishData user, punishData, suspended
mmpData user, mmpData
  这样,我们可以针对每一个“中间对象”(没想到好名字,姑且先这么叫)编写一个获取中间对象取值范围的方法。注意这里用词是“取值范围”,跟开发的程序逻辑是不一样的,是我们根据“输入的数据”并按照“业务规则”得出的,我们直接用数据说话,那么到底该如何编写呢?接着往下看。

原文转自:http://www.ltesting.net