一、什么是Beanshell

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
BeanShell是一种松散类型的脚本语言(这点和JS类似);
BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。
官网:http://www.BeanShell.org/

二、Jmeter中的Beanshell组件

  • BeanShell Sampler(BeanShell 取样器)
  • BeanShell PreProcessor(BeanShell 前置处理器)
  • BeanShell PostProcessor(BeanShell 后置处理器)
  • BeanShell Assertion(BeanShell 断言)
  • BeanShell Timer(BeanShell 定时器)
  • BeanShell Listener(BeanShell 监听器)

三、BeanShell的内置变量

  1. vars-(JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它 是测试用例与BeanShell交互的桥梁,常用方法:
    a) vars.get(String key):从jmeter中获得变量值
    b) vars.put(String key,String value):数据存到jmeter变量中
    如果需要获取或者放置非String类型数据 需要用putObject()和getObject()
//Beanshell vars.putObject() vars.getObject()的使用
List list = new ArrayList();list.add("aaa");
list.add("bbb");
//putObject()可以在vars对象中放置Object类型对象
vars.putObject("list",list);
//===========================
//获取Object list对象
Object Value = vars.getObject("list");
//log.info只能输出String类型变量
log.info(Value.toString());


更多方法可参考:org.apache.jmeter.threads.JMeterVariables

  1. props- (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
    vars是不能跨线程组使用的,即在线程组A中put的值在线程组B中时get不到的,props就是为了解决上述问题:
    a) props.get(“START.HMS”);  注:START.HMS为属性名,在文件jmeter.properties中定义
    b) props.put(“PROP1”,“1234”);
  2. prev - (SampleResult):获取前面的sample返回的信息,常用方法:
    a) getResponseDataAsString():获取响应信息
    b) getResponseCode() :获取响应code
    更多方法可参考:org.apache.jmeter.samplers.SampleResult
  3. ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
//SampleResult需要import对象
import org.apache.jmeter.samplers.SampleResult;SampleResult result = ctx.getPreviousResult();
//getRequestHeaders()方法返回String字符串
String RequestHeaders = result.getRequestHeaders();
//getResponseHeaders() 返回响应headers
String ResponseHeaders = result.getResponseHeaders()
//getResponseCode() 返回响应状态码字符串
String responseCode = result.getResponseCode();
//ResponseMessage 响应信息,其类型为String。
//getURL() 返回请求URL对象
URL url = result.getURL();
log.info(RequestHeaders);
log.info(RequestHeaders);
  1. sampler-使用时,需要引入包import org.apache.jmeter.config.Arguments;
    a)获取http请求的 url
    String url = sampler.getPath();
    b)获取http请求的body内容
    Arguments arguments = sampler.getArguments();
    String body = arguments.getArgument(0).getValue();
  2. SampleResult 获取SampleResult对象,能通过这个对象获取想要的信息。
  3. Response 获取Response对象,能通过这个对象获取响应信息。
  4. Failure和FailureMessage-(BeanShell Assertion组件独有的内置变量)。其作用是设置当前sampler的测试结果(成功或失败),Failure的类型是boolean,FailureMessage的类型是String。
// 设置sampler为测试通过
Failure = true;// 设置sampler为测试失败
Failure = false;
FailureMessage = "测试失败";
  1. ResponseData
    ResponseData就是sampler response data(响应数据),其类型为byte []:
String samplerData = new String(ResponseData);
  1. Label和SampleLabel
    Label和SampleLabel是sampler的标题,其类型是String。
  2. log:log就是输出不同等级的日志,写入信息到jmeber.log文件
log.debug("xxx");
log.info("xxx");
log.warn("xxx");
log.error("xxx");

四、vars和props 主要两点的区别:

vars中的变量仅对当前线程组内可见, 跨线程组则需要使用属性。
读取变量使用 vars.put(var, value)函数, 例如:

vars.put("new_value", value) ;

注意:上面的“new_value”必须是字符串类型, 传递其他类型,包括null,都会报错,如果想使用数字,数字等类型,一种方法是做类型转换

vars.put("MUST_BE_STRING", "" + 1);
vars.put("MUST_BE_STRING", (String)1);
vars.put("MUST_BE_STRING", [2, 3, 4].toString());
vars.put("MUST_BE_STRING", (String)[1,2]);
vars.put("MUST_BE_STRING", "" + [2, 3, 4]);
vars.put("MUST_BE_STRING", "" + true);
vars.put("MUST_BE_STRING", true.toString());

获取字符串变量:
vars.get()方法用于读取变量值:
如:vars.get(“goodId”);
如果传递的 variable_name 预先不存在,将返回null.

保存对象类型:
vars保存对象类型(包括List, Map, closure之类),使用如下方法:

vars.putObject("object_name", Object);
vars.putObject("NUMBER", 1);
vars.putObject("ARRAY", []);
vars.putObject("CLOSURE", { x, y -> x+y });

获取对象类型:

vars.getObject("OBJECT_NAME");

props
props 继承了Hashtable的累,所以拥有与vars类似的get和put 方法, 另外还有继承Hashtable的其他方法:
判断某属性是否存在, 返回布尔值

