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),请求参数.参数类型.请求参数说明,返回结果说明.有 ...
随机推荐
- [Oracle] ROWNUM和分页
rownum是oracle的一个伪劣,它的顺序依据从表中获取记录的顺序递增,这里要注意的是:由于记录在表中是无序存放的.因此你无法通过简单的rownum和order by的组合获得相似TOP N的结果 ...
- UVA506-System Dependencies(拓扑序)
Problem UVA506-System Dependencies Accept:285 Submit:2824 Time Limit: 3000 mSec Problem Description ...
- windows下手动安装 Apache+php+mysql
PHP 为什么先说php,因为apache的配置要写入php的一些路径 http://php.net/downloads.php 选择windows donwload 选择Thread Safe的版 ...
- 利用Apache AXIS 1 发布WebService
首先,AXIS 是apache的作品. 1.到apache去下载相关的包,包括axis.jar.axis-ant.jar.commons-discovery-0.2.jar等.将jar包放到WEB-I ...
- python3 练习题 day02
'''1.有变量name = "aleX leNb" 完成如下操作:1) 移除 name 变量对应的值两边的空格,并输出处理结果2) 移除name变量左边的"al&q ...
- 图、dfs、bfs
graphdfsbfs 1.clone graph2.copy list with random pointer3.topological sorting4.permutations5.subsets ...
- Photoshop 基础三 制作简单按钮
要求知识点:移动工具.选择工具.套索工具.多边行工具.文本工具.路径选择工具.裁剪.填充 一.制作简单按钮 1)新建画布,大小随便 2)画圆角矩形工具(同时定义背景色.边框是否需求.边框颜色) 3)打 ...
- cc攻击和ddos攻击的区别和攻防 + 调SYN连接参数
1.一个是WEB网络层拒绝服务攻击(DDoS),一个是WEB应用层拒绝服务攻击(CC),网络层就是利用肉鸡的流量去攻击目标网站的服务器,针对比较本源的东西去攻击,服务器瘫痪了,那么运行在服务器上的网站 ...
- Android Studio复制项目作为一个新的工程
Android Studio复制项目作为一个新的工程 等待..... 好了 可能会安装失败 Failed to finalize session : INSTALL_FAILED_INVALID_AP ...
- NowCoder110E Pocky游戏 状压DP
传送门 题意:给出$N$个数和一个长为$M$.所有数在$[1,N]$范围之内的正整数序列$a_i$,求出这$N$个数的一种排列$p_1...p_N$使得$\sum\limits_{i=2}^M |p_ ...

