【Jmeter 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提取器拿到总元素,后面的方法和上面一直,如:

  1. import com.alibaba.fastjson.JSON;

  2. // 因为列表中的元素要有双引号,需要转成json字符串

  3. String getindex = vars.get("getlogisticsOrderNo_matchNr");

  4. // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的

  5. log.info("获取数组元素总数: " + getindex);

  6. List list = new ArrayList();

  7. int toIntIndex = Integer.parseInt(getindex);

  8. log.info("+++++++++++++" + toIntIndex);

  9. for(int i = 0;i < toIntIndex;i++){

  10. String valuess = vars.get("getlogisticsOrderNo_"+(i + 1));

  11. log.info("+++++++++++++"+i);

  12. log.info("--------"+valuess);

  13. // String strResult = "\"" + valuess +"\"";

  14. list.add(valuess);

  15. };

  16. String jsonString = JSON.toJSONString(list);

  17. log.info("+++++++++++++"+jsonString);

  18. //vars.put("arr",list);

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

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

Json提取器还是不变:

  1. import com.alibaba.fastjson.JSON;

  2. // 因为列表中的元素要有双引号,需要转成json字符串

  3. String getindex = vars.get("get_logisticsOrderNo_matchNr");

  4. // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的

  5. log.info("获取数组元素总数: " + getindex);

  6. List list = new ArrayList();

  7. int toIntIndex = Integer.parseInt(getindex);

  8. log.info("+++++++++++++" + toIntIndex);

  9. for(int i = 0;i < toIntIndex;i++){

  10. String valuess = vars.get("get_logisticsOrderNo_"+(i + 1));

  11. log.info("+++++++++++++"+i);

  12. log.info("--------"+valuess);

  13. // String strResult = "\"" + valuess +"\"";

  14. list.add(valuess);

  15. };

  16. String jsonString = JSON.toJSONString(list);

  17. log.info("+++++++++++++"+jsonString);

  18. //vars.put("arr",list);

运行后: 

beanShell部分写法:

  1. import com.alibaba.fastjson.*;

  2. // 因为列表中的元素要有双引号,需要转成json字符串

  3. String getindex = vars.get("get_logisticsOrderNo_ALL");

  4. // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的

  5. List result = new ArrayList();

  6. for (String get_Str:getindex.split(",")){

  7. log.info("+++++++++++++"+JSON.toJSONString(get_Str));

  8. toStrJson = JSON.toJSONString(get_Str);

  9. result.add(toStrJson);

  10. };

  11. log.info("+++++++++++++"+result);

  12. vars.put("new_list",result.toString());

运行结果:

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

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter使用Fastjson进行JSON处理可以通过导入com.alibaba.fastjson.*包来实现。在BeanShell,你可以使用以下代码来导入Fastjson包: import com.alibaba.fastjson.*; 然后,你可以使用JSON.parseObject()方法将Response转换为JSON对象。例如: String response = prev.getResponseDataAsString(); JSONObject responseObj = JSON.parseObject(response); 如果你需要将列表的元素转换为JSON字符串,你可以使用JSON.toJSONString()方法。例如: String getindex = vars.get("get_logisticsOrderNo_ALL"); List result = new ArrayList(); for (String get_Str : getindex.split(",")){ String toStrJson = JSON.toJSONString(get_Str); result.add(toStrJson); } vars.put("new_list", result.toString()); 同样地,你也可以使用JSON.toJSONString()方法将列表转换为JSON字符串。例如: String getindex = vars.get("get_logisticsOrderNo_matchNr"); List list = new ArrayList(); int toIntIndex = Integer.parseInt(getindex); for(int i = 0; i < toIntIndex; i++){ String valuess = vars.get("get_logisticsOrderNo_"+(i + 1)); list.add(valuess); } String jsonString = JSON.toJSONString(list); //vars.put("arr",list); 这样,你就可以在JMeter使用Fastjson进行JSON处理了。 #### 引用[.reference_title] - *1* *3* [【Jmeter BeanShell】的使用场景详解](https://blog.csdn.net/weixin_67553250/article/details/129558555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [jmeter beanShell fastJson 解析](https://blog.csdn.net/sh309127/article/details/103455933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值