zoukankan      html  css  js  c++  java
  • HTTP接口测试基础【FunTester框架教程】

    今天继续编写FunTester测试框架的教程,主要内容是HTTP接口测试基础,分为请求(GET、POST、PUT等)、请求头、cookie、响应、JSON以及资源释放。

    之前的FunTester教程文章以及相关文章比较凌乱,没有进行较好的整理,我都是学到哪写到哪,欢迎有兴趣Tester一起交流。下面是一些相对基础的文章,如果想了解实现细节的可以读一读,如下:

    后面这俩用的不多,可以读一读,HTTP proxy主要用来防爬虫用的,HTTP异步请求我会在最近的文章中分享HTTP异步请求在性能测试中的使用。

    PS:下面代码使用Java语言演示。

    准备工作

    首先得创建一个Java类,然后继承一下com.funtester.httpclient.FunLibrary,再添加一个main方法。

    package com.funtest.study;
    
    import com.funtester.httpclient.FunLibrary;
    
    public class FunTester extends FunLibrary {
    
        public static void main(String[] args) {
    
        }
    }
    
    

    请求

    HTTP协议的请求相对于一个对象,我用了org.apache.http.client.methods.HttpRequestBase这个对象作为基础类,这也是HttpClient自带的类。

    HTTP请求方式的不同,又分为不同的实现类。例如HTTPget、HTTPpost、HTTPPUT等。其中最常用的就是GET和POST,本教程也主要以这两种请求对象来演示FunTester测试框架的使用。

    GET

    GET请求比较简单,传参的话只有一种方式,这里FunTester封装了一个没有参数的方法和一个JSON格式的请求参数。

    源码就不赘述了,分享两个方法如何创建HTTPget请求对象。

    
        public static void main(String[] args) {
    
            String url = "http://localhost:12345/m/info";//请求地址
            JSONObject params = new JSONObject();//参数
            params.put("name", "FunTester");
            params.put("uid", 123456);
            
            //无参创建HTTPget对象
            HttpGet httpGet = getHttpGet(url);
    
            //有参创建HTTPget对象
            HttpGet httpGet1 = getHttpGet(url, params);
    
        }
    
    

    POST

    POST请求传参稍微多一点,主要是因为POST请求参数放在requestbody,参数分成两种一种:JSON/text、form表单,在POST请求表单格式默认使用x-www-form-urlencoded格式的。至于POST请求上传文件的,大家可以参考httpclient上传文件方法的封装,工作中用到太少了。

        public static void main(String[] args) {
    
            String url = "http://localhost:12345/m/info";//请求地址
            JSONObject params = new JSONObject();//参数
            params.put("name", "FunTester");
            params.put("uid", 123456);
    
            //无参创建HTTPpost对象
            HttpPost httpPost = getHttpPost(url);
            
            //json/text格式参数
            HttpPost httpPost1 = getHttpPost(url, params.toString());
    
            //json/text格式参数
            HttpPost httpPost2 = getHttpPost(url, params);
    
        }
    
    

    header

    这个相对简单,封装了一个方法com.funtester.httpclient.FunLibrary#getHeader,这里需要一个向请求对象添加header,是因为工作中一般都是封装好的框架,不会在业务模块处理header。

    下面以GET请求演示添加header:

        public static void main(String[] args) {
    
            String url = "http://localhost:12345/m/info";//请求地址
    
            HttpGet httpGet = getHttpGet(url);
            //添加header
            httpGet.addHeader(getHeader("name","FunTester"));
    
        }
    

    cookie

    首先我建议各位先读一读httpclient处理多用户同时在线,这篇文章中对于HttpClient连接池管理器中关于cookie的设置。

    这里的cookie,也是用JSON数据格式的,FunTester封装了一个方法用于将cookie转成header,FunTester只保留了cookie中的key-value。

        public static void main(String[] args) {
    
            String url = "http://localhost:12345/m/info";//请求地址
            JSONObject cookie = new JSONObject();//参数
            cookie.put("name", "FunTester");
            cookie.put("uid", 123456);
    
            HttpGet httpGet = getHttpGet(url);
            //添加cookie
            httpGet.addHeader(getCookies(cookie));
    
        }
    
    

    响应

    这里FunTester测试框架提供一个基础的方法com.funtester.httpclient.FunLibrary#getHttpResponse,请求参数是org.apache.http.client.methods.HttpRequestBase,改方法会把响应封装成JSON对象。如果响应非JSON格式,会转成JSON格式。具体的代码如下:

        /**
         * 根据解析好的content,转化{@link JSONObject}对象
         *
         * @param content
         * @return
         */
        private static JSONObject getJsonResponse(String content, JSONObject cookies) {
            JSONObject jsonObject = new JSONObject();
            try {
                if (StringUtils.isEmpty(content)) ParamException.fail("响应为空!");
                jsonObject = JSONObject.parseObject(content);
            } catch (JSONException e) {
                jsonObject = new JSONObject() {{
                    put(RESPONSE_CONTENT, content);
                    put(RESPONSE_CODE, TEST_ERROR_CODE);
                }};
                logger.warn("响应体非json格式,已经自动转换成json格式!");
            } finally {
                if (cookies != null && !cookies.isEmpty()) jsonObject.put(HttpClientConstant.COOKIE, cookies);
                return jsonObject;
            }
        }
    
    

    这里我会解析响应header中的set-cookie字段,把所有信息的key-value转成JSON,存放在响应JSON的最外层key=cookie。同时我会将响应的HTTPcode存放在响应JSON最外层key=FunTester中,这两个特点需要大家在自己编写项目框架的过程中自己处理一下。

    com.funtester.httpclient.FunLibrary#getHttpResponse方法使用如下:

        public static void main(String[] args) {
    
            String url = "http://localhost:12345/m/info";//请求地址
    
            HttpGet httpGet = getHttpGet(url);
            
            //获取请求响应
            JSONObject response = getHttpResponse(httpGet);
            
        }
    
    

    JSON

    这个地方我之前录了视频,主要讲了一些JSON基础操作。

    资源释放

    这个地方我已经在单个请求过程中的资源释放了。另外我还封装了一个方法用来全局回收资源的。当然如果只是单机版的FunTester测试框架的话,可以通过关闭JVM达到资源回收的目的。

        /**
         * 结束测试,关闭连接池
         */
        public static void testOver() {
            try {
                ClientManage.httpsClient.close();
                ClientManage.httpAsyncClient.close();
            } catch (Exception e) {
                logger.warn("连接池关闭失败!", e);
            }
        }
    

    下期分享接口实践,欢迎大家关注FunTester后续教程。

    Have Fun ~ Tester !

  • 相关阅读:
    float对内联元素和块元素的影响
    行内元素的困扰
    Nodejs同步和异步编程
    let、const、var的区别
    作用域
    SpringMVC
    MVC2新闻编译与发布
    JSP显示新闻
    servlet应用
    SWPU邮件登录界面的仿写(第二次作业)
  • 原文地址:https://www.cnblogs.com/FunTester/p/15186529.html
Copyright © 2011-2022 走看看