http的接口自动化

前言:原来在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的全部方法,可以参考这里再找找方法哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值