博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web接口测试-HttpClient
阅读量:4629 次
发布时间:2019-06-09

本文共 4317 字,大约阅读时间需要 14 分钟。

要实现Web接口测试的自动化有许多方式,比如利用Jmeter、Loadrunner等测试工具都能够实现接口的自动化测试,我们也可以利用一些开源的框架来实现接口的自动化测试,比如我们现在要说的这个HttpClient,

  HttpClient是一个功能丰富支持HTTP协议的客户端编程工具包,具备以下主要功能:

  1)封装实现了所有HTTP的方法,如GET,POST,PUT,HEAD

  2)支持redirect,会话保持

  3)支持文件上传

它是Apache下面开发的,更多信息大家可以上官网瞅瞅。

既然谈到了接口测试,首先我们得明白何为接口测试,简单一句话啊就是测试外部系统内部系统一个系统中不同的功能模块之间的交互点,我们测试的重点是检查数据的交换、传递、控制管理的过程,以及系统间的相互的逻辑依赖关系。

利用HttpClient我们做的接口测试主要是服务器端与客户端交互的方式,即浏览器或其它客户端与Web服务器之间的交互协议,这里讲的主要是HTTP协议,Http协议常用的请求方法有PostGet,

一般情况下从客户端传向服务器端的用Post,从服务器端传出的用Get方法,这些都是一般情况下,测试的过程中还得具体情况具体分析。

顺便插一嘴,我们看看采用Get和Post方法来提交表单时的区别,明白了Get和Post的区别以后,接下来我们看HttpClient通过get和post传参数的时候就不会糊涂了。

随便写了一个表单,然后将输入的数据显示在一个页面上,

表单代码:

用户名:
密 码:
   

下面的截图是Get提交的表单,我们可以看到URL中,传入的数据直接是以键值对的形式被写在URL中传入到Servlet中的

                             

再看看Post提交的表单URL的格式,传入的值并没有直接在URL中展示出来,通过FireBug,我们可以看到传入的值的保存地方。

                           

 

下面我们就来看看通过HttpClient具体实现Get和Post方法,然后通过上面就能理解HttpClient中的Post方法为什么需要传入一个NameValuePair

package com.util.httpclient;import java.io.IOException;import java.io.InputStream;import java.io.StringReader;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.jdom2.Document;import org.jdom2.input.SAXBuilder;import org.json.JSONObject;/** * 1. 通过HttpClient实现Get方法响应 * 2. 通过HttpClient实现Post方法带参数传入的响应  */public class HttpClientTest2 {            private CloseableHttpClient httpClient = HttpClients.createDefault(); //定义一个HttpClient        private CloseableHttpResponse response = null; //定义response对象        public void getMethod(String url){                HttpGet httpGet = new HttpGet(url); //实例化一个HttpGet对象                RequestConfig config = RequestConfig.custom().setConnectTimeout(2000).setSocketTimeout(2000).build(); //定义一个配置响应时间        httpGet.setConfig(config); //设置配置        try {                        response = httpClient.execute(httpGet); //获取到response对象                        System.out.println("输出当前的URI地址: " + httpGet.getURI());                        //如果返回值为200,则请求成功,可以通过TestNG做判断 HttpStatus.SC_OK            int status = response.getStatusLine().getStatusCode();            System.out.println("当前请求URL状态: " + status);                        //获取Http Headers信息,关于header信息:http://honglu.me/2015/07/13/开发中常用的HTTP-header/            Header[] headers = response.getAllHeaders();            int headerLength = headers.length;                        for(int i=0; i
params) throws Exception{ CloseableHttpClient client = HttpClients.createDefault(); CloseableHttpResponse response = null; RequestConfig config = RequestConfig.custom().setConnectTimeout(20000).setSocketTimeout(20000).build(); HttpPost httpPost = new HttpPost(url); httpPost.setConfig(config); List
list = new ArrayList
(); Set
keySets = params.keySet(); for(String key: keySets){ String value = params.get(key); list.add(new BasicNameValuePair(key, value)); } try { httpPost.setEntity(new UrlEncodedFormEntity(list)); response = client.execute(httpPost); HttpEntity entity = response.getEntity(); String content = EntityUtils.toString(entity); return content; } catch (Exception e) { throw e; }finally{ httpPost.releaseConnection(); response.close(); } }}

转载于:https://www.cnblogs.com/taoSir/p/5139183.html

你可能感兴趣的文章
Oracle 12c DG备库Alert报错ORA-01110
查看>>
java JDBC数据库连接操作
查看>>
IDL_GUI
查看>>
Web.Config文件配置之连接默认错误页
查看>>
Scrapy爬虫-必备插件
查看>>
Entity Framework的启动速度优化
查看>>
input 选择框改变背景小技巧
查看>>
Hadoop2.6.0伪分布环境搭建
查看>>
贴现因子
查看>>
2019-03-20 Python爬取需要登录的有验证码的网站
查看>>
docker(4)docker的网络,自定义网桥
查看>>
重读TCP协议(3)
查看>>
CSS中实现DIV容器垂直居中
查看>>
VirtualBox装ghost XP
查看>>
彻底解决Linux索引节点(inode)占用率高的告警
查看>>
阻塞队列与非阻塞队列
查看>>
python学习07
查看>>
添加MySql数据库超时设置的相关问题
查看>>
-lt -gt -ge -le -eq的意义
查看>>
i/o多路复用笔记
查看>>