任务:接口测试中 预期结果(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"同样可以达到对比结果的效果。
当然,每个人的接口测试结果对比要求严格程度不一样,上面的方法只是一种取巧的方式。