zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    设置java.library.path的值(Mac/Linux/Windows)
    英特尔老款CPU支持虚拟化对照表(转)
    长城小主机GW1等型号进BIOS的设置方法
    Mac 10.12允许任何来源
    DDos与CC攻击的简单个人理解
    Mac 10.12下iTerm2使用lrzsz上传下载文件
    Mac 10.12连接iSCSI硬盘软件iSCSI Initiator X
    华为S5300系列交换机V100R005SPH021升级补丁
    华为S5300系列交换机V100R005SPH020升级补丁
    华为S5300系列交换机V100R006SPH019升级补丁
  • 原文地址:https://www.cnblogs.com/111testing/p/8978344.html
Copyright © 2011-2022 走看看