性能测试持续学习 jmeter URL 请求参数中含有 JSON 数据格式怎么处理

会飞的猪 · 2019年11月13日 · 1163 次阅读

比如一个 GET 请求如下图所示:
eg:http://127.0.0.1:80/api/search?start=0&rows=10account_id=11111&abcMaps=abcfileter":[],"tacMap":{},""rangeFilterMap":{},"sortList":[is_toppedling":"DESC"},created":"ASC"}]}{"
如果不做处理可能会报这种错误:
java.net.URISyntaxException: Illegal character in query
at java.net.URI$Parser.fail(URI.java:2848)
at java.net.URI$Parser.checkChars(URI.java:3021)
at java.net.URI$Parser.parseHierarchical(URI.java:3111)
at java.net.URI$Parser.parse(URI.java:3053)
at java.net.URI.<init>(URI.java:588)
at java.net.URL.toURI(URL.java:946)

遇到这种情况该怎么处理呢

可采用三种方式处理:
1、遇到单个请求可以直接在浏览器请求一次,然后抓包保存一下,再用 jmeter 发送请求。

2、对应的参数勾选 encode

3、对请求的 URL ?后面的请求进行 BeanShell PreProcessor 处理,代码如下所示:推荐第三种做法
import java.net.URLEncoder;
import java.net.URLDecoder;
String userno1 = vars.get("params");
String[] parmsArr = userno1.split("&");
StringBuilder sb = new StringBuilder();

for(String param : parmsArr){
String[] arr = param.split("=");
String key = arr[0];
String value = arr[1];
try {
sb.append(key).append("=").append(URLEncoder.encode(value, "UTF-8")).append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

vars.put(key, value);
}

vars.put("params", sb.toString());
vars.get("params")
若出现以下错误:
2019-12-18 13:44:27,830 WARN o.a.j.p.h.v.RequestViewHTTP: Error decoding query, maybe your request parameters should be encoded:5 c8[-j4?v-]]<fq_}RrNXB/:\LjS:SvxzW,"1x/wj+I] d%fGQpFfS!@`g(RRh@EaFR.QXETnfX6fK@E'T1bY8,*#t%OA%RAP
则是编码集的问题。
text 文本以 UTF-8 方式存储,可以把文本串放到 text 里,然后 csv 读取文件编码用 utf-8,发送出去的 content 配置成 utf-8.完美解决问题。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册