在使用java + httpClient施行API自动化时,不可避免地遇到了如下问题:

1. 用Http Response数据做断言;

2. 用上一个请求的Response内容,作为下一个请求的参数;

如果用jmeter来做的话,首选当然是BeanShell。然而,当需要自己写的时候(通过java + httpClient),在此我用到了FastJson。

1. 以一个Post请求为例,代码如下:

     public CloseableHttpResponse post(String url , String entityString , HashMap<String , String> headermap)
throws ClientProtocolException, IOException {
//创建一个可关闭的 httpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建一个HttpPost的请求对象
HttpPost httpPost = new HttpPost(url);
//设置payload
httpPost.setEntity(new StringEntity(entityString));
//加载请求头到HttpPost对象
for (Map.Entry<String , String> entry : headermap.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
//发送post请求
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
return httpResponse;
}

2. 发送Post请求后,我们会得到一个CloseableHttpResponse。接下来,我们提取状态码(status):

 int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();

  3. 提取返回实体(httpEntity):

 HttpEntity entity = closeableHttpResponse.getEntity();
System.out.println(entity);

此时的输出结果为:

4. HttpEntity 转化为 String:

 String responseEntity = EntityUtils.toString(entity);
System.out.println(responseEntity);

此时的输出结果为String格式,提取code、message等值,只能通过字符串截取:

5. String 转化为 JsonObject:

 JSONObject jsonObject = JSON.parseObject(responseEntity);
System.out.println(jsonObject);

此时的输出结果为JsonObject格式:

6. 提取code、message的值:

 String responseCode = jsonObject.getString("code");
String responseMessage = jsonObject.getString("message");

7. 提取orderId:

 //由于info的值是json格式(或可理解为key-value集合),提取info的值为JSONObject格式
JSONObject infoObject = jsonObject.getJSONObject("info");
//重复步骤6,提取orderId
String orderId= jsonObject.getString("orderId");
//或通过将infoObject转化为HashMap,再进行提取orderId
HashMap<String, Object> info = new HashMap<String, Object>();
info = JSON.parseObject(String.valueOf(infoObject), new TypeReference<HashMap<String, Object>>() {});
String orderId = info.get("orderId").toString();

最新文章

  1. android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。
  2. css-@keyframes动画
  3. CentOS6.4 配置iptables
  4. mysql使用过程中碰到的问题
  5. 关于路由、AP、交换机的小总结
  6. xml学习篇(一)
  7. 纯蓝ICON_学习教程
  8. js基础01
  9. proc文件系统探索 之 以数字命名的目录
  10. HttpClient基本使用
  11. CSS3_综合案例
  12. linux 学习之路:ls命令使用
  13. 基于socketserver模块并发套接字
  14. JS_高程3.基本概念(5)语句
  15. maven中的mirrors
  16. 简易C# socket
  17. 关于inode&amp;硬连接
  18. 51Nod 1067:Bash游戏 V2(巴什博弈)
  19. jQuery插件之ajaxFileUpload[转载]
  20. 20145209刘一阳《JAVA程序设计》第二周课堂测试

热门文章

  1. springmvc(3)注解
  2. 查找连接过的USB存储设备
  3. 2019.1.3 Mac安装免费版StarUml3.0.2 &amp;&amp;&amp;Xmind思维导图 &amp;&amp;Google浏览器***版
  4. update会锁表吗?
  5. github commit 报错:error: failed to push some refs to &#39;https:&#39;错误解决方法
  6. OC中对象的description方法
  7. 【译】为什么要写super(props)
  8. 【oracle】关于创建表时用default指定默认值的坑
  9. dva框架使用详解及Demo教程
  10. js常用共同方法