Jmeter BeanShell使用场景

发表于:2021-11-30 09:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:全栈测试开发日记    来源:CSDN

  BeanShell简介
  Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javaScript 和 perl。
  场景使用
  场景1
  1、请求头中参数需要做哈希256加密,如果在内置函数处理不了的情况,首先考虑的就是使用beanShell取样器,如图:
   备注:这里可以将接口的请求报文放到beanshell里面,并且还可以使用内置函数进行参数化,当然也可以自己写。
  场景2
  1、两个接口A和B,接口A的响应报文中有一个List数据,是接口B请求报文的参数,这个时候使用正则或Json提取器都无法全部一次提取到这个列表,需要加个beanshell组合使用。
  列表数据格式是这样的:
list = ["TEST001","TEST002","TEST003"...]
  用正则的话,只能匹配到一个一个的list,如图:
  正则提取器+beanShell组合使用
  遇到这种场景,想要拿到这个列表的数据,必须要用beanshell和正则配合使用。正则负责提取,beanshell负责遍历然后重新组装成需要的list。如:
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,如:
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部分写法:
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循环来重新组装数据。


  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号