props.containsKey("PROPERTY_NAME")  

判断某项值是否存在,返回布尔值:

props.contains("PROPERTY_VALUE")

删除某个值

props.remove("PROPERTY_NAME")

所有属性以字符串形式表示

props.toString()

五、Beanshell的For循环与集合

//普通for循环的写法
for(int i = 0; i<list.size();i++){log.info(list.get(i));
}
//增强for循环的写法
for(object : list){     log.info(object);
}

Jmeter-Beanshell相关推荐

  1. Jmeter BeanShell使用json.jar包处理Json数据

    1.环境准备 1)  Jmeter.JDK 2) 将json.jar包置于..\lib\下 json包下载地址:https://mvnrepository.com/ (国内的maven地址) 可以参考 ...

  2. jmeter——BeanShell 预处理程序

    jmeter--BeanShell 预处理程序 一.BeanShell 预处理程序描述和作用 二.BeanShell 预处理程序的使用 三.BeanShell 预处理程序的注意事项 四.BeanShe ...

  3. 【干货】JMeter BeanShell 应用

    视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html 不废话直接上场景 场景1:业务单据参数化时要生成一组(多个时间,比如订单 ...

  4. (jmeter内置可调用的变量)jmeter beanShell断言

    用户可以在jmeter- "beanShell断言"中自定义断言.自由灵活的用脚本实现自己的断言   beanShell断言接口介绍   在beanShell中直接可以调用的变量, ...

  5. Jmeter BeanShell采样器提取接口响应并传递(三)

    1.将fastjson-1.2.68.jar放置C:\jmeter\apache-jmeter-5.0\lib路径下 2.CSV 数据文件设置多个手机号 3.添加登录接口,${mobile}调用2种的 ...

  6. Jmeter BeanShell取样器操作变量(一)

    vars: 引用Jmeter线程的局部变量,将 局部变量 改为  全局变量 亦可达到引用全局变量的效果, 连通Jmeter 和 beanshell string user = vars.get(&qu ...

  7. Jmeter beanshell语法

    beanshell介绍 BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell ...

  8. JMeter BeanShell 应用

    不废话直接上场景 场景1:业务单据参数化时要生成一组(多个时间,比如订单日期,发货日期等)未来的时间,运用JMeter提供的时间函数并不能较好的完成 场景2:测试Java接口,确又不想继承Abstra ...

  9. 性能篇 | 17 | jmeter | BeanShell内置变量prev的使用技巧

    1 prev简介 BeanShell 有的内置变量,JSR223 也会有对应的变量: prev 提供对当前取样器结果的访问能力 prev 映射:org.apache.jmeter.samplers 的 ...

  10. 性能篇 | 17 | jmeter | BeanShell内置变量vars的使用技巧

    1 简介 BeanShell 有的内置变量,JSR223 也会有对应的变量 vars 是最常用的JMeter变量之一 在 JMeter 内部,映射org.apache.jmeter.threads 的 ...

最新文章

  1. 游戏开发基础:A*算法(转)
  2. python使用matplotlib可视化、使用rcParams参数调整可视化图像中线条宽度、线条类型、文本字体、字体大小、字体颜色、字体类型、文本颜色等
  3. 一夜吸粉200万被封杀,微信都有哪些逆鳞?
  4. Linux_Oracle命令大全
  5. SQL Server 2005新特性之使用with关键字解决递归父子关系
  6. python 字符串截取_Python 字符串操作实现代码(截取/替换/查找/分割)
  7. 寻找链表倒数第k个节点
  8. 1年狂赚500亿!中国最土豪的省,究竟是如何称霸全球的?
  9. Ubuntu Touch OTA-12 发布,Ubuntu 移动版本
  10. Maven学习总结(24)——Maven版本管理详解
  11. u-boot编译连接分析
  12. python自带的用于解析HTML的库HtmlParser
  13. CMS收集器中两个致命的问题
  14. flex2.0 asp.net
  15. Julia: Dates =DateFormat, format,parse.......
  16. 玉禾田环境金蝶云ERP操作手册
  17. 金网奖首度跨界心理学,打造最强案例
  18. java商城如何防止超卖_电商中怎么防止超卖
  19. STM32F103_study49_The punctual atoms(STM32 Bit operation and logical operation in C language )
  20. 原来小米手机的电源键不止能用来关机,这么多实用功能,别浪费了

热门文章

  1. DH算法 | Diffie-Hellman 密钥交换
  2. YYText-swift,swift版的YYText,优化了yylabel和yytextview的部分扩展
  3. List集合去重的三种方法
  4. ThinkpadX220 windows10 博通bcm94352hmb的蓝牙连接音箱播放声音断断续续的解决方案
  5. 破解密码——利用粘滞键漏洞破解Windows 7 PIN
  6. 【Java面试】第二章:P5级面试
  7. linux下罗技摄像头采集图片,linux下寻找罗技摄像头快看酷讯版驱动
  8. 在mini2440上面搞定CC2500物理层驱动
  9. 1.Android学习之Android项目结构
  10. Linux使用lrzsz快速上传和下载