自動化用例的自動生成技術(2)
發表于:2013-01-18來源:淘測試作者:雷藏點擊數:
標簽:自動化用例
比如,我們想要獲取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.taobaotest.com/blogs/2301