Web接口测试-HttpClient
要实现Web接口测试的自动化有许多方式,比如利用Jmeter、Loadrunner等测试工具都能够实现接口的自动化测试,我们也可以利用一些开源的框架来实现接口的自动化测试,比如我们现在要说的这个HttpClient,
HttpClient是一个功能丰富支持HTTP协议的客户端编程工具包,具备以下主要功能:
1)封装实现了所有HTTP的方法,如GET,POST,PUT,HEAD
2)支持redirect,会话保持
3)支持文件上传
它是Apache下面开发的,更多信息大家可以上官网瞅瞅。
既然谈到了接口测试,首先我们得明白何为接口测试,简单一句话啊就是测试外部系统与内部系统或一个系统中不同的功能模块之间的交互点,我们测试的重点是检查数据的交换、传递、控制管理的过程,以及系统间的相互的逻辑依赖关系。
利用HttpClient我们做的接口测试主要是服务器端与客户端交互的方式,即浏览器或其它客户端与Web服务器之间的交互协议,这里讲的主要是HTTP协议,Http协议常用的请求方法有Post和Get,
一般情况下从客户端传向服务器端的用Post,从服务器端传出的用Get方法,这些都是一般情况下,测试的过程中还得具体情况具体分析。
顺便插一嘴,我们看看采用Get和Post方法来提交表单时的区别,明白了Get和Post的区别以后,接下来我们看HttpClient通过get和post传参数的时候就不会糊涂了。
随便写了一个表单,然后将输入的数据显示在一个页面上,
表单代码:
<body>
<!-- 根据method是post还是get决定提交表单个协议 -->
<form action="LogIn" method="get">
用户名: <input name="UserName" type="text"><br><br>
密 码: <input name="PassWord" type="password"><br><br>
<input type="submit" value="SubmitBtn">
<input type="reset" value="ResetBtn">
</form>
</body>下面的截图是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<headerLength;i++){ System.out.println("Header 内容为: " + headers[i]); } //获取到请求的内容
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity,"utf-8");
System.out.println("获取请求响应的内容为: "+content); } catch (Exception e) { e.printStackTrace(); }finally{ try { httpGet.releaseConnection(); //每次都得关闭响应
response.close(); } catch (IOException e) { e.printStackTrace();
}
}
} //根据返回的string是XML格式还是json格式的文件,然后对该文件进行选择不同的处理方式
public String postMethod(String url, Map<String, String>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<NameValuePair> list = new ArrayList<NameValuePair>(); Set<String> 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(); } }
}
Web接口测试-HttpClient的更多相关文章
- 使用 Jmeter 做 Web 接口测试
接口测试概述 定义 API testing is a type of software testing that involves testing application programming in ...
- 基于PowerShell 3.0的web接口测试
对于web接口测试,做一下总结. 接口测试总结 1. 接口url格式:http://www.xxx.com/a/bbb.html: 2. 接口url后面接的参数格式:“?参数名=参数值&参数名 ...
- Python nose单元测试框架结合requests库进行web接口测试
[本文出自天外归云的博客园] 之前写过一篇关于nose使用方法的博客.最近在做一元乐购产品的接口测试,结合着python的requests库可以很方便的进行web接口测试并生成测试结果.接口测试脚本示 ...
- 让你分分钟了解Web接口测试
因为前后端架构分离技术的兴起,接口测试也越来越重要,最近一直想总结下,作为一个近三年的测试人员,接口这个词是耳濡目染的,而开发张口闭口也都是这个接口或那个接口怎么怎么样,自己遇到的bug也很多是接口问 ...
- 【转】使用 Jmeter 做 Web 接口测试
最近总结了一下在接口测试方面的知识与心得,在这里与大家分享一下,如有说的不对的地方请多多指正. 接口测试概述 定义 API testing is a type of software testing ...
- 使用jmeter做web接口测试
接口测试概述 定义 API testing is a type of software testing that involves testing application programming in ...
- 【转】使用Python的Requests库进行web接口测试
原文地址:使用Python的Requests库进行web接口测试 1.Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写, ...
- 使用 Jmeter 做 Web 接口测试-详解
接口测试概述 定义 WIKI定义:接口测试作为集成测 试的一部分,通过直接控制API来判断系统的功能性,可靠性,性能与安全性.API测试是没有界面的,执行在通讯 层.API 测试在自动化测试中有着重要 ...
- 怎么做web接口测试
这就需要开发提供的接口文档了,接口文档和功能测试的需求说明书的功能是一样的.包括:接口说明.调用的url,请求方式(get or post),请求参数.参数类型.请求参数说明,返回结果说明.有 ...
随机推荐
- magento2.2.5安装
首先肯定要去下载源码,然后配置虚拟主机访问,例:http://magento.cn 这里我们采用命令行安装: php bin/magento setup:install --admin-firstna ...
- 转://对于11gR2的集群relink
对于11gR2的集群relink参考MOS:Do I need to relink the Oracle Clusterware / Grid Infrastructure home after an ...
- MySql常用命令集Mysql常用命令5
九. 交叉查询 交叉查询可以对数据进行总和,平均,计数或其他总和计算法的计算,这些数据通过 两种信息进行分组:一个显示在表的左部,另一个显示在表的顶部. Microsoft Jet SQL 用TRAN ...
- ceph mimic版本 部署安装
ceph 寻址过程 1. file --- object映射, 把file分割成N个相同的对象 2. object - PG 映射, 利用静态hash得到objectID的伪随机值,在 "位 ...
- go标准库的学习-text/template
参考:https://studygolang.com/pkgdoc 导入方式: import "text/template" template包实现了数据驱动的用于生成文本输出的模 ...
- Linux下 XordDos(BillGates)木马查杀记录
最近朋友的一台服务器突然网络异常,cpu占用率暴表,登录上去一查,cpu占用300% 左右,流量异常,经过看查进程,获取信息最终确认为中了dos木马,经过几天的研究,基本上已经清除,以下是清理记录. ...
- day06数据类型----元组、字典、集合
一.元组(tuple): python中将一些不能修改的值称为不可变的,而不可变的列表则被称之为元组. 注意元组一旦被定义则不可修改,因此一般我们不定义空元组. 元组是有序的,可存放多个数据| ...
- win7/10下Qt Creator调试提示:The selected debugger may be inappropriate for the inferior的解决办法
在win7/10下Qt Creator调试提示:The selected debugger may be inappropriate for the inferior的错误提示内容如下图所示: 一般弹 ...
- 提示文件过大无法复制到U盘怎么解决
1.U盘作为一个便携的移动存储工具,在我们的生活中扮演重要的角色,但 是我们经常会遇到在复制文件到U盘中的时候,U盘明显有很大的空间,却 提示文件过大无法复制,今天,我教大家一步解决这个问题!! 2. ...
- JMS和AMQP的区别
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信 ...

