【Jmeter BeanShell】的使用场景详解
创始人
2025-05-28 17:35:12

 

目录:导读

BeanShell简介

场景使用

场景1

场景2

正则提取器+beanShell组合使用

Json提取器+beanShell组合使用

写在最后


BeanShell简介

Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javaScript 和 perl。

场景使用

场景1

1、请求头中参数需要做哈希256加密,如果在内置函数处理不了的情况,首先考虑的就是使用beanShell取样器,如图:

备注:这里可以将接口的请求报文放到beanshell里面,并且还可以使用内置函数进行参数化,当然也可以自己写。

场景2

1、两个接口A和B,接口A的响应报文中有一个List数据,是接口B请求报文的参数,这个时候使用正则或Json提取器都无法全部一次提取到这个列表,需要加个beanshell组合使用。

列表数据格式是这样的:

正则提取器+beanShell组合使用

遇到这种场景,想要拿到这个列表的数据,必须要用beanshell和正则配合使用。正则负责提取,beanshell负责遍历然后重新组装成需要的list。如:

 

这个需要引入fastjson.jar包。

Json提取器+beanShell组合使用

我们可以使用json提取器,这里有两种,一种跟上面一样,获取元素总数,一种是直接返回所有数据,但是这里返回的所有数据是用逗号隔开的,不是列表的,需要处理。

1、第一种,使用Json提取器拿到总元素,后面的方法和上面一直,如:

import com.alibaba.fastjson.JSON;// 因为列表中的元素要有双引号,需要转成json字符串String getindex = vars.get("getlogisticsOrderNo_matchNr"); // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的log.info("获取数组元素总数: " + getindex);List list = new ArrayList();int toIntIndex = Integer.parseInt(getindex);log.info("+++++++++++++" + toIntIndex);for(int i = 0;i < toIntIndex;i++){String valuess = vars.get("getlogisticsOrderNo_"+(i + 1));log.info("+++++++++++++"+i);log.info("--------"+valuess);// String strResult = "\"" + valuess +"\"";list.add(valuess);};String jsonString = JSON.toJSONString(list);log.info("+++++++++++++"+jsonString);//vars.put("arr",list);

beanshell需要改一下,数组元素总数也会返回一个matchNr,如:

 2、第二种,使用Json提取器中的_ALL下标来取,因为返回数据格式会是这样:TEST001,TEST002,TEST003... , 所以需要处理一下 ,如下:

Json提取器还是不变:

import com.alibaba.fastjson.JSON; // 因为列表中的元素要有双引号,需要转成json字符串String getindex = vars.get("get_logisticsOrderNo_matchNr"); // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的log.info("获取数组元素总数: " + getindex);List list = new ArrayList();int toIntIndex = Integer.parseInt(getindex);log.info("+++++++++++++" + toIntIndex);for(int i = 0;i < toIntIndex;i++){String valuess = vars.get("get_logisticsOrderNo_"+(i + 1));log.info("+++++++++++++"+i);log.info("--------"+valuess);// String strResult = "\"" + valuess +"\"";list.add(valuess);};String jsonString = JSON.toJSONString(list);log.info("+++++++++++++"+jsonString);//vars.put("arr",list);

运行后: 

beanShell部分写法:

import com.alibaba.fastjson.*; 
// 因为列表中的元素要有双引号,需要转成json字符串
String getindex = vars.get("get_logisticsOrderNo_ALL");
// matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的
List result = new ArrayList();
for (String get_Str:getindex.split(",")){
log.info("+++++++++++++"+JSON.toJSONString(get_Str));
toStrJson = JSON.toJSONString(get_Str);
result.add(toStrJson);
};
log.info("+++++++++++++"+result);
vars.put("new_list",result.toString());

运行结果:

备注:这里主要利用split函数和for循环来重新组装数据。

写在最后

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

看到这篇文章的人有觉得我的理解有误的地方,也欢迎评论和探讨~

你也可以加入下方的的群聊去和同行大神交流切磋

 

相关内容

热门资讯

