脚本
一些场景下的预处理和后处理脚本
BeanShell 只执行一次脚本
背景
线程组中,默认每个线程都会执行一次脚本。对于获取类接口,只想处理一次响应
脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15String threadName = Thread.currentThread().getName();
FileWriter fstream = new FileWriter("/home/lfp/JMeter/device_list.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
// 通过线程名称,达到只处理一次的效果
// 当前线程组中,线程编号格式为:线程组idx-线程idx,例如 '8-12','-1'就表示第一个线程
if(threadName.endsWith("-1")){
for(int i=1; i<51; i++){ // 这里的个数需要与返回list的长度相同
log.info("==id====>"+vars.get("device_id_"+i));
log.info("==name==>"+vars.get("device_name_"+i));
out.write(vars.get("device_id_"+i)+',');
out.write(vars.get("device_name_"+i)+'\n');
}
}
out.close();
fstream.close();
BeanShell 生成请求参数并保存CSV
背景
后面的请求需要用到当前请求中动态生成的参数
传递给Beanshell 的参数
1
Parameters:${__UUID()} ${__RandomString(5,qwertyuiop)}
将通过 JMeter函数动态生成的值传递给 bsh.args。注意两个变量之间用空格分开
脚本
1
2
3
4
5
6
7
8
9
10
11
12
13String deviceId = bsh.args[0];
log.info("pre==========>"+deviceId);
String deviceName = bsh.args[1];
log.info("pre==========>"+deviceName);
FileWriter fstream = new FileWriter("/home/lfp/JMeter/device_list.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(deviceId+',');
out.write(deviceName+'\n');
out.close();
fstream.close();
JSR223 预处理CSV文件构建JSON对象
背景
需要从 csv 中读取数据构造请求体中用到的数组,但是通过 JMeter vars 变量只能传递字符串,因此直接构建一个JSON字符串,请求消息体通过
${jsonRequestBody}
引用脚本语言选择 groovy
脚本
1 | import groovy.json.JsonBuilder |