自動化用例的自動生成技術(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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97