jmeter --> 后置处理器 --> BeanShell后置处理程序

BeanShell 脚本语言—— 它是一种基于 Java 语法的轻量级脚本语言,核心特点是「完全兼容 Java 基础语法」,同时支持脚本语言的动态特性,无需编译即可执行,非常适合快速编写自定义逻辑。
BeanShell脚本可直接调用JMeter内置变量和Java 类库,实现灵活的业务逻辑。


常用内置变量

  • prev:获取当前取样器的响应信息(最常用),例如:
    — prev.getResponseDataAsString():获取响应体字符串;
    — prev.getResponseCode():获取响应状态码;
    — prev.getURL():获取请求 URL;
  • vars:操作 JMeter 局部变量(仅当前线程组有效),例如:
    — vars.put(“key”, “value”):设置局部变量;
    — vars.get(“key”):获取局部变量;
  • props:操作JMeter 全局变量(所有线程组共享),
    — 用法同vars(如 props.put(“globalKey”, “value”));
  • log:输出日志到 JMeter 控制台 / 日志文件,例如:
    — log.info(“响应数据:” + prev.getResponseDataAsString());

1. 页面解析

在这里插入图片描述

== 暂时一下beanshell语法的书写。
== 下面是两种将时间打印到日志的方法。

// 将含毫秒的时间戳打印到日志中
// 1. 获取毫秒级是时间戳(long类型)
long timeSampMs = System.currentTimeMillis();
// 2. 转为String,存为JMeter变量(变量名自定义)
vars.put("timeSampMs",String.valueOf(timeSampMs));
// 3. 将变量打印到日志;
long.info("当前毫秒级时间戳:"+vars.get("timeSampMs"))


// 将获取的格式化时间戳("YYYY-MM-dd HH:MM:ss")打印到日志中
// 1. 导入时间格式化类(必须加,否则报错)
import	java.text.SimpleDateFormat;
import	java.util.Date;
// 2. 定义时间格式(可自定义)
SimpleDateFormat adf = new SimpleDateFormat("YYYY-MM-dd HH:MM:ss")
// 3. 获取当前时间并格式化,存为Jmeter变量(变量名自定义)
String timeStampFormat = sdf.format(new Date()); 
vars.put("timeStampFormat ",timeStampFormat);
// 4. 将格式化时间打印到日志;
long.info("当前毫秒级时间戳:"+vars.get("timeSampMs"))

(1)重置解释器
控制 BeanShell 解释器的生命周期,即每次执行脚本时是否重置解释器实例,直接影响脚本执行效率和变量状态;

配置值作用执行效率变量状态适用场景
false(默认)不重置解释器,复用同一个解释器实例高(脚本仅编译一次,后续直接执行)解释器中的全局变量(如脚本中定义的静态变量、类变量)会保留上次执行的状态1. 脚本逻辑固定,无全局变量污染风险;
2. 高并发 / 大量取样器场景(追求性能);
3. 多次执行脚本需复用变量状态(如累计计数)
true每次执行脚本前,销毁旧解释器并创建新实例低(每次执行都需重新编译脚本、初始化解释器)解释器中的全局变量完全重置(无残留状态)1. 脚本中定义了全局变量 / 静态变量(避免上次执行的变量影响本次结果);
2. 脚本逻辑频繁修改(需确保执行最新脚本);
3. 避免不同取样器执行时的状态污染(如多线程下全局变量冲突)


(2) 参数 向BeanShell脚本传递外部动态值
脚本通过 args 数组 读取参数(下标从 0 开始,args[0] 对应第一个参数,args[1] 对应第二个,以此类推);

  • 用法:参数之间用空格分隔,例如输入 param1 param2 param3;
  • 脚本中获取:
    String param1 = args[0];(基本获取,获取第一个参数,转为字符串),
    int param2 = Integer.parseInt(args[1]); (类型转换,参数默认是字符串,需手动转为数字 / 布尔等类型),
    int paramCount = args.length;(参数长度,获取传递的参数总数,避免数组越界)
/* 实操示例
		步骤1. 在【参数】输入框中输入:name(或 age,后续可直接修改参数切换字段)
		步骤2:编写脚本	
*/
// 1. 获取响应体字符串
String response = prev.getResponseDataAsString();
// 2. 获取参数(第一个参数是要提取的字段名)
String targetField = args[0]; // args[0] = "name"(从参数传入)
// 3. 解析响应体,提取指定字段(简化 JSON 解析,实际可结合 fastjson)
String fieldValue = "";
if (response.contains("\"" + targetField + "\":")) {
    fieldValue = response.split("\"" + targetField + "\":\"")[1].split("\"")[0];
};
// 4. 设置局部变量,存储结果到 JMeter 变量
vars.put("extractedValue", fieldValue);
// 5. 日志输出
log.info("提取字段【" + targetField + "】的值:" + fieldValue);

/*
		步骤 3:灵活切换场景
		想提取 “age”:直接修改参数为 age(无需改脚本);
		想提取 “city”:参数改为 city 即可
*/


(3) 文件名 加载外部 BeanShell 脚本文件(.bsh 或 .txt 格式)
通过加载 BeanShell 脚本文件替代在 JMeter 界面的 “脚本编辑区” 写代码。
文件格式:后缀为 .bsh(BeanShell 原生后缀)或 .txt(文本格式也支持);
文件路径:填写脚本文件的绝对路径或相对路径;
脚本内容:与 JMeter 界面 “脚本编辑区” 的代码完全一致,可直接使用 prev、vars、log 等内置变量;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值