前言:因为是线上环境不太方便,下面是自己本地模拟了一个环境,方便说明效果。
使用 Metersphere ,以 get 请求的方式请求接口报错。

测试场景

Postman 测试结果

以上是正确结果

Metersphere 测试结果

可以看到错误是 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);

第二种:前置校验只做转义

  1. 脚本中只写转义
  2. 使用 MS 自身功能进行编码
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);

结果是一样的。

总结

  1. 以上就是使用 MS 的一个小技巧。
  2. 核心就是如果入参是 json 字符串,需要进行转义。
  3. url 编码。
  4. 参考地址:get 请求传递 json 入参
  5. 参考地址:关于 jmeter 客户端实现中 HttpClient4 与 Java 的区别


↙↙↙阅读原文可查看相关链接,并与作者交流