Jmeter 使用Beanshell PreProcessor在请求前处理sampler请求参数

Jmeter 使用Beanshell PreProcessor在请求前处理sampler请求参数

1. 话不多说先上代码

//引入Argument相关的包
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;

//从sampler中获取参数
Arguments args = sampler.getArguments();

//将参数转化为Map方便使用,需要注意的是Jmeter中的Map不能有类型,否则会报错
Map argsMap = args.getArgumentsAsMap();

//从Map中获取想取得值
String xxx = argsMap.get("xxx");

//省略对值进行加密处理的代码

//增加参数
args.addArgument("sign",sign);
args.addArgument("tm",tm);
args.addArgument("nonceStr",newNonceStr);

2. 官方Javadoc文档

先把链接放在这里:
https://jmeter.apache.org/api/org/apache/jmeter/config/Arguments.html

Beanshell的中文资料出奇的少,特别是详细介绍具体Jmeter函数和对象的。而且,随着版本迭代,大家写的博客等等也会逐渐不可用。中文资料入门尚可,但是看官方文档才是进步的最佳途径。
简单翻译了几个常用的函数标记在了图中:
----_20210405215035

3. 采坑

调试Map的时候,习惯性的在Beanshell里面将Map定义为如下这种格式:

Map<String,Object> map

但是Jmeter有一个坑是不要在Beanshell里面定义Map的类型,否则会报错。
直接声明一个Map即可:

Map map