众所周知,在现在这个移动互联网越来越发达的时代,瘦客户端和胖服务端的要求下,服务端的测试也变得越来越重要。而服务端的实现通常是通过HTTP请求的API和服务来实现的,而服务由于实现起来比较复杂,所以大多公司使用的还是HTTP请求的API接口来处理底层数据。在前面的博文中我们讲过了如何使用PHPUNIT框架和python的urllib2和reqests模块,来进行接口自动化测试。
可是很多同学比较善长java,如果想用这个来做接口自动化测试的化,还是有点儿麻烦的。因为没有具体的函数,需要利用HttpClient来模拟HTTP请求,并对接口的返回值进行处理才行。下面我们就讲解,如何用java来封装对HTTP请求的API来做自动化测试:
一,
GET方式的请求
Get类请求分为有参数和无参数两种情况,如果没有参数,则直接通过接口调用地址进行请求,接收返回结果;如果有参数,则把参数添加进来,对请求的结果进行筛选。
public
static
String GetRequests(String
url,String
params)
{
StringBuffer
response
=
new
StringBuffer();
HttpClient
client
=
new
HttpClient();
HttpMethod
method
=
new
GetMethod(url);
try
{
if
(StringUtils.isNotBlank(params))
//对get请求参数做了http请求默认编码,好像没有任何问题,汉字编码后,就成为%式样的字符串
method.setQueryString(URIUtil.encodeQuery(params));
client.executeMethod(method);
BufferedReader
reader
=
new
BufferedReader(new
InputStreamReader(method.getResponseBodyAsStream(),"utf-8"));
String
line;
while
((line
=
reader.readLine())
!=
null)
{
response.append(line);
}
reader.close();
}
catch
(URIException
e)
{
System.out.println("执行HTTP
Get请求时,编码查询字符串“"
+
params
+
"”发生异常!");
}
catch
(IOException
e)
{
System.out.println("执行HTTP
Get请求"
+
url
+
"时,发生异常!");
}
finally
{
method.releaseConnection();
}
return
response.toString();
}
代码分析:
(1)新建HttpClient和GetMethod,通过GetMethod来创建URL请求相关的URL和参数,然后通过HttpClient发起HTTP请求,接收返回结果。
(2)如果接口请求的参数不为空,则通过setQueryString()将参数和URL拼接到一起。
(3)通过HttpClient的getResponseBodyAsStream()来获取请求结果,并将结果添加到StringBuffer里面,最后以字符串的形式来返回。
二,
Post
类请求接口
Post请求都是向服务器提求表单的,所以要封装相应的HTTP请求头,并且把相应的参数添加到请求中,具体代码如下:
public
static
String PostRequests(String
url,
Map
params,
Map
header)
{
StringBuffer
response
=
new
StringBuffer();
HttpClient
client
=
new
HttpClient();
PostMethod
method=new
PostMethod(url);
int
i;
//封装HTTP请求头
if(header
!=
null
&&
header.size()>0){
Set
key
=
header.keySet();
for
(Iterator ?
it
=
key.iterator();
it.hasNext();)
{
String
s
= (String)
it.next();
method.addRequestHeader(s,header.get(s));
}
}
//设置Http
Post数据
if
(params
!=
null)
{
NameValuePair[]
postData
=
new
NameValuePair[params.size()];
i=0;
for
(Map.Entry
entry
:
params.entrySet())
{
postData[i]
=
new
NameValuePair(entry.getKey(),
entry.getValue());
i++;
}
method.addParameters(postData);
}
try
{
client.executeMethod(method);
if
(method.getStatusCode()
== HttpStatus.SC_OK)
{
BufferedReader
reader
=
new
BufferedReader(new
InputStreamReader(method.getResponseBodyAsStream()));
String
line;
while
((line
=
reader.readLine())
!=
null)
{
response.append(line);
}
reader.close();
}
}
catch
(IOException
e)
{
System.out.println("执行HTTP
Post请求"
+
url
+
"时,发生异常!"+e);
}
finally
{
method.releaseConnection();
}
return
response.toString();
}
代码分析:
(1)新建HttpClient和PostMethod,通过PostMethod来创建URL请求相关的URL和参数,然后通过HttpClient发起HTTP请求,接收返回结果。
(2)通过addRequestHeader()将HTTP请求的头,添加到HttpClient中,从而达到对HTTP请求头的封装。
(3)通过NameValuePair来组织接口数据,通过addParameters()将参数添加到HTTPClient中。
(4)通过HttpClient的getResponseBodyAsStream()来获取请求结果,并将结果添加到StringBuffer里面,最后以字符串的形式来返回。
加载中,请稍候......