本人最近在使用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, "参数不能为空!"));
}
}
欢迎留言,测试聚集。
















