httpclient接口测试完整用例以及获取信息的方法

原文地址https://blog.csdn.net/fhaohaizi/article/details/78088075

原文地址https://blog.csdn.net/fhaohaizi/article/details/79030397

---------------------------------------非常好的自动化博客-------------------------------------

原文地址https://blog.csdn.net/fhaohaizi/article/category/7084915

原文地址https://blog.csdn.net/fhaohaizi/article/category/6772734

本人是在使用httpclient做接口测试的过程中,总结了一些方法,写了一个基本的测试框架。用例的管理和测试结果的保存都放在数据库中,今天算是基本完成和健全了用例的模版。分享出来供大家参考。

[java]  view plain  copy
 
  1. public void case_shequ_topic_cattlist() {  
  2.     String apiName = "shequ_topic_cattlist";  
  3.     mark = getMark();// 获取时间戳作为测试标记  
  4.     List<Map<String, String>> date = LocalMySql.getInstance().getCaseFromMySql(apiName);// 数据库读取用例  
  5.     for (int i = 0; i < date.size(); i++) {// 遍历执行用例  
  6.         int result = 0;  
  7.         String expect_value1 = "", actual_value1 = "", expect_value2 = "", actual_value2 = "", params = "",  
  8.                 actual_key1 = "", actual_key2 = "", actual_key3 = "", expect_value3 = "", actual_value3 = "";  
  9.         Map<String, String> use = date.get(i);// 获取单个用例  
  10.         String case_id = use.get("case_id");  
  11.         /* 
  12.          * 获取检查点的key和expect_value 如果有1个检查点就写一个,兼容多个 getresult方法兼容验证点不存在情况 
  13.          */  
  14.         expect_value1 = use.get("verify_value1");// 获取验证点期望值  
  15.         expect_value2 = use.get("verify_value2");// 获取验证点期望值  
  16.         expect_value3 = use.get("verify_value3");// 获取验证点期望值  
  17.         actual_key1 = use.get("verify_key1");//获取检查点key  
  18.         actual_key2 = use.get("verify_key2");//获取检查点key  
  19.         actual_key3 = use.get("verify_key3");//获取检查点key  
  20.         params = use.toString();// 记录传入参数  
  21.         JSONObject response = shequ_topic_cattlist(use);// 获取相应结果  
  22.         actual_value1 = getDateValue(response, actual_key1);//获取验证点实际值  
  23.         actual_value2 = getDateValue(response, actual_key2);//获取验证点实际值  
  24.         actual_value3 = getDateContains(response, actual_key3, expect_value3);//获取验证点实际值,此为包含验证  
  25.         result = getResult(expect_value1, actual_value1, expect_value2, actual_value2) ? 1 : 2;// 获取测试结果,1为通过,2为失败  
  26.         LocalMySql.getInstance().saveApiTestResult(case_id, mark, result, apiName, expect_value1, actual_value1,  
  27.                 expect_value2, actual_value2, expect_value3, actual_value3, params);// 写入数据库  
  28.     }  
  29.     LocalMySql.getInstance().addApiTestResult(apiName, mark, test_mark);//统计本次运行所有用例结果  
  30. }  

获取响应的方法封装:

[java]  view plain  copy
 
  1. public JSONObject shequ_topic_cattlist(Map<String, String> apiCase) {  
  2.         String uri = host + "/shequ/topic/cattlist";  
  3.         deleteMap(apiCase);  
  4.         JSONObject jsonObject = new JSONObject(apiCase);  
  5.         HttpGet httpGet = getHttpGet(uri, jsonObject);  
  6.         JSONObject response = getHttpResponseEntityByJson(httpClient, httpGet);  
  7.         return response;  
  8.     }  


模版做好了,其他的用例直接可以复用,就是改一下接口名和方法名的问题,看起来非常整齐。

使用httpclient发送请求时,获取信息的方法

本人在使用httpclient做接口自动化测试的过程中,需要在每次请求的时候把这个请求保存到数据库中,以便重新发送这个请求。而且得把请求的类型、host地址、接口名、参数分开保存,所以自己单独写了一个方法,在每次使用client发送请求之前,把请求的信息保存提取出来,兼容了get和post,传参类型为HttpRequestBase,中间涉及到一次强转。分享代码,供大家参考。

[java]  view plain  copy
 
  1. /** 
  2.  * 封装获取请求的各种信息的方法 
  3.  *  
  4.  * @param httpRequestBase 
  5.  *            传入请求对象 
  6.  * @return 返回一个map,包含api_name,host_name,type,method,params 
  7.  */  
  8. public Map<String, String> getRequestInfo(HttpRequestBase request) {  
  9.     Map<String, String> info = new HashMap<>();// 新建map保存信息  
  10.     String method = request.getMethod();// 获取method  
  11.     info.put("method", method);  
  12.     String uri = request.getURI().toString();// 获取uri  
  13.     info.put("uri", uri);  
  14.     String url = uri;  
  15.     if (uri.contains("?")) {// 获取url,如果是get请求,先截取  
  16.         url = uri.substring(0, uri.indexOf("?"));  
  17.     }  
  18.     String one = url.substring(url.indexOf("//") + 2);// 删除掉http://  
  19.     String api_name = one.substring(one.indexOf("/"));// 获取接口名  
  20.     info.put("api_name", api_name);  
  21.     String host_name = one.substring(0, one.indexOf("/"));// 获取host地址  
  22.     info.put("host_name", host_name);  
  23.     String type = url.substring(0, url.indexOf("//") - 1);// 获取协议类型  
  24.     info.put("type", type);  
  25.     String params = null;// 参数  
  26.     if (method.equals("GET")) {  
  27.         params = uri.substring(uri.indexOf("?") + 1, uri.length());  
  28.     } else if (method.equals("POST")) {  
  29.         HttpPost httpPost = (HttpPost) request;// 强转httppost请求  
  30.         HttpEntity entity = httpPost.getEntity();// 获取实体  
  31.         try {  
  32.             params = EntityUtils.toString(entity);// 解析实体  
  33.             EntityUtils.consume(entity);// 确保实体消耗  
  34.         } catch (ParseException e) {  
  35.             output("解析响应实体异常!", e);  
  36.         } catch (IOException e) {  
  37.             output("解析响应实体时java IO 异常!", e);  
  38.         } catch (UnsupportedOperationException e) {  
  39.             params = "entity类型:" + entity.getClass();  
  40.             output("不被支持的entity 类型!", e);  
  41.         }  
  42.     }  
  43.     info.put("params", params);  
  44.     return info;  
  45. }  

猜你喜欢

转载自www.cnblogs.com/111testing/p/8978344.html
今日推荐