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做接口测试的过程中,总结了一些方法,写了一个基本的测试框架。用例的管理和测试结果的保存都放在数据库中,今天算是基本完成和健全了用例的模版。分享出来供大家参考。
- public void case_shequ_topic_cattlist() {
- String apiName = "shequ_topic_cattlist";
- mark = getMark();// 获取时间戳作为测试标记
- List<Map<String, String>> date = LocalMySql.getInstance().getCaseFromMySql(apiName);// 数据库读取用例
- for (int i = 0; i < date.size(); i++) {// 遍历执行用例
- int result = 0;
- String expect_value1 = "", actual_value1 = "", expect_value2 = "", actual_value2 = "", params = "",
- actual_key1 = "", actual_key2 = "", actual_key3 = "", expect_value3 = "", actual_value3 = "";
- Map<String, String> use = date.get(i);// 获取单个用例
- String case_id = use.get("case_id");
- /*
- * 获取检查点的key和expect_value 如果有1个检查点就写一个,兼容多个 getresult方法兼容验证点不存在情况
- */
- expect_value1 = use.get("verify_value1");// 获取验证点期望值
- expect_value2 = use.get("verify_value2");// 获取验证点期望值
- expect_value3 = use.get("verify_value3");// 获取验证点期望值
- actual_key1 = use.get("verify_key1");//获取检查点key
- actual_key2 = use.get("verify_key2");//获取检查点key
- actual_key3 = use.get("verify_key3");//获取检查点key
- params = use.toString();// 记录传入参数
- JSONObject response = shequ_topic_cattlist(use);// 获取相应结果
- actual_value1 = getDateValue(response, actual_key1);//获取验证点实际值
- actual_value2 = getDateValue(response, actual_key2);//获取验证点实际值
- actual_value3 = getDateContains(response, actual_key3, expect_value3);//获取验证点实际值,此为包含验证
- result = getResult(expect_value1, actual_value1, expect_value2, actual_value2) ? 1 : 2;// 获取测试结果,1为通过,2为失败
- LocalMySql.getInstance().saveApiTestResult(case_id, mark, result, apiName, expect_value1, actual_value1,
- expect_value2, actual_value2, expect_value3, actual_value3, params);// 写入数据库
- }
- LocalMySql.getInstance().addApiTestResult(apiName, mark, test_mark);//统计本次运行所有用例结果
- }
获取响应的方法封装:
- public JSONObject shequ_topic_cattlist(Map<String, String> apiCase) {
- String uri = host + "/shequ/topic/cattlist";
- deleteMap(apiCase);
- JSONObject jsonObject = new JSONObject(apiCase);
- HttpGet httpGet = getHttpGet(uri, jsonObject);
- JSONObject response = getHttpResponseEntityByJson(httpClient, httpGet);
- return response;
- }
模版做好了,其他的用例直接可以复用,就是改一下接口名和方法名的问题,看起来非常整齐。
使用httpclient发送请求时,获取信息的方法
本人在使用httpclient做接口自动化测试的过程中,需要在每次请求的时候把这个请求保存到数据库中,以便重新发送这个请求。而且得把请求的类型、host地址、接口名、参数分开保存,所以自己单独写了一个方法,在每次使用client发送请求之前,把请求的信息保存提取出来,兼容了get和post,传参类型为HttpRequestBase,中间涉及到一次强转。分享代码,供大家参考。
- /**
- * 封装获取请求的各种信息的方法
- *
- * @param httpRequestBase
- * 传入请求对象
- * @return 返回一个map,包含api_name,host_name,type,method,params
- */
- public Map<String, String> getRequestInfo(HttpRequestBase request) {
- Map<String, String> info = new HashMap<>();// 新建map保存信息
- String method = request.getMethod();// 获取method
- info.put("method", method);
- String uri = request.getURI().toString();// 获取uri
- info.put("uri", uri);
- String url = uri;
- if (uri.contains("?")) {// 获取url,如果是get请求,先截取
- url = uri.substring(0, uri.indexOf("?"));
- }
- String one = url.substring(url.indexOf("//") + 2);// 删除掉http://
- String api_name = one.substring(one.indexOf("/"));// 获取接口名
- info.put("api_name", api_name);
- String host_name = one.substring(0, one.indexOf("/"));// 获取host地址
- info.put("host_name", host_name);
- String type = url.substring(0, url.indexOf("//") - 1);// 获取协议类型
- info.put("type", type);
- String params = null;// 参数
- if (method.equals("GET")) {
- params = uri.substring(uri.indexOf("?") + 1, uri.length());
- } else if (method.equals("POST")) {
- HttpPost httpPost = (HttpPost) request;// 强转httppost请求
- HttpEntity entity = httpPost.getEntity();// 获取实体
- try {
- params = EntityUtils.toString(entity);// 解析实体
- EntityUtils.consume(entity);// 确保实体消耗
- } catch (ParseException e) {
- output("解析响应实体异常!", e);
- } catch (IOException e) {
- output("解析响应实体时java IO 异常!", e);
- } catch (UnsupportedOperationException e) {
- params = "entity类型:" + entity.getClass();
- output("不被支持的entity 类型!", e);
- }
- }
- info.put("params", params);
- return info;
- }
httpclient接口测试完整用例以及获取信息的方法的更多相关文章
- SQL SERVER获取信息的方法
获取数据库的表 SELECT obj.name tablename, schem.name schemname, CAST ( CASE ) ) END AS BIT) HasPrimaryKey f ...
- AppCan中两种获取信息的方法
<div id="newsInfo">正在加载...</div> 1.JSON格式: [{'R': '1','NOTI_ID': '9','NOTI_TIT ...
- 接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析
(最近学的都是很基础的接口测试,都是基于UI界面可见的接口,就是发请求,接收响应,分析返回的结果,校验,对共通模块进行封装,仅此而已,其实做自动化的思路基本都是如此,UI也是.) 现在开始用httpC ...
- Android获取位置信息的方法总结
1.位置服务的简介:位置服务,英文翻译为Location-Based Services,缩写为LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综 ...
- JavaScript获取客户端计算机硬件及系统等信息的方法
JavaScript获取客户端计算机硬件及系统等信息的方法 JavaScript 获取客户端计算机硬件及系统信息 通过WMI来实现获取客户端计算机硬件及系统信息: function getSysInf ...
- (转)Python新手写出漂亮的爬虫代码2——从json获取信息
https://blog.csdn.net/weixin_36604953/article/details/78592943 Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬 ...
- PHP版微信第三方实现一键登录及获取用户信息的方法
本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请. 一开始你需要进入微信 ...
- ph模拟登录获取信息
cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...
- HR开发 获取信息类型数据
1.PNP逻辑数据库. LOOP获取信息类型数据. TABLES: PERNR . , . START-OF-SELECTION. GET PERNR . LOOP AT P0000 WHERE .. ...
随机推荐
- python2.7中关于编码,json格式的中文输出显示
当我们用requests请求一个返回json的接口时候, 语法是 result=requests.post(url,data).content print type(result),result 得到 ...
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指仅仅能从人(Person)这端载入身份证端(IdCard),可是反过来.不能从身份 ...
- android:json解析的两个工具:Gson和Jackson的使用小样例
1.简单介绍 json是android与server通信过程中经常使用的数据格式,比如.例如以下是一个json格式的字符串: {"address":"Nanjing&qu ...
- osgEarth中的StringUtils头文件中有很多关于字符串的操作
- 《C++ Primer Plus》15.4 RTTI 学习笔记
运行时类型识别RTTI(Runtime Type Identification) C++有三个支持RTTI的元素.* 如果可能的话,dynamic_cast运算符将使用一个指向基类的指针来生成一个指向 ...
- PyQt4状态栏
主窗口 QMainWindow类用来创建应用程序的主窗口.通过该类,我们可以创建一个包含状态栏.工具栏和菜单栏的经典应用程序框架. 状态栏是用来显示状态信息的串口部件. #!/usr/bin/pyth ...
- Set集合遍历方式
for(String str : set) { System.out.println(str); } for (Iterator iter = set.iterator(); iter.hasNext ...
- HTTP/2笔记之消息交换
前言 无论是HTTP/1.*还是HTTP/2,HTTP的基本语义是不变的,比如方法语义(GET/PUST/PUT/DELETE),状态码(200/404/500等),Range Request,Cac ...
- 深入浅出Docker(五):基于Fig搭建开发环境
概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docke ...
- c# 执行 CreateHandle() 时无法调用值 Dispose()
在多线程C#开发中,遇到错误 执行 CreateHandle() 时无法调用值 Dispose().,这个错误是在关闭窗体的时候出来的. 原因是因为窗体还存在CreateHandle()事件,所以还不 ...