【接口测试】HttpClient+fastJson 总结与案例
多次理解,反复练习,破釜沉舟。
HttpCLient是什么
Apache Jakarta Common 下的子项目
支持 HTTP 协议的客户端编程工具包
支持 HTTP 协议最新的版本
怎么利用HttpClient写自动化
简化重点:
1、接口请求与接口响应(先要理解http协议),常见的以下两种请求方式
Get
Post
2、数据解析,学会以下用法
JsonObject
JsonArray
3、结果断言


演示代码片段
这里以https://my.oschina.net/u/3559695/blog/1600534/网页的接口为例 1 @Test
public void test1() throws IOException {
// 构造数据
String cookie = "111111";//会定时更新,自己去获取吧~
//json的写法 => Content-Type:application/json (传输的数据格式)
// User user=new User();//需要新建一个User类,命名属性的set方法
// user.setUserId(3559695);
// user.setSkillsNum(5);
// String jsonString=JSON.toJSONString(user); 等同于 String jsonString=" {\"userId\":3559695,\"skillsNum\":5}";
// System.out.println("打印"+jsonString);
// StringEntity stringEntity=new StringEntity(jsonString);
//form的写法 => Content-Type:application/x-www-form-urlencoded
//携带普通的参数params的方式
List<NameValuePair> params=new ArrayList<>();
params.add(new BasicNameValuePair("userId","3559695"));//BasicNameValuePair是存储键值对的类
params.add(new BasicNameValuePair("skillsNum","5"));
String jsonString=EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));//这里就是:userId=3559695&skillsNum=5
System.out.println(jsonString);
//1、打开浏览器
CloseableHttpClient httpClient = HttpClients.createDefault();
//2、创建httpGet对象
HttpPost httpPost = new HttpPost("https://my.oschina.net/u/3559695/radar/getUserPortraitRadarMap");
httpPost.addHeader("Cookie", cookie);
// httpPost.addHeader("Accept-Encoding","gzip, deflate, br");
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
httpPost.addHeader("User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36");
// httpPost.setEntity(stringEntity); 这个是json格式的方式
httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
//3、发送请求,获取响应模型
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
//4、从响应模型获取响应实体
HttpEntity httpEntity = httpResponse.getEntity();
//5、将响应实体转为String
if (httpEntity != null){
String str = EntityUtils.toString(httpEntity);
System.out.println(str);
//6、String解析为JsonObject、JsonArray
JSONObject jsonObject=JSONObject.parseObject(str);
System.out.println(jsonObject);
System.out.println("输出状态码code:"+jsonObject.getString("code"));
System.out.println(jsonObject.get(1));
JSONObject jsonObject1=jsonObject.getJSONObject("result");
System.out.println(jsonObject1);
JSONArray jsonArray=JSONArray.parseArray(jsonObject1.getString("skills"));
System.out.println(jsonArray);
System.out.println(jsonArray.get(1));
//测试
Assert.assertEquals(jsonObject.getString("code"),"1");
Assert.assertTrue(jsonArray.get(1).equals("社区影响力"));
Assert.assertNotNull(jsonObject.getString("result"));
Assert.assertNotSame(jsonObject1.getString("skills"),jsonArray);
}else EntityUtils.consume(httpEntity);
//释放资源
httpResponse.close();
httpClient.close();
}
url响应结果:
{"code":1,"message":"success","result":{"skills":["社区活跃度","社区影响力","技术贡献度","活动活跃性","开源贡献度","学习积极性"],"maxSkillScore":100,"skillsScore":[11.932739749333637,10.202996646175928,10.279304325337817,5.0,5.0,12.192893401015228]},"time":"2019-11-21 12:45:10"}
持续更新,欢迎补充。
【接口测试】HttpClient+fastJson 总结与案例的更多相关文章
- 接口测试——HttpClient工具的https请求、代理设置、请求头设置、获取状态码和响应头
目录 https请求 代理设置 请求头设置 获取状态码 接收响应头 https请求 https协议(Secure Hypertext Transfer Protocol) : 安全超文本传输协议, H ...
- Web接口测试-HttpClient
要实现Web接口测试的自动化有许多方式,比如利用Jmeter.Loadrunner等测试工具都能够实现接口的自动化测试,我们也可以利用一些开源的框架来实现接口的自动化测试,比如我们现在要说的这个Htt ...
- 接口测试HttpClient实践20150925
用了工具做接口测试,但是对于加密数据和结果的比对,以及批量数据读取,回头还是觉得代码来更方便灵活,从excle中读取数据,构成参数,发请求,并获取返回结果和预期值比较,并将结果输出程报告,可以深入做成 ...
- python_reques接口测试框架,Excel作为案例数据源
一.框架菜单 1.1 common模块 1.2 其他 二.Excel接口测试案例编写 三.读取Excel测试封装(核心封装) excel_utils.py 读取Excel中的数据 import o ...
- 接口测试——httpclient介绍与请求方式详解
httpClient工具介绍 HTTP协议可能是现在lntemet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源.虽然在JDK的java.net包中已经 ...
- 接口测试专题(Java & jmeter & Linux基础)
以下是我和两个朋友原创文章合集,主题是接口测试,有Java接口测试案例和jmeter的案例,还有接口测试相关服务器操作基础.欢迎点赞.关注和转发. 接口测试 httpclient处理多用户同时在线 h ...
- TOP100summit 2017:小米唐沐等大咖精心挑选的100个年度研发案例实践
2017年,机器学习.大数据.人工智能等词汇成为软件研发行业的主流,大前端.DevOps.区块链等技术方式成为热点方向:2017年,智能硬件开始成为新的焦点,这一年更被称为智能音箱井喷的一年:2017 ...
- HttpClient访问网络
HttpClient项目时Apache提供用于访问网络的类,对访问网络的方法进行了封装.在HttpURlConnection类中的输入输出操作,统一封装成HttpGet.HttpPost.HttpRe ...
- 使用 .NET Core 3.x 构建RESTful Api(第三部分)
关于HTTP HEAD 和 HTTP GET: 从执行性能来说,这两种其实并没有什么区别.最大的不同就是对于HTTP HEAD 来说,Api消费者请求接口数据时,如果是通过HTTP HEAD的方式去请 ...
随机推荐
- POJ 1035 Spell checker(串)
题目网址:http://poj.org/problem?id=1035 思路: 看到题目第一反应是用LCS ——最长公共子序列 来求解.因为给的字典比较多,最多有1w个,而LCS的算法时间复杂度是O( ...
- Mac系统 安装Photoshop CC 2018破解版
应用场景 本人从事前端行业,但是工作中有时也需要会点PS技能,之前一直使用window系统,突然换了Mac其他软件基本都差不多安装完了,就剩下比较难搞的PS.刚开始按照网上乱七八槽的教程下载过好多次都 ...
- vmware14安装centos7的步骤(图文详解)
一.centos的安装 centos分为桌面版和黑屏版(命令行版):在这里我使用的是命令行版. 这里选择安装程序光盘映像文件,文件就是centos7的iso文件. 虚拟机的名称和位置自行设置; 虚拟机 ...
- 使用cordova + vue搭建混合app框架
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zxj0904010228/article ...
- MYSQL DATE_FORMAT参数列表及用法
MYSQL DATE_FORMAT参数列表及用法 主要涉及用法 DATE_SUB(DATE, INTERVAL EXPR TYPE) DATE_FORMAT(DATE,FORMAT) REPLACE( ...
- 双系统开机引导菜单修复方法 进win7无须重启|metro引导|双系统菜单名字修改
此文转自互联网,一部分是原创. 主要内容 1.修复双系统菜单(win7与win8双系统),进入win7不再需要重启,普通菜单样式(普通引导,非metro界面),更加简洁,实用,开机即可选择操作系统 2 ...
- OptimalSolution(5)--数组和矩阵问题(2)2
一.找到无序数组中最小的k个数 二.在数组中找到出现次数大于N/K的数 三.最长的可整合子数组的长度 四.不重复打印排序数组中相加和为给定值的所有二元组和三元组 五.未排序正数数组中累加和为给定值的最 ...
- Leetcode Tags(2)Array
一.448. Find All Numbers Disappeared in an Array 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了 ...
- Java基础(七)泛型数组列表ArrayList与枚举类Enum
一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...
- 条件渲染vue
v-if:只渲染一次的情况下,性能更好v-show:频繁切换性能更好 vue虚拟DOM技术 浏览器:渲染引擎(慢)+JS引擎(快) 用1个JS对象来充当DOM对象,因为JS对象性能比较快,所以用虚拟D ...