前言:因为是线上环境不太方便,下面是自己本地模拟了一个环境,方便说明效果。
使用 Metersphere ,以 get 请求的方式请求接口报错。
请求地址
https://343347634.tunnel.1apm.com/index?request={"params":{"beginTime":"2017-01-01 00:00:00","endTime":"2017-01-25 00:00:00","userSatisfy":"1","userSatisfy2":"1","serviceTypeId":"otck"}}
请求方式为 GET
正常结果就是输出入参。
以上是正确结果
可以看到错误是 url 没有编码导致的,也就是说入参需要进行编码,MS 提供了这样一个功能
点击后面的小齿轮,设置编码,然后再次请求。
发现入参并没有编码,经过调研,最终得出结论,MS 默认的 jmeter 客户端是 httpclient4 的,所以直接这样是没有办法编码的。
如果想验证的话,直接通过 jmeter 可以去进行验证。选择不同的客户端验证即可
对接 MS 来讲我们可以通过前置脚本编码的方式进行处理。
// 源数据,一定记着添加转义符
String str="{\"params\":{\"beginTime\":\"2017-01-01 00:00:00\",\"endTime\":\"2017-01-25 00:00:00\",\"userSatisfy\":\"1\",\"userSatisfy2\":\"1\",\"serviceTypeId\":\"otck\"}}";
// url编码
String data=URLEncoder.encode(str,"UTF-8");
// 放入变量
vars.put("req",data);
String str="{\"params\":{\"beginTime\":\"2017-01-01 00:00:00\",\"endTime\":\"2017-01-25 00:00:00\",\"userSatisfy\":\"1\",\"userSatisfy2\":\"1\",\"serviceTypeId\":\"otck\"}}";
log.info(str);
vars.put("req",str);
结果是一样的。