解决MeterSphere前置处理Beanshell 无法从sampler.getArguments()拿取get请求参数

起因

因为项目请求需要经过加密,而加密需要在请求前拿取请求参数,进行加密后重新给请求头中sign等字段赋值,所以需要拿取现有请求入参,并转为map以便后续处理,Jmeter Beanshell代码如下:

import org.apache.jmeter.config.Arguments;

//获取请求入参args,转为map
Arguments args = sampler.getArguments();
log.info("请求数据====" + args);
Map argsMap = args.getArgumentsAsMap();
log.info("argsMap    ==============" + argsMap);


但以上代码在MeterSphere中无法拿取到get请求 (MeterSphere版本 v1.20.6-lts)(而且奇怪的是post请求的入参是可以拿取到的)

解决

所以需要手动从url中拿取String格式的参数字段,再自己进行处理,代码如下:

String requestQuery = sampler.getUrl().getQuery();
//此处requestQuery拿取的为get请求url中?后面的内容
log.info("请求数据====" + requestQuery);


//转map
Map argsMap = new HashMap(0);
String[] params = requestQuery.split("&");
for (int i = 0; i < params.length; i++) {
    String[] p = params[i].split("=");
    if (p.length == 2) {
        argsMap.put(p[0], p[1]);
    }
}