以下为大家介绍http请求测试方法,从而实现日常、预发、线上三套环境的监控。
做了半年的个性化推荐业务,发现很多资源位的推荐都是以http请求方式提供出来。由于前端资源相对紧张,经常需要在前端还未开发出来之前,就要针对http请求返回的json字符串进行测试,面对满屏的字符串,基本上没有办法通过肉眼进行测试。后续发现了浏览器的json插件,可以格式化json数据,但针对json数据仍然很难进行测试。因此就想到了获取http请求返回的json字符串,对其进行解析,再针对解析出来的数据通过脚本用例来测试返回的结果。
另外当线http请求布满全站,无处不在时,怎样才能知道哪些接口在正常工作,哪些接口没有返回数据呢?通过http请求测试方法,可以实现日常、预发、线上三套环境的监控。
http请求不像其它接口,受环境的限制。只要知道对应的ip或域名,再加上对应的参数就可以获取http请求返回的结果,因此对于日常、预发、线上三套环境均可以通过脚本用例进行自动化测试。http请求测试的主要思路是创建基于itest的mvn工程,通过HttpURLConnection得到http请求的返回结果,解析返回的字符串,结合itest编写用例,验证返回的内容,执行用例,自动化回归用例。
http请求测试方法如下:
1、 创建基于itest的mvn工程
2、 修改pom.xml文件,添加解释json相关的依赖
3、 执行mvn eclipse命令,将工程打包后导致入eclipse。此时工程中包含了itest做接口测试的示例:
数据库连接、数据准备、hsf服务依赖等都可以在此基础上进行扩充
4、 在BaseTestCase中添加对http请求返回结果的处理,本文通过HttpURLConnection得到http请求的返回结果,还有很多其它获取请求返回结果途径,如httpClient等,有兴趣的同学可以尝试一下。
public String urlToString(String strUrl, String charset) {
URL url = null;
HttpURLConnection urlconnection = null;
DataInputStream input = null;
String str = “”;
try {
url = new URL(strUrl);
urlconnection = (HttpURLConnection) url.openConnection();
input = new DataInputStream(urlconnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(input, charset));
String line = “”;
while ((line = reader.readLine()) != null) {
if (null != line && line != “”){
str += line;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (urlconnection != null) {
urlconnection.disconnect();
}
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return str;
}
5、 还可以在BaseTestCase中添加其它公共方法:字符串转换成json对象、json数据,去重等
6、 创建测试类,编写测试用例,执行用例
如:测试如下http请求,根据ip的不同,可以实现对日常、预发、线上三套环境的测试
http://ald.taobao.com/urlstring?parameter=someone
public String daily_demo = “1.1.1.1″;
public String prepub_demo = “2.2.2.2″;
public String online_demo = “ald.taobao.com”;
@Test
public void test_demo(){
String parameter= “someone”;
String charset = “XXXX”;
String str = urlToString(“http://”+online_demo+”/urlstring?parameter=”+parameter, charset);
//截掉返回结果中构成json对象多余的字符
String sub = str.substring(1, str.length()-1);
JSONObject jsonObject = jsonstringToObject(sub);
//返回结果的内容
JSONArray data = jsonObject.getJSONArray(“data”);
//校验返回结果中的字段
for(Object dataContent : data){
String field= ((JSONObject)dataContent).get(“field”).toString();
Assert.assertTrue(field.indexOf(“XXXX”)>-1);
}
}
7、 提交用例到kelude平台,创建实验室,配置命令执行,同时也可以将实验室复制到全网回归,对用例进行每日回归
截止目前aladdin-httptest已经多次发现推荐接口bug
8、 http-demo svn地址:
请咨询本人。
原文转自:http://tmalltesting.com/archives/519