在使用Jmeter过程中,或多或少都会接触些BeanShell , 它会使工具的使用 , 变得更灵活 。
Jmeter中关于BeanShell的有:1.BeanShell Sampler 取样器:完成Beanshell请求组件中定义的脚本功能;
2.BeanShell PostProcessor 后置处理器:可通过编程方式获取对应请求的响应结果;
3.BeanShell PreProcessor前置处理器:可通过编程方式在发起请求以前做预处理,比如编码或者加密;
4.Beanshell 断言:可通过编程方式实现复杂的断言逻辑;
5.Beanshell 计时器:编码实现条件定时功能;
6.BeanShell Listener 监听器:监听Beanshell运行结果 。
目前我使用较多的是前三种元件 。使用过程中,就会使用一些内置变量,所以这也是今天的主要内容 。
varsvars 在 JMeter 内部,映射 org.apache.jmeter.threads 的 JMeterVariables 类,官方文档:https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html
注意点:
- vars 提供了对当前线程变量的读写能力
- 所有的 JMeter 变量都是 java字符串
- 把数据存放到一个 JMeter 变量中,需要先将它转换成字符串
功能获取当前运行线程名
String threadName = vars.getThreadName();log.info("threadName:"+ threadName);
文章插图
getIteration方法声明public int getIteration()
功能获取线程当前的迭代号
int itNum = vars.getIteration();String num = String.valueOf(itNum);log.info("itNum:"+ num);
文章插图
这里有个注意点,就是在开始时候提到的,数据放到变量中,需要将数据转换成String类型 。
put方法声明public void put(String key, String value)
Parameters:key - the variable namevalue - the variable value
功能创建或更新字符串变量
创建变量
vars.put("name","温一壶清酒");vars.put("age","5");String varsName = vars.get("name");log.info("varsName:"+ varsName);String varsAge = vars.get("age");log.info("varsAge:"+ varsAge);
注意点:age字段值5,需要是字符串类型,否则会报错 。Error in method invocation: Method put( java.lang.String, int ) not found in class'org.apache.jmeter.threads.JMeterVariables'
修改变量
vars.put("name","温一壶清酒 博客园");String varsName = vars.get("name");log.info("varsName:"+ varsName);
文章插图
get方法声明public String get(String key)
功能获取变量的值并将其转换为字符串,若变量存在则将值转换为字符串,否则返回 null
String varsSex = vars.get("sex");log.info("varsSex:"+ varsSex);
在put方法中,已经使用了get的方法,这里列举个获取不到变量的情况,返回null文章插图
putObject方法声明public void putObject(String key,Object value)
Parameters:key - the variable namevalue - the variable value
功能创建或更新一个非字符串变量 。
vars.putObject("number",8);vars.putObject("list",[2,4,6,8,10]);vars.putObject("array",[1,3,5,7,9,11] as int[]);vars.putObject("map",["name":"温一壶清酒","source":"博客园"]);log.info("number:"+ vars.getObject("number").toString());log.info("list:"+ vars.getObject("list").size());log.info("array:"+ vars.getObject("array").length);log.info("map:"+ vars.getObject("map").get("name"));
文章插图
getObject方法声明public Object getObject(String key)
功能获取变量的值(不转换为字符串) 。若变量不存在则返回null
remove方法声明public Object remove(String key)
功能删除一个变量,并返回变量的值,若变量不存在则返回 null
vars.put("name","温一壶清酒 博客园");vName = vars.remove("name");log.info("vName:"+ vName);vSex = vars.remove("sex");log.info("vSex:"+ vSex);
文章插图
propsprops 映射 java.util 的 Properties 类 。java.util.Properties 这个类是线程安全的;多个线程可以共享一个 Properties 对象
vars跟props的区别
- vars 是对变量进行读写操作, 而 props 主要是对属性进行读写操作
- vars 只能在当前线程组内使用 , props 可以跨线程组使用 ,因为属性可以跨线程组但是变量不行
- vars 只能保存 String 或者 Object,props 可以是 Hashtable 或者 Object
推荐阅读
- Spring 深入——IoC 容器 01
- 面向对象的照妖镜——UML类图绘制指南
- PLAN 谣言检测——《Interpretable Rumor Detection in Microblogs by Attending to User Interactions》
- Linux命令系列之ls——原来最简单的ls这么复杂
- 谣言检测——《Debunking Rumors on Twitter with Tree Transformer》
- 一 CPS攻击案例——基于脉冲宽度调制PWM的无人机攻击
- 一篇文章带你掌握主流服务层框架——SpringMVC
- Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识
- 2 Libgdx游戏开发——接水滴游戏实现
- 1 Libgdx游戏学习——环境配置及demo运行