原文地址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做接口测试的过程中,总结了一些方法,写了一个基本的测试框架。用例的管理和测试结果的保存都放在数据库中,今天算是基本完成和健全了用例的模版。分享出来供大家参考。

  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. }

获取响应的方法封装:

  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,中间涉及到一次强转。分享代码,供大家参考。

  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. }

httpclient接口测试完整用例以及获取信息的方法的更多相关文章

  1. SQL SERVER获取信息的方法

    获取数据库的表 SELECT obj.name tablename, schem.name schemname, CAST ( CASE ) ) END AS BIT) HasPrimaryKey f ...

  2. AppCan中两种获取信息的方法

    <div id="newsInfo">正在加载...</div> 1.JSON格式: [{'R': '1','NOTI_ID': '9','NOTI_TIT ...

  3. 接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析

    (最近学的都是很基础的接口测试,都是基于UI界面可见的接口,就是发请求,接收响应,分析返回的结果,校验,对共通模块进行封装,仅此而已,其实做自动化的思路基本都是如此,UI也是.) 现在开始用httpC ...

  4. Android获取位置信息的方法总结

    1.位置服务的简介:位置服务,英文翻译为Location-Based Services,缩写为LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综 ...

  5. JavaScript获取客户端计算机硬件及系统等信息的方法

    JavaScript获取客户端计算机硬件及系统等信息的方法 JavaScript 获取客户端计算机硬件及系统信息 通过WMI来实现获取客户端计算机硬件及系统信息: function getSysInf ...

  6. (转)Python新手写出漂亮的爬虫代码2——从json获取信息

    https://blog.csdn.net/weixin_36604953/article/details/78592943 Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬 ...

  7. PHP版微信第三方实现一键登录及获取用户信息的方法

    本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请. 一开始你需要进入微信 ...

  8. ph模拟登录获取信息

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  9. HR开发 获取信息类型数据

    1.PNP逻辑数据库. LOOP获取信息类型数据. TABLES: PERNR . , . START-OF-SELECTION. GET PERNR . LOOP AT P0000 WHERE .. ...

随机推荐

  1. 改善C#程序的建议5:引用类型赋值为null与加速垃圾回收

    http://www.cnblogs.com/luminji/archive/2011/04/07/2007205.html 在标准的Dispose模式中(见前一篇博客“C#中标准Dispose模式的 ...

  2. HTML&CSS精选笔记_浮动与定位

    浮动与定位 元素的浮动 元素的浮动属性float 什么是浮动? 元素的浮动是指设置了浮动属性的元素会脱离标准文档流的控制,移动到其父元素中指定位置的过程. 如何定义浮动? 在CSS中,通过float属 ...

  3. try catch finally的执行顺序

    1.将预见可能引发异常的代码包含在try语句块中. 2.如果发生了异常,则转入catch的执行.catch有几种写法: catch 这将捕获任何发生的异常. catch(Exception e) 这将 ...

  4. 九度 1534:数组中第K小的数字(二分法变形)

    题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C.譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6].现在给你数组A和B,求 ...

  5. 如何提高AJAX客户端响应速度

    AJAX的出现极大的改变了Web应用客户端的操作模式,它使的用户可以在全心工作时不必频繁的忍受那令人厌恶的页面刷新.理论上AJAX技术在很大的程度上可以减少用户操作的等待时间,同时节约网络上的数据流量 ...

  6. poj_3283 trie树

    题目大意 将一副牌进行编号,四种花色分别标记为'C'.'D'.'H'.'S',数值标记为'A'.'1'.'2'.'3'.'4'.'5'.'6'.'7'.'8'.'9'.'10'.'J'.'Q'.'K' ...

  7. xcode 4.6 破解及真机调试

    从安卓到IOS,从  eclipse 到xcode跨度还是比较大的.在研究的过程中发现,许多时候不仅仅是C,C++,JAVA和OBJECT-C的区别,相对于编程语言来说,操作习惯和开发工具带来的困惑要 ...

  8. java高级---->Thread之FutureTask的使用

    FutureTask类是Future 的一个实现,并实现了Runnable,所以可通过Excutor(线程池) 来执行,也可传递给Thread对象执行.今天我们通过实例来学习一下FutureTask的 ...

  9. MQTT-SN协议乱翻之消息格式

    前言 紧接着上篇初步介绍,本文为第二篇,主要梳理MQTT-SN 1.2协议中定义的消息格式. 通用消息格式 消息头 其它可变部分 2/4字节表示 N字节组成 消息头部 长度 消息类型 1或3个字节 1 ...

  10. LeetCode——Implement Stack using Queues

    Description: Implement the following operations of a stack using queues. push(x) -- Push element x o ...