首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

使用httpClient进展接口测试

2014-01-03 
使用httpClient进行接口测试概述现今很多Web应用开发都是分前后台的,后台开发提供接口调用返回Json对象,前

使用httpClient进行接口测试

概述

现今很多Web应用开发都是分前后台的,后台开发提供接口调用返回Json对象,前台使用JS框架去加载后台返回的Json.本文以实例简述如何通过HttpClient测试这样的后台接口

?

处理Json对象的基本API

JSON包中最常用的两个类就是JSONObject和JSONArray,具体可以参考JSON for java入门总结

如下是自己模仿的简单例子:

package com.james.json;import org.json.JSONArray;import org.json.JSONObject;public class JsonTest {public static void main(String[] args) {// Test JSONObject.JSONObject jsonobj = new JSONObject("{'name':'jingshou','age':30}");          String name = jsonobj.getString("name");          int age = jsonobj.getInt("age");        System.out.println(jsonobj.toString());        System.out.println(name+":"+age);         System.out.println("**********");                // Test JSONArray.        JSONArray jsonarray = new JSONArray("[{'name':'jingshou','age':30},{'name':'xiaohong','age':29}]");          for(int i=0;i<jsonarray.length();i++){        JSONObject jo = jsonarray.getJSONObject(i);        System.out.println(jo);            String name1 = jo.getString("name");            int age1 = jo.getInt("age");            System.out.println("name1= "+name1);            System.out.println("age1= "+age1);        }}}

?运行结果如下:

{"age":30,"name":"jingshou"}jingshou:30**********{"age":30,"name":"jingshou"}name1= jingshouage1= 30{"age":29,"name":"xiaohong"}name1= xiaohongage1= 29

?从以上例子我们看到的基本事实是:

可以通过字符串直接构造一个JSONObjectJSONObject里的key在显式传入的时候是用单引号包裹起来的,但是打印出来的时候依然是我们期望的双引号

使用httpclient处理API返回

如下例子演示如何使用httpClient获取API返回的JSON字符串以及处理:

package com.james.json;import java.io.IOException;import org.apache.http.HttpEntity;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONObject;public class SimpleServiceTest {public static void main(String[] args) throws ClientProtocolException, IOException {CloseableHttpClient httpclient = HttpClients.createDefault();HttpPost httppost = new HttpPost("http://jingshou.com/admin/searchUser.action?search_loginid=jingshou");CloseableHttpResponse response = httpclient.execute(httppost);try {HttpEntity myEntity = response.getEntity();System.out.println(myEntity.getContentType());System.out.println(myEntity.getContentLength());String resString = EntityUtils.toString(myEntity);            // 使用返回的字符串直接构造一个JSONObjectJSONObject jsonobj = new JSONObject(resString);System.out.println(jsonobj.toString());// 获取返回对象中"resultSize的值"int resutltSize = jsonobj.getInt("resultSize");System.out.println("Search Results Size is: "+ resutltSize); // 获取"clients"的值,它是一个JSONArrayJSONArray jsonarray = jsonobj.getJSONArray("clients");System.out.println(jsonarray.toString());        } finally {    response.close();}}}

运行结果如下:

Content-Type: text/plain; charset=UTF-8-1{"resultSize":1,"clients":[{"expirationDate":0,"reqStatus":0,"mostRecentActivity":1388376890000,"clientName":"Jingshou Li","company":"Pending","internal":true,"clientId":"jingshou","salesNames":"","disabled":false}]}Search Results Size is: 1[{"expirationDate":0,"reqStatus":0,"mostRecentActivity":1388376890000,"clientName":"Jingshou Li","company":"Pending","internal":true,"clientId":"jingshou","salesNames":"","disabled":false}]

?小结:

通过API返回的JSON字符串直接构造JSON对象如果要读取JSONObject内部数据,需要事先知道对象的结构,所以以上处理方法不具有通用性,只能处理特定的返回

补充学习:

http://cgs1999.iteye.com/blog/1608003http://cgs1999.iteye.com/blog/1609756

原创文章,转载请注明出处,原文地址:使用httpClient进行接口测试

1 楼 liujiawinds 22 小时前   这个东西我感觉还不如直接在前台返回的时候直接alert出来。 2 楼 lijingshou 22 小时前   liujiawinds 写道这个东西我感觉还不如直接在前台返回的时候直接alert出来。
这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码 3 楼 liujiawinds 21 小时前   lijingshou 写道liujiawinds 写道这个东西我感觉还不如直接在前台返回的时候直接alert出来。
这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码
自动化测试,表示一点也不懂 4 楼 lijingshou 21 小时前   liujiawinds 写道lijingshou 写道liujiawinds 写道这个东西我感觉还不如直接在前台返回的时候直接alert出来。
这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码
自动化测试,表示一点也不懂
换个方式说,为了要验证那些返回的JSON,我还有可能从DB或者外部的配置文件去读取数据做个比较.我需要的不仅是返回的数据,还要验证返回的正确性.
如果系统有100个这样的API,我可能会写100个测试代码去验证它,然后将来可以做回归测试用.. 5 楼 liujiawinds 18 小时前   lijingshou 写道liujiawinds 写道lijingshou 写道liujiawinds 写道这个东西我感觉还不如直接在前台返回的时候直接alert出来。
这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码
自动化测试,表示一点也不懂
换个方式说,为了要验证那些返回的JSON,我还有可能从DB或者外部的配置文件去读取数据做个比较.我需要的不仅是返回的数据,还要验证返回的正确性.
如果系统有100个这样的API,我可能会写100个测试代码去验证它,然后将来可以做回归测试用..
虽然还是不是很清楚,应该是我的技术水平有限吧,还是很感谢。
有一个疑问,为什么代码里面有try无catch

热点排行