前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >获取HTTP请求对象--测试框架视频讲解

获取HTTP请求对象--测试框架视频讲解

作者头像
FunTester
发布2020-03-23 14:28:26
5480
发布2020-03-23 14:28:26
举报
文章被收录于专栏:FunTesterFunTester

之前有了个序FunTester测试框架视频讲解(序),反响不错,今天来讲讲测试框架中另外一个核心的类FanLibrary中获取HttpRequestBase对象的方法。

主要分为HTTPgetHTTPpost,参数也分jsonform形式,还有文件传输等等。下期讲讲发送请求和解析响应结果。

http://mpvideo.qpic.cn/0bf25iaagaaaeeaigodqojpfb2wdapvaaaya.f10002.mp4?dis_k=5528db393caa0b2408ca451f1df8ec8c&dis_t=1584944869

点击阅读原文访问gitee地址

代码如下:

代码语言:javascript
复制
    /**
     * 方法已重载,获取get对象
     * <p>方法重载,主要区别参数,会自动进行urlencode操作</p>
     *
     * @param url  表示请求地址
     * @param args 表示传入数据
     * @return 返回get对象
     */
    public static HttpGet getHttpGet(String url, JSONObject args) {
        if (args == null || args.size() == 0) return getHttpGet(url);
        String uri = url + changeJsonToArguments(args);
        return getHttpGet(uri.replace(" ", ""));
    }

    /**
     * 方法已重载,获取get对象
     * <p>方法重载,主要区别参数,会自动进行urlencode操作</p>
     *
     * @param url 表示请求地址
     * @return 返回get对象
     */
    public static HttpGet getHttpGet(String url) {
        return new HttpGet(url);
    }

    /**
     * 获取post对象,以form表单提交数据
     * <p>方法重载,文字信息form表单提交,文件信息二进制流提交,具体参照文件上传的方法主食,post请求可以不需要参数,暂时不支持其他参数类型,如果是公参需要在url里面展示,需要传一个json对象,一般默认args为get公参,params为post请求参数</p>
     *
     * @param url    请求地址
     * @param params 请求数据,form表单形式设置请求实体
     * @return 返回post对象
     */
    public static HttpPost getHttpPost(String url, JSONObject params) {
        HttpPost httpPost = getHttpPost(url);
        setFormHttpEntity(httpPost, params);
        httpPost.addHeader(HttpClientConstant.ContentType_FORM);
        return httpPost;
    }

    /**
     * 获取httppost对象,没有参数设置
     * <p>方法重载,文字信息form表单提交,文件信息二进制流提交,具体参照文件上传的方法主食,post请求可以不需要参数,暂时不支持其他参数类型,如果是公参需要在url里面展示,需要传一个json对象,一般默认args为get公参,params为post请求参数</p>
     *
     * @param url
     * @return
     */
    public static HttpPost getHttpPost(String url) {
        return new HttpPost(url.replace(" ", ""));
    }

    /**
     * 获取httppost对象,json格式对象,传参时手动tostring
     * <p>新重载方法,适应post请求json传参,估计utf-8编码格式</p>
     *
     * @param url
     * @param params
     * @return
     */
    public static HttpPost getHttpPost(String url, String params) {
        HttpPost httpPost = getHttpPost(url);
        httpPost.setEntity(new StringEntity(params, DEFAULT_CHARSET.toString()));
        httpPost.addHeader(HttpClientConstant.ContentType_JSON);
        return httpPost;
    }

    /**
     * * 获取httppost对象,json格式对象,传参时手动tostring
     * <p>新重载方法,适应post请求json传参</p>
     *
     * @param url
     * @param args
     * @return
     */
    public static HttpPost getHttpPost(String url, JSONObject args, String params) {
        return getHttpPost(url + changeJsonToArguments(args), params);
    }

    /**
     * 获取 httppost 请求对象
     * <p>方法重载,文字信息form表单提交,文件信息二进制流提交,具体参照文件上传的方法主食,post请求可以不需要参数,暂时不支持其他参数类型,如果是公参需要在url里面展示,需要传一个json对象,一般默认args为get公参,params为post请求参数</p>
     *
     * @param url    请求地址
     * @param args   请求地址参数
     * @param params 请求参数
     * @return
     */
    public static HttpPost getHttpPost(String url, JSONObject args, JSONObject params) {
        return getHttpPost(url + changeJsonToArguments(args), params);
    }


    /**
     * 获取 httpPost 对象
     * <p>方法重载,文字信息form表单提交,文件信息二进制流提交,具体参照文件上传的方法主食,post请求可以不需要参数,暂时不支持其他参数类型,如果是公参需要在url里面展示,需要传一个json对象,一般默认args为get公参,params为post请求参数</p>
     *
     * @param url    请求地址
     * @param args   请求通用参数
     * @param params 请求参数,其中二进制流必须是 file
     * @param file   文件
     * @return
     */
    public static HttpPost getHttpPost(String url, JSONObject args, JSONObject params, File file) {
        return getHttpPost(url + changeJsonToArguments(args), params, file);
    }

    /**
     * 获取 httpPost 对象
     * <p>方法重载,文字信息form表单提交,文件信息二进制流提交,具体参照文件上传的方法主食,post请求可以不需要参数,暂时不支持其他参数类型,如果是公参需要在url里面展示,需要传一个json对象,一般默认args为get公参,params为post请求参数</p>
     *
     * @param url    请求地址
     * @param params 请求参数,其中二进制流必须是 file
     * @param file   文件
     * @return
     */
    public static HttpPost getHttpPost(String url, JSONObject params, File file) {
        HttpPost httpPost = getHttpPost(url);
        setMultipartEntityEntity(httpPost, params, file);
        return httpPost;
    }

    /**
     * 设置二进制流实体,params 里面参数值为 file
     *
     * @param httpPost httpPsot 请求
     * @param params   请求参数
     * @param file     文件
     */
    private static void setMultipartEntityEntity(HttpPost httpPost, JSONObject params, File file) {
        logger.debug("上传文件名:{}", file.getAbsolutePath());
        String fileName = file.getName();
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            logger.warn("读取文件失败!", e);
        }
        Iterator<String> keys = params.keySet().iterator();// 遍历 params 参数和值
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();// 新建MultipartEntityBuilder对象
        while (keys.hasNext()) {
            String key = keys.next();
            String value = params.getString(key);
            if (value.equals("file")) {
                builder.addBinaryBody(key, inputStream, ContentType.create(HttpClientConstant.CONTENTTYPE_MULTIPART_FORM), fileName);// 设置流参数
            } else {
                StringBody body = new StringBody(value, ContentType.create(HttpClientConstant.CONTENTTYPE_TEXT, DEFAULT_CHARSET));// 设置普通参数
                builder.addPart(key, body);
            }
        }
        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);
    }

  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档