本人最近在使用moco框架做测试的过程中,发现在post请求json参数格式时,query请求并不能有效过滤请求参数的情况。通过翻看源码发现问题所在:


package com.github.dreamhead.moco.extractor;


import com.github.dreamhead.moco.HttpRequest;

import com.github.dreamhead.moco.HttpRequestExtractor;

import com.google.common.base.Optional;


import static com.google.common.base.Optional.fromNullable;


public class ParamRequestExtractor extends HttpRequestExtractor<String[]> {

    private final String param;


    public ParamRequestExtractor(final String param) {

        this.param = param;

    }


    @Override

    protected Optional<String[]> doExtract(final HttpRequest request) {

        String[] reference = request.getQueries().get(this.param);

        return fromNullable(reference);

    }

}


在倒数第二行代码:request.getqueryies()方法,在post请求的时候得到的结果是空,导致无法获取正确的参数值,导致过滤失败。我使用的moco的版本:

    compile group: 'com.github.dreamhead', name: 'moco-core', version: '0.12.0'


暂时没有找到官方的API中关于这个的详尽叙述,所以自己重新写了一个类:

package com.fun.moco;


import com.github.dreamhead.moco.HttpRequest;

import com.github.dreamhead.moco.HttpRequestExtractor;

import com.github.dreamhead.moco.RequestExtractor;

import com.google.common.base.Optional;

import net.sf.json.JSONObject;


import static com.github.dreamhead.moco.util.Preconditions.checkNotNullOrEmpty;

import static com.google.common.base.Optional.fromNullable;


/**

 * json数据格式参数值的获取

 */

public class JsonRequestExtractor extends HttpRequestExtractor<String[]> {


    private final String param;


    public JsonRequestExtractor(final String param) {

        this.param = param;

    }


    @Override

    protected Optional<String[]> doExtract(HttpRequest request) {

        try {

            String s = request.getContent().toString();

            String value = JSONObject.fromObject(s).getString(param);

            return fromNullable(new String[]{value});

        } catch (Exception e) {

            return fromNullable(new String[]{""});

        }

    }


    /**

     * 获取参数的value

     *

     * @param param

     * @return

     */

    public static RequestExtractor<String[]> queryJson(final String param) {

        return new JsonRequestExtractor(checkNotNullOrEmpty(param, "参数不能为空!"));

    }

}

欢迎留言,测试聚集。