JavaWeb——urlPat... 1.一个Servlet配置多个访问路径  在WebServlet的配置里面urlPattern的类型...
指针 指针数组 数组指针 二级... 一、本文研究: 指针数组 与 二级指针 数组 与 数组指针 上面的两两一对࿰...
Ubuntu20 + KVM虚... 1 命令汇总 # 查看一下linux是32位还是64位:file /bin/ls # ...
Spring Boot 整合 ... Spring Boot 整合 RabbitMQ 多种消息模式 准备工作集成 RabbitMQ发布/订...
【BEV】TPVFormer复... 1. 前言 在环视图像的网络中,常使用鸟瞰图来进行特征提取,尽管比体素表...
华测RTK参数/华测GPS/华... 1.i93 视觉RTK华测导航i93视觉RTK是集成了华测目前新型视觉技术的一款革新型视觉RTK产品...
西瓜视频登录页面 题目 代码 登录页面td{width: 160px;height: ...
Android kotlin ... 文章目录 一、什么是SharedPreferences1、将数据存储到SharedPreferenc...
算法训练营day53_动态规划... 算法训练营day53_动态规划(3.17提前写) 1143.最长公共子序...
案例23-服务出现频繁掉线情况 目录 一、背景介绍 二、分析原因 1.nacos中data文件的作用 2. data路径下prot...
【文心一言】什么是文心一言,如... 文心一言什么是文心一言怎么获得内测资格接下来就给大家展示一下文学创作商业文案创作数理逻辑推算中文理解...
第31篇:Java流和文件操作... 目录 1、读取控制台输入流 1.1 从控制台读取多字符输入流 1.2 从控制台读取字符串流 2、读写...
Linux/Debian/Ub... 文章目录前言相关资源下载OpenCVCUDA下载CUDNN下载编译错误异常 前言 本文用来记录在l...
虚拟数字人和GPT-4的结合,... 最近,ChatGPT一直在互联网上狂飙,从 去年11月底推出到月活过亿&...
第三章 Liunx的常用命令 文章目录一、Liunx常用命令查看内存 free -m回到根目录 直接 cd 回车回到上一级目录 c...
素人做课会踩的3大坑,你中了几... 素人做课会踩的3大坑,你中了几个?大坑:盲目模仿别人做课的...
element输入框el-in... element输入框el-input之格式控制 (1)限制输入的长度&#...
oracle19c迁移手册 windows10- 查看当前用户所有的表:select table_name fro...
docker-compose搭... # 关闭防火墙 systemctl stop firewalld.service # 永久关闭防火墙...
【2023最新Activiti... 1.流程实例 1.1 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实...
基于ggdensity包的等高... 简介 科研过程中,需要绘制某个后验密度/其他的形状。在发表论文中常常使用等高线来满足该...
Leetcode 105. 从... 题目: 给定两个整数数组 preorder 和 inorder ,其中 ...
点亮LED 目录 一、LED 硬件控制方式 二、LED 应用程序 1、定义宏 2、main函数 ①、打开文件  ...
随想008:烂摊子 我看到过很多离谱的现象。比如: 程序 代码重复、命名随意、逻辑混乱、甚至对齐都不一致&...
2023长沙到广州的火车时刻表... 今天给各位分享2023长沙到广州的火车时刻表,从长沙到广州高铁最新...的知识,其中也会对长沙到广州...
车载DVD一体机导航升级教程(... 本篇文章极速百科给大家谈谈车载DVD一体机导航升级教程(凯立德)(超详细),以及汽车凯立德导航用u盘...
圈内sp是什么意思(sp圈里是... 今天给各位分享圈内sp是什么意思的知识,其中也会对sp圈里是什么样的进行解释,如果能碰巧解决你现在面...
鸡蛋撞地球(鸡蛋撞地球怎么制作... 本篇文章极速百科给大家谈谈鸡蛋撞地球,以及鸡蛋撞地球怎么制作对应的知识点,希望对各位有所帮助,不要忘...
Vue2基础语法速通2 目录计算属性计算属性的简写监视属性深层次监视watch 和 computed 区别绑定 class ...
2023年全国最新高校辅导员精... 百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等ÿ...