任務:接口測試中 預期結果(map形式)中某個鍵的值沒有必要寫的完整,也許只是實際響應(map或json轉map形式)中對應鍵的值的一部分即可
解決方案:
1 //判斷兩個hashmap相同鍵的值是否包含--Auther:kuzaman 2 public boolean verifyinclude(Map<String, String> actualMap, 3 Map<String, String> exceptmap) { 4 //預期與實際結果map長度不同,則兩者一定不同 5 if (actualMap.size() != exceptmap.size()){ 6 return false; 7 } 8 for(String key : exceptmap.keySet()){ 9 if((actualMap.get(key)).indexOf(exceptmap.get(key)) == -1){ 10 return false; 11 } 12 } 13 //預期與實際結果map長度相同, 14 return true; 15 }
測試程序:
1 public static void main(String[] args) { 2 testc = new test(); 3 //測試判斷map相同鍵的值是否包含的函數verifyinclude 4 boolean flag; 5 Map<String, String> actualMap = new HashMap<String, String>(); 6 Map<String, String> exceptmap = new HashMap<String, String>(); 7 actualMap.put("code", "1001"); 8 actualMap.put("err", "12345"); 9 exceptmap.put("code", "1001"); 10 exceptmap.put("err", "123"); 11 //size()相等且值包含,flag=ture 12 flag = c.verifyinclude(actualMap, exceptmap); 13 System.out.println(flag); 14 //size()不相等,flag=false 15 actualMap.put("co", "1001"); 16 flag = c.verifyinclude(actualMap, exceptmap); 17 System.out.println(flag); 18 //size()相等但值不包含,flag=false 19 actualMap.remove("co"); 20 actualMap.put("err", "1sd23"); 21 flag = c.verifyinclude(actualMap, exceptmap); 22 System.out.println(flag); 23 }
測試結果:
1 true 2 false 3 false
實際場景:
響應:
resp={"code":"1001","err":"CoinsRecordReq is invalid, param\u003dCoinsPayRecordReq [userKey\u003d, appIds\u003d[5000004575, 5000004571, 5000004572, 5000004573, 5000004574], startDate\u003d2015-09-09, endDate\u003d2018-09-02]"}
無需把預期結果map的"err"的值也寫這么完整,只需要寫"CoinsRecordReq is invalid"同樣可以達到對比結果的效果。
當然,每個人的接口測試結果對比要求嚴格程度不一樣,上面的方法只是一種取巧的方式。