Java接口自动化测试实践(上)
众所周知,在现在这个移动互联网越来越发达的时代,瘦客户端和胖服务端的要求下,服务端的测试也变得越来越重要。而服务端的实现通常是通过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里面,最后以字符串的形式来返回。