自动化用例的自动生成技术(2)
发表于:2012-12-27来源:淘测试作者:雷藏点击数:
标签:自动化用例
比如,我们想要获取user的预期取值范围,代码可以这么写: public BaseUserDO getExpectUser(String nick){ //给取值范围里的nick分组,只有在这个组里面的用户才存在
比如,我们想要获取user的预期取值范围,代码可以这么写:
public BaseUserDO getExpectUser(String nick){
//给取值范围里的nick分组,只有在这个组里面的用户才存在,否则均返回null
String[] exsitUserNicks= {Nick.b2bNick.value, Nick.subB2BNick.value};
if(ArrayUtil.contains(exsitUserNicks, nick)){
//根据nick查出用户信息返回
ResultDO callback = uicReadServiceClient.getUserInfoByNick(nick);
Assert.assertTrue(callback.getErrMsg(), callback.isSuccess());
Assert.assertNotNull(callback.getModule());
return callback.getModule();
}
return null;
}
代码中“Nick.b2bNick.value”,Nick是一个枚举,方便输入数据值域归类:
public enum Nick{
blankNick(""),
nullNick(null),
notExsitNick("1233211"),
tbNick("leizang_test"),
b2bNick("leizang_btob_1"),
subB2BNick("leizang_btob_1:subnick01");
String value;
Nick(String value){
this.value= value;
}
}
类似地,我们需要编写如下方法:
中间对象 |
被依赖对象 |
编写获取方法(省去类型) |
user |
nick |
getExpectUser(nick) |
ruleCode |
user, wwLimitData |
getExpectRuleCode(user, wwLimitData) |
isFrozen |
user, wwLimitData |
getExpectIsFrozen(user, wwLimitData) |
suspended |
user, isFrozen |
getExpectSuspended(user, isFrozen) |
punishData |
user, punishData, suspended |
getExpectPunishData(user, punishData, suspended) |
mmpData |
user, mmpData |
getExpectMmpData(user, mmpData) |
这样,我们产出结果的预期数据就有了,最终的比对形式应该是这样子,resultMap为接口返回实际结果:
public void verify(String nick, String wwLimitData,
String punishData, String mmpData, Map resultMap){
BaseUserDO expectUser= getExpectUser(nick);
String expectRuleCode= getExpectRuleCode(expectUser, wwLimitData);
boolean expectIsFrozen= getExpectIsFrozen(expectUser, wwLimitData);
String expectSuspended= getExpectSuspended(expectUser, expectIsFrozen);
String expectPunishData= getExpectPunishData(expectUser, punishData, expectSuspended);
String expectMmpData= getExpectMmpData(expectUser, mmpData);
Assert.assertEquals("user", expectUser, resultMap.get("user"));
Assert.assertEquals("ruleCode", expectRuleCode, resultMap.get("ruleCode"));
Assert.assertEquals("suspended", expectSuspended, resultMap.get("suspended"));
Assert.assertEquals("punishData", expectPunishData, resultMap.get("punishData"));
Assert.assertEquals("mmpData", expectMmpData, resultMap.get("mmpData"));
}
到这里我们已经解决了用例自动生成的两个难点:输入数据、预期数据。如果你是个容易满足的人,那么上面所述的已经够用了。但如果你是个贪得无厌的人,那么肯定还记得我们上面留下的问题:1080个用例,仅仅一个小功能就会生成如此多的用例,要是把产品线如此复杂的功能都拿来用那岂不是要把硬盘玩爆?更谈不上执行了。当然不能这么玩,前面我们已经说了,1080个用例里面是有水分的,场景重复的太多,得兽兽身啊!好吧,下面就开始我们的减肥之旅。
3、用例瘦身
根据依赖的传递性,找出对原始数据的依赖:
中间对象 |
被依赖对象 |
被依赖原始对象 |
user |
nick |
nick |
ruleCode |
user, wwLimitData |
nick, wwLimitData |
isFrozen |
user, wwLimitData |
nick, wwLimitData |
suspended |
user, isFrozen |
nick, wwLimitData |
punishData |
user, punishData, suspended |
nick, punishData, wwLimitData |
mmpData |
user, mmpData |
nick, mmpData |
过滤中间过程对象,如isFrozen,子集合并,最后,整理出“输出对象”对“原始数据”的依赖关系:
原文转自:http://www.ltesting.net