注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

接口测试用例代码学习  

来自姚晓群   2014-07-25 21:44:01|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近我们组准备开始M项目的接口测试,之前有接触过直接用浏览器或者第三方的工具直接向接口发送请求,检查返回的数据是否正确。本次接口用例代码使用java+TestNg编写,菜鸟级别的我慢慢开始研究和学习,对稍微懂一点的人来说可能都是很简单操作,虽然简单是我慢慢积累的过程,记录下来方便以后复习。
一、使用Fiddler2获取接口:
Fiddler2是一个网络调试代理,用来监测本地计算机和Internet之间所有的HTTP通讯,这是一个强大的工具,可惜我现在只会用个皮毛。打开Fiddler2,在浏览器中输入M网站地址,软件左边就可以看到这个网站的所有HTTP请求(若没有请求,确认浏览器是否设置为使用系统代理之类),查找Http状态为200的请求,再在这些请求里面筛选(还是能比较明显的判断出来哪些是哪些不是的)。点中某个请求,可以在右侧看到该请求的详细信息。如果请求过多看的眼花缭乱,可以通过过滤器进行过滤,关于Fiddler2更多功能的使用就不多介绍,网上有很多资料http://www.2cto.com/Article/201304/204560.html。
二、用例设计
主席已经给我们设计好了几个接口,刚开始当然是先对主席已经写好的用例进行了解,了解每个方法、每行代码实现的功能,在我理解,主要是使用GET或POST方式来请求一个页面或者内容,对请求到的内容进行处理。HttpGet和HttpPost的使用大同小异,无论是使用HttpGet,还是HttpPost,都必须通过如下3步来访问HTTP资源。
1、创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
2、使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。
3、通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。
我下载的工程代码里这些操作已经封装到HttpRequest类里面,可以直接使用,非常方便。大概了解之后根据主席的用例代码照葫芦画瓢,在整理好的接口列表中选择了几个简单的接口进行练习。设计获取个人资料接口时,比较简单,只要设置好url及请求的参数,直接发起请求获取返回的数据,检查数据是否正确即可。
获取个人资料接口主要代码:

//设置需要请求服务器的url

String url = yxpFixture.ystoreWebAppURL+"/profile/index";
List<NameValuePair> headers = new ArrayList<NameValuePair>();
//设置heaser
headers.add(new BasicNameValuePair("Accept", "application/json, text/plain, */*"));
headers.add(new BasicNameValuePair("Content-Type", "application/json;charset=UTF-8"));

//发起get请求获取返回HttpResponse
String responseSrc = HttpRequest.get(client, url, headers);

在设计保存个人资料代码时,我知道这是一个post请求,所有参照了主席的删除购物车的post请求,设置url和post的参数,发起请求。
购物车删除代码:

String url = yxpFixture.ystoreWebAppURL+"/cart/delete.json";
List<NameValuePair> entity = new ArrayList<NameValuePair>();
// 设置entity
entity.add(new BasicNameValuePair("genMyCartParamJson", "{\"cartIdAndPromoIdMap\":null,\"ordPromoId\":null,\"couponCode\":null,\"cartIdSetOfSelected\":[]}"));
entity.add(new BasicNameValuePair("ids", itemId));
// 提交删除请求
String response = HttpRequest.post((DefaultHttpClient) client, url, entity, headers, HTTP.UTF_8);


保存个人资料接口错误代码:

String url = yxpFixture.ystoreWebAppURL+"/profile/save.json";
List<NameValuePair> headers = new ArrayList<NameValuePair>();
List<NameValuePair> entity = new ArrayList<NameValuePair>();
// 设置entity
entity.add(new BasicNameValuePair("realName", "小强"));
entity.add(new BasicNameValuePair("mobile", “13575xxxx64”));

entity.add(new BasicNameValuePair("email", “test@126.com”);

......
// 提交保存请求
String response = HttpRequest.post((DefaultHttpClient) client, url, entity, headers, HTTP.UTF_8);

执行后报错,返回了HTTP 415的错误( 不支持的媒体类型),估计是请求设置的参数不对。通过火狐的firebug插件分析请求的数据,哎!还真不一样,删除购物车的post参数是这样子的:
接口测试用例代码学习 - 姚晓群 - 啦啦
而保存个人资料的post是这样子:
接口测试用例代码学习 - 姚晓群 - 啦啦
 保存资料传的是一个JSON字符串,度娘告诉我可以把字符串封装成JSON对象,封装完成,我再次尝试:

......

List<NameValuePair> headers = new ArrayList<NameValuePair>();
List<NameValuePair> entity = new ArrayList<NameValuePair>();
entity.add(new BasicNameValuePair("profile",jo.toString()));
entity.add(new BasicNameValuePair("userProperty",jo1.toString()));
String retSrc =HttpRequest.post((DefaultHttpClient)client, url, entity, headers, HTTP.UTF_8);

......

还是报HTTP 415错误,打印出的entity格式是不符合post源代码的要求,重新写。目前找到了一种很笨拙的方式暂时解决:拼接出正确的格式,直接使用HttpPost方法提交HTTP POST请求,可以正确提交:

......

HttpPost httpPost = new HttpPost(url);
StringEntity entity = new StringEntity(jo2.toString(), HTTP.UTF_8);
entity.setContentType("application/json");
httpPost.setEntity(entity);
HttpResponse httpResponse = client.execute(httpPost);
String retSrc = EntityUtils.toString(httpResponse.getEntity());//使用EntityUtils对返回值的实体进行处理

......

最终完成的不是很完美,都是自己摸索和学习的过程,目前开始研究购买、订单提交、组单等接口,也是慢慢摸索完成吧。
PS:我想找到更好的方式解决,等主席回来会好好请教他。也希望此事此刻正在看的大牛们可以给菜鸟的我一点指示。

  评论这张
 
阅读(1252)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016