相关文章推荐
玩篮球的创口贴  ·  创建基于 JMeter 的负载测试 - ...·  1 月前    · 
还单身的蘑菇  ·  .NET 6 预览版 7:新功能已完成 ...·  4 月前    · 
开心的炒粉  ·  “当前不会命中断点。还没有为该文档加载任何符 ...·  7 月前    · 
体贴的鸡蛋面  ·  日期格式转换异常:Java 8 ...·  1 年前    · 
鬼畜的甜瓜  ·  开源字体不香吗?五款 GitHub ...·  1 年前    · 
温柔的上铺  ·  深度学习JSON.stringify和JSO ...·  1 年前    · 
Code  ›  Jmeter BeanShell使用场景开发者社区
list jmeter
https://cloud.tencent.com/developer/article/2212950
跑龙套的胡萝卜
9 月前
全栈测试开发日记

Jmeter BeanShell使用场景

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
全栈测试开发日记
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > Jmeter BeanShell使用场景

Jmeter BeanShell使用场景

作者头像
全栈测试开发日记
发布 于 2023-02-02 16:15:12
686 0
发布 于 2023-02-02 16:15:12
举报
文章被收录于专栏: 全栈测试开发日记

BeanShell简介

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

场景使用

场景1

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

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

场景2

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

列表数据格式是这样的:

代码语言: javascript
复制
list = ["TEST001","TEST002","TEST003"...]

用正则的话,只能匹配到一个一个的list,如图:

正则提取器+beanShell组合使用

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

代码语言: javascript
复制
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);

这个需要引入fastjson.jar包。

Json提取器+beanShell组合使用

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

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

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

代码语言: javascript
复制
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);

运行后:

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

Json提取器还是不变:

beanShell部分写法:

代码语言: javascript
复制
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));
 
推荐文章
玩篮球的创口贴  ·  创建基于 JMeter 的负载测试 - Azure Load Testing | Microsoft Learn
1 月前
还单身的蘑菇  ·  .NET 6 预览版 7:新功能已完成 ,将专注于改进-腾讯云开发者社区-腾讯云
4 月前
开心的炒粉  ·  “当前不会命中断点。还没有为该文档加载任何符号“解决方案-CSDN博客
7 月前
体贴的鸡蛋面  ·  日期格式转换异常:Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module \"com.
1 年前
鬼畜的甜瓜  ·  开源字体不香吗?五款 GitHub 上的爆红字体任君选 - 知乎
1 年前
温柔的上铺  ·  深度学习JSON.stringify和JSON.parse - 腾讯云开发者社区-腾讯云
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号