你笑了

你的笑,是星星跳跃浪花的笑

0%

JMeter 有用的脚本

脚本

一些场景下的预处理和后处理脚本

BeanShell 只执行一次脚本

  • 背景

    线程组中,默认每个线程都会执行一次脚本。对于获取类接口,只想处理一次响应

  • 脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    String 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
    13
    String 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import groovy.json.JsonBuilder

// CSV文件路径
String csvFilePath = "/home/lfp/JMeter/device_list.csv"

List<String> dataList = []

// 读取CSV文件
new File(csvFilePath).eachLine { line ->
// CSV文件以逗号分隔,这里只读取每行的第一个字段
String data = line.split(",")[0]
dataList.add(data)
}
log.info(">>>>>>>>>>>>>>"+dataList);

// 随机选择10个
dataList.shuffle();
List<String> deviceList = dataList.take(10)

// 构建JSON对象
def json = new JsonBuilder()
json {
device_id_list deviceList
}

// 将JSON对象转换为字符串
String jsonString = json.toString()

// 存储JSON字符串到JMeter变量,在请求体中使用
vars.put("jsonRequestBody", jsonString)