前言:原来在cf沉淀了一份关于http的接口测试的方法,有两个问题是悬而未决的,一个是需要sid时如何获得;一个是json字符串如何校验更加完美,这次把这两个问题都解决好了,以下是一份完整的沉淀,如有不明白,可直接联系温庭;
hsf的接口自动化测试大家都已经非常熟悉了,之前一直苦恼大家的http的接口如何自动化起来呢?趁时间较充裕时做了小的尝试,其实发现还是比较简单的,尤其是在原来itest已熟悉的基础上,请看一个示例分解!
第一步:使用itest的方法生成itest框架,大家都已熟悉,不多说;
第二步:在pom.xml中引入跟httpclient和httpcore,还有解析json相关的包。
<dependency>
<groupId>httpclient</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>httpcore</groupId>
<artifactId>httpcore</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20131018</version>
</dependency>
第三步:代码示例与分析(直接在这个基础上修改你要的接口和参数及校验值)
package com.taobao.thcloud.httpClient;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import static org.junit.Assert.*;
import com.taobao.itest.util.XlsUtil;
import com.taobao.qatest.BaseTestCase;
import org.junit.Test;
import org.json.JSONArray;
import org.json.JSONObject;
public class HttpClientTest extends BaseTestCase{
@Test
public void testHttp() {
//构造HttpClient的实例
HttpClient httpClient = new HttpClient();
//创建GET方法的实例(这里的url地址就是你要测试的http接口除去参数部分)
GetMethod getMethod = new GetMethod("http://reader.daily.taobao.net/api/getRecChannel.do");
//使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
//将参数部分以下面的形式列出,如http://reader.daily.taobao.net/api2/getDetail.do?app=ios&appver=29&platform=1&itemId=2100502120195&sid=supershop1, 参数分解参见下面;
(作者说明:sid传入supershop1就能返回supershop1相关的信息,这个是经过开发定制的,只对日常环境起效,可配置其他sid)
NameValuePair[] data = { new NameValuePair("platform", "3"), new NameValuePair("app", "ios"),
new NameValuePair("appver","29"),new NameValuePair("platform","1"),new NameValuePair("itemId","2100502120195"),new NameValuePair("sid","supershop1") };
getMethod.setQueryString(data);
try {
//执行getMethod
int statusCode = httpClient.executeMethod(getMethod);
// 这里是必要的,但是为了在运行时能报错,我在原来的基础上增加了assertTrue,以便走到这个分支时会有失败出现;
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: "
+ getMethod.getStatusLine());
assertTrue(statusCode == HttpStatus.SC_OK);
}
//读取内容
byte[] responseBody = getMethod.getResponseBody();
//处理内容
String actual=new String(responseBody);
//以下为挑选重点项作为校验对象;java对json对象的解析;
//将string转化为JSONObject
JSONObject jsonObj = new JSONObject(actualJson);
//提取其中的book为另外一个JSONObject;
JSONObject jsonBook=jsonObj.getJSONObject("book");
//得到第一JSONObject中的resultCode的值
Integer actual1=jsonObj.getInt("resultCode");
//得到第二个JSONObject中的授权状态(JSONObject有很多不同的get方法,根据需要使用哦)
Integer actual2=jsonBook.getInt("authorize");
Integer expect1=0;
Integer expect2=1;
assertTrue(expect1==actual1);
assertTrue(expect2==actual2);
} catch (HttpException e) {
//发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!");
e.printStackTrace();
assertFalse(1==1);
} catch (IOException e) {
//发生网络异常
e.printStackTrace();
assertFalse(1==1);
} finally {
//释放连接
getMethod.releaseConnection();
}
}
}
第四步:以junit test的方式run该脚本,同itest脚本一样;
在itest框架里进行http的接口测试,其他部分利用itest的数据准备等操作就可以了;无需其他学习成本!也可以在每日回归进行每日回归!
备注:关于解析json相关的,可以参考:http://blog.csdn.net/walkcode/article/details/8606752,以上方法中可能没有你遇到的解析json的全部方法,可以参考这里再找找方法哦!