`

使用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= jingshou
age1= 30
{"age":29,"name":"xiaohong"}
name1= xiaohong
age1= 29

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

  • 可以通过字符串直接构造一个JSONObject
  • JSONObject里的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);
            // 使用返回的字符串直接构造一个JSONObject		
			JSONObject jsonobj = new JSONObject(resString);
			System.out.println(jsonobj.toString());
			// 获取返回对象中"resultSize的值"
			int resutltSize = jsonobj.getInt("resultSize");
			System.out.println("Search Results Size is: "+ resutltSize); 
			// 获取"clients"的值,它是一个JSONArray
			JSONArray 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/1608003
  • http://cgs1999.iteye.com/blog/1609756

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

1
4
分享到:
评论
6 楼 lijingshou 2014-01-08  
liujiawinds 写道
lijingshou 写道
liujiawinds 写道
lijingshou 写道
liujiawinds 写道
这个东西我感觉还不如直接在前台返回的时候直接alert出来。

这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码

自动化测试,表示一点也不懂

换个方式说,为了要验证那些返回的JSON,我还有可能从DB或者外部的配置文件去读取数据做个比较.我需要的不仅是返回的数据,还要验证返回的正确性.
如果系统有100个这样的API,我可能会写100个测试代码去验证它,然后将来可以做回归测试用..

虽然还是不是很清楚,应该是我的技术水平有限吧,还是很感谢。
有一个疑问,为什么代码里面有try无catch

首先本来就允许没有catch, finally代表一定会执行
其次这个写法是HttpClient官方例子的写法
5 楼 liujiawinds 2014-01-02  
lijingshou 写道
liujiawinds 写道
lijingshou 写道
liujiawinds 写道
这个东西我感觉还不如直接在前台返回的时候直接alert出来。

这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码

自动化测试,表示一点也不懂

换个方式说,为了要验证那些返回的JSON,我还有可能从DB或者外部的配置文件去读取数据做个比较.我需要的不仅是返回的数据,还要验证返回的正确性.
如果系统有100个这样的API,我可能会写100个测试代码去验证它,然后将来可以做回归测试用..

虽然还是不是很清楚,应该是我的技术水平有限吧,还是很感谢。
有一个疑问,为什么代码里面有try无catch
4 楼 lijingshou 2014-01-02  
liujiawinds 写道
lijingshou 写道
liujiawinds 写道
这个东西我感觉还不如直接在前台返回的时候直接alert出来。

这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码

自动化测试,表示一点也不懂

换个方式说,为了要验证那些返回的JSON,我还有可能从DB或者外部的配置文件去读取数据做个比较.我需要的不仅是返回的数据,还要验证返回的正确性.
如果系统有100个这样的API,我可能会写100个测试代码去验证它,然后将来可以做回归测试用..
3 楼 liujiawinds 2014-01-02  
lijingshou 写道
liujiawinds 写道
这个东西我感觉还不如直接在前台返回的时候直接alert出来。

这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码

自动化测试,表示一点也不懂
2 楼 lijingshou 2014-01-02  
liujiawinds 写道
这个东西我感觉还不如直接在前台返回的时候直接alert出来。

这个目的不是为了看到底返回的是什么东西,目的是去自动化测试.如果只想看返回,根本不想要写代码
1 楼 liujiawinds 2014-01-02  
这个东西我感觉还不如直接在前台返回的时候直接alert出来。

相关推荐

    Httpclient+testng接口测试小例子

    在"Httpclient+testng接口测试小例子"中,我们将使用以下步骤进行接口测试: 1. **环境准备**:首先,确保项目中已经添加了Apache HttpClient和TestNG的依赖。这些通常通过Maven或Gradle等构建工具进行管理,通过在...

    接口自动化测试文档.pdf

    5. 使用HttpClient进行接口测试 使用HttpClient进行接口自动化测试时,可以通过构建HTTP请求对象,设置请求方法(如POST或GET)、URL、请求头和消息体,然后发送请求并解析响应来验证接口功能。例如,POST请求常用于...

    基于jmeter+Java+HttpclientUtil实现的接口测试工具

    基于jmeter+Java+HttpclientUtil实现的接口测试工具,通过Excel表格进行维护接口相关参数信息,借助Jmeter工具通过java请求设计接口测试自动化测试用例。代码重写了JavaSampleClient类,在使用过程中取出了冗余的...

    四、使用HttpClient上传测试文件服务器

    在IT行业中,网络通信是不可或缺的一部分,而...理解HttpClient的工作原理和使用方法,对于进行Web服务的测试和集成具有重要意义。在具体应用时,还需要结合实际的服务器接口文档和项目需求,进行适当的调整和优化。

    httpclient调用接口demo

    本demo有两个例子test是作为服务端开启的,httpclient是客户端调用的,模拟服务端的test在启动后是没有界面的,要加上id才能看到json数据,httpclient的HttpClient33.java是测试类,最后的结果是接受到一个对象。...

    httpclient测试请求方法

    标题中的“httpclient测试请求方法”指的是使用Apache HttpClient库进行HTTP请求的方法。HttpClient是一个功能强大的客户端编程工具包,它允许开发者构建复杂的HTTP客户端应用程序。在本文中,我们将深入探讨...

    软件测试-接口测试.rar

    # 接口测试 HTTP接口测试可以把后台逻辑单独进行测试,便于模块化测试和问题定位;...也可以跟UI自动化测试结合,提高回归测试自动化...|第三章|接口测试工具|Fiddler的使用 PostMan的使用 | |第四章|接口测试自动

    httpClient调用远程接口获取数据到本地文件夹

    在这个例子中,我们使用HttpClient来调用远程接口,从电信公司的网站获取可用手机号码的数据,并将其存储到本地文件系统。以下是对这个过程的详细解释: 1. **HttpClient的引入与配置**: 首先,我们需要在项目中...

    接口测试的方法

    - **Java编程语言**:通过编写Java代码实现接口测试,如使用HttpClient库处理HTTP请求。 #### 六、认证机制 为了确保接口的安全性,通常会采用各种认证机制,如: - **用户名和密码** - **SessionID或AccessToken...

    spring测试HTTPclient来的类

    测试httpclient,主要测试json参数的接口,包括get请求和post请求。

    如何做接口测试

    接口测试的方法有多种,例如使用 jmeter 去测试 HTTP 协议的接口测试,使用 HTTPClient 去测试,也可以编写测试代码去测试 Java 接口。不同的接口测试方法可能是不一致的,但我们只要把被测接口当做是服务方,而把...

    springmvc 接口测试必备

    通过使用HTTPClient这样的客户端库,以及Postman这样的专业测试工具,开发者可以更便捷地进行接口测试,确保每个接口都能正常工作并满足性能要求。在实际工作中,不断熟悉和掌握这些工具的使用,将对提升开发效率和...

    java使用HttpClient发送http请求

    在提供的文件`HttpTest`中,可能包含了使用HttpClient进行测试的代码。这将帮助你更好地理解HttpClient的实际应用和可能遇到的问题。分析这些测试代码,可以帮助你学习如何编写健壮的HTTP请求逻辑,处理各种异常情况...

    接口测试与前端测试的区别与联系

    第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做?第二部分:主要介绍为什么要做接口测试,并简单...

    httpClient 调用远程接口 获取数据到本地文件夹

    在这个场景中,我们使用HttpClient来调用远程接口,从电信公司的网站获取可用的新手机号码信息,并将这些数据存储到本地文件中。以下是对这个过程的详细解释: 1. **HttpClient的基本使用**: HttpClient提供了一...

    java接口测试

    在进行Java接口测试时,可以使用各种工具和库,如Apache HttpClient、OkHttp、Feign等进行HTTP请求,使用JSONassert、Hamcrest等进行断言,使用Mockito或WireMock进行服务模拟。同时,可以利用Spring Boot的测试框架...

    基于HttpClient在HTTP协议接口测试中的使用(详解)

    基于HttpClient在HTTP协议接口测试中的使用详解 在HTTP协议接口测试中,HttpClient是一个非常重要的工具,能够帮助我们模拟HTTP请求,测试接口的正确性和性能。本文将详细介绍基于HttpClient在HTTP协议接口测试中的...

    http远程接口调用-httpClient+跳过SSL证书校验

    本文将详细介绍如何使用Apache HttpClient库进行HTTP远程接口调用,并讲解如何在Java中跳过SSL证书校验。 HttpClient是Apache提供的一款强大的HTTP客户端库,支持多种HTTP协议版本和功能,包括GET、POST请求、...

    接口测试 - 基于HttpClient jar包的封装类

    附件是一个Java类,基于Java的第三方Jar包封装好的,可以直接使用,进行接口测试

    Java防沉迷实名认证系统接口测试代码(全示例通过)

    Java防沉迷实名认证系统接口测试代码主要涉及的是在游戏或网络应用中实施防止过度使用的规定,以保护用户的健康和合理使用时间。这样的系统通常需要用户进行实名认证,通过验证用户的身份信息来限制未成年人的在线时...

Global site tag (gtag.js) - Google Analytics