自动化工具 MeterSphere 请求参数乱码问题

灬囖 · 2023年02月20日 · 2908 次阅读

前言:因为是线上环境不太方便,下面是自己本地模拟了一个环境,方便说明效果。
使用 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

  • 正常结果就是输出入参。

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 的区别
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册