您的位置:首页 > 理论基础 > 计算机网络

接口测试及httpclient深入

2015-09-22 09:23 661 查看

接口测试--模拟登陆

场景:服务器根据浏览器中保存的本地cookie判断用户的有效身份

为了使得httpclient发送的请求包含相同的token(模拟浏览器发送请求,一次登陆后,token相同,即被认为是同一个用户的操作),进行如下操作:

1) httpclient模拟登陆后,获取token 并保存;

2) 之后httpclient发送请求前,使用步骤1) 中获取的token发送请求

以上步骤可以预防CSRF攻击,具体参考:
http://qa.blog.163.com/blog/static/1901470022015101293748737/

接口测试工具及特点

名称特点
junit1)提供丰富API支持多种验证结果正确性的逻辑    

2)通过参数化、@before、@after等特性,支持用例代码可复用   

3)suite的模式支持case的批量运行   

4)有展现良好的报表    

5)与eclipse ide集成,使用方便
httpclient支持HTTP协议的客户端编程工具包.

1)封装实现了所有HTTP的方法,如GET,POST,PUT,HEAD   

2)支持redirect,会话保持   

3)支持文件上传 
httpunitHTTP请求的测试辅助工具,能处理web测试的需求 .

相比于HttpClient,不同之处在于:    

1)HttpUnit能对HTTP返回的结果页进行解析,比如DOM元素定位  

2)HttpUnit能自己启动一个servlet来运行被测服务
htmlunitHtmlUnit相比HttpUnit功能更加强大,

HtmlUnit是Junit的扩展测试框架之一,开发者可以使用其提供的API对页面的元素进行操作。

页面的各种元素都可以被当作对象进行调用,对JavaScript的支持也比较好。
jwebunitJWebUnit以HttpUnit和JUnit为基础的一个web测试工具。

可以用来验证链接跳转、表单输入和提交、表格内容以及Web应用程序特性的正确性。

相比于HtmlUnit,JWebUnit封装的更友好,编写case也会更加简单
  
以上摘录自:http://wenku.baidu.com/link?url=mjczcVqjnA61mXqhJLpirHxKg3k0vzK-RDVu3PzBGNFtKgN6hm_HuqBNXg-RwSqfg-7V0xmyNL_kTNgc1rwjuMUHfRRiAND7AstCjxOsZFu

深入httpclient

java 引入httpclient后,发送http请求获取json 与浏览器间接请求接口返回的json(手动调用url的json)的区别:

httpclient后,发送http请求获取json : 只保证array 中的顺序(与手动调用url返回的一致),其他顺序不保证(和手动调用url返回的json顺序不一致)

httpclient调接口返回的json :



手动调用url的json返回:



net.sf.json.JSONObject 和org.json.JSONObject 的差别

参考:http://my.oschina.net/wangwu91/blog/340721

不同的方面        

net.sf.json.JSONObject

org.json.JSONObject

创建json对象//没有 new JSONObject(String)的构造方法

JSONObject json = JSONObject.fromObject(str); 
String str = "";// 一个json串

JSONObject json = new JSONObject(str);
解析json没有严格要求获取字段的类型跟getXXX()的类型一样

精度可能会丢失
获取的字段类型必须跟getXXX()的类型一样

精度不会丢失
从json中获取数组可以使用if(o instanceof JSONArray) 判断类型可能抛异常:JSONArray subArray =obj.getJSONArray(key)
size大小(数组)int leng = subArray.size();int leng = subArray.length();
   
建议: 为了遍历的方便和,不抛出异常,建议使用 net.sf.json.JSONObject

httpclient设置超时时间

设置的用途

不设置的后果就是一旦对方服务器出现无响应的情况,如果有返回(404
50x)错误还好,没有返回的话,java线程会一直等待。设置后,超时系统抛出异常。

超时时间类型

A
   连接超时(connectionTimeout ): 连接一个url的连接等待时间

例如:
client.getHttpConnectionManager().getParams().setConnectionTimeout(3000);

B
 读取数据超时(soTimeout ):连接上一个url,获取response的返回等待时间
例如:
client.getHttpConnectionManager().getParams().setSoTimeout(2000);

httpclient4的设置方式和httpclient3有所不同,代码如下:

HttpClient
httpclient =
new
DefaultHttpClient();

httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
Config.20000);//连接时间20s
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
60000);//数据传输时间60s

DefaultHttpClient 设置超时机制
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000);
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: