参考:Jmeter BeanShell 内置变量vars、props、prev的使用详解_java_脚本之家

1.介绍

在使用Jmeter过程中,或多或少都会接触些BeanShell,它会使工具的使用,变得更灵活。

Jmeter中关于BeanShell的有:

  1.BeanShell Sampler 取样器:完成Beanshell请求组件中定义的脚本功能;

  2.BeanShell PostProcessor 后置处理器:可通过编程方式获取对应请求的响应结果;  

  3.BeanShell PreProcessor 前置处理器:可通过编程方式在发起请求以前做预处理,比如编码或者加密;

  4.Beanshell 断言:可通过编程方式实现复杂的断言逻辑;

  5.Beanshell 计时器:编码实现条件定时功能;

  6.BeanShell Listener 监听器:监听Beanshell运行结果。

目前我使用较多的是前三种元件。使用过程中,就会使用一些内置变量,所以这也是今天的主要内容。

2.vars

vars 在 JMeter 内部,映射 org.apache.jmeter.threads 的 JMeterVariables 类,官方文档:JMeterVariables (Apache JMeter dist API)

注意点:

  • vars 提供了对当前线程变量的读写能力
  • 所有的 JMeter 变量都是 java字符串
  • 把数据存放到一个 JMeter 变量中,需要先将它转换成字符串

2.1 getThreadName

方法声明
public String getThreadName()

功能
获取当前运行线程名

String threadname = vars.getThreadName();
log.info("当前ThreadName是"+threadname)

2.2 getIteration

方法声明
public int getIteration()

功能
获取线程当前的迭代号

int iteration_num = vars.getIteration();
String iteration_num_string = String.valueOf(iteration_num);
log.info("iteration_num>>>>"+iteration_num_string);

2.3 put/get-重点

2.3.1-put

方法声明
public void put(String key, String value)

Parameters:
key - the variable name
value - the variable value

功能
创建或更新字符串变量

创建变量

2.3.2-get

方法声明
public String get(String key)

功能
获取变量的值并将其转换为字符串,若变量存在则将值转换为字符串,否则返回 null

//put learning
String threadname = vars.getThreadName();vars.put("threadname",threadname);
String name = vars.get("threadname");
log.info("put-threadname:"+name);
vars.put("age","12");
String age = vars.get("age");
log.info("put-age:"+age);

2.4-putObject/getObject

方法声明
public void putObject(String key,Object value)

Parameters:
key - the variable name
value - the variable value

功能
创建或更新一个非字符串变量。

方法声明
public Object getObject(String key)

功能
获取变量的值(不转换为字符串)。若变量不存在则返回null

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());vars.putObject("number",8);
log.info("number:"+vars.getObject("number").toString());
//构造map对象
Map map=new HashMap();
map.put("name","Christina");
map.put("locator","CSDN");
//putObject()可以在vars对象中放置Object类型对象
vars.putObject("map1",map);
//获取Object list对象 然后转换成string展示
log.info("map-name:"+vars.getObject("map1").get("name"));
log.info("map-locator:"+vars.getObject("map1").get("locator"));

 接口之间以列表传递

接口之间以列表传递的时候:JSONArray arrayList= new JSONArray()1、var.putObject("arrayList",arrayList);2、取值JSONArray al = vars.getObject("arrayList");
al.add("${id}");vars.putObject("arrayList",al);3、请求Body中  ${arrayList}直接使用  --就是一个列表{"compareIds":${arrayList},"description":"222","producerId":"152728942957376089","moduleConfig":{"productOwner":"598096"}}

2.5 remove

方法声明
public Object remove(String key)

功能
删除一个变量,并返回变量的值,若变量不存在则返回 null

3.Props

props 映射 java.util 的 Properties 类。java.util.Properties 这个类是线程安全的;多个线程可以共享一个 Properties 对象

3.1 vars和props的区别

  • vars 是对变量进行读写操作, 而 props 主要是对属性进行读写操作
  • vars 只能在当前线程组内使用,props 可以跨线程组使用 ,因为属性可以跨线程组但是变量不行
  • vars 只能保存 String 或者 Object,props 可以是 Hashtable 或者 Object

3.2-getProperty

方法声明
public String getProperty(String key)

public String getProperty(String key, String defaultValue):当 key 不存在则返回默认值

功能
用指定的key在此属性列表中搜索属性,如果在此属性列表中未找到该key,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回 null

3.3-setProperty

方法声明
public Object setProperty(String key,String value)

功能
设置属性值

props.setProperty("Test","testValue");
value = props.getProperty("Test");
log.info("Value:>>>>>>>>>"+value);

 3.4 put-get

3.4.1-put

方法声明
public synchronized V put(Object key)

功能
设置属性值,跟 setProperty 类似

3.4.2-get

方法声明
public synchronized V get(Object key)

功能
获取属性值,跟 getProperty 类似

pTimeFormat = props.get("jmeter.save.saveservice.timestamp_format");log.info("pTimeFormat:"+ pTimeFormat);pPropsTest = props.get("jmeter.save.saveservice.timestamp");log.info("pPropsTest:"+ pPropsTest);

3.5 propertyNames

方法声明
public Enumeration<?> propertyNames()

功能
返回属性列表中所有key的枚举,如果在主属性列表中未找到同名的key,则包括默认属性列表中不同的key

下面这部分不是很明白,后期再学习更新

propsNames = props.propertyNames();
propsNames.each{log.info(it)}

3.6-size

方法声明
public int size()

功能
返回有多少个属性

props.setProperty("Test456","testValue");
value = props.getProperty("Test456");
log.info("Value:>>>>>>>>>"+value);pPropsCount = props.size();
log.info("pPropsCount:<<<<<<<<<<"+ pPropsCount);

3.7 remove

方法声明
public synchronized V remove(Object key)

功能
删除一个变量,并返回变量的值,若变量不存在则返回 null

props.put("Name","Christina");
Remove_Name = props.remove("Name");
log.info("Remove_Name:>>>>>>>>>"+ Remove_Name);null_value = props.remove("null_value");
log.info("null_value:"+ null_value);

4.prev

prev 提供对当前取样器结果的访问能力,映射 org.apache.jmeter.samplers 的 SampleResult 类
官方文档: https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html

4.1 getResponseCode

responseCode = prev.getResponseCode() ;
log.info("responseCode:" + responseCode);


 4.2 isResponseCodeOK

方法声明
public boolean isResponseCodeOK()

功能
判断响应状态码是否为OK对应的状态码(200),结果只有true和false

res_is_ok = prev.isResponseCodeOK();
log.info("res_is_ok:>>>>>>>>>"+res_is_ok);

 
 4.3 getThreadName

方法声明
public String getThreadName()

功能
获取线程名

prevThreadName = prev.getThreadName();
log.info("prevThreadName:<><><>>" + prevThreadName);

4.4 getResponseDataAsString

方法声明
public String getResponseDataAsString()

功能
获取String类型的响应结果

prevResponse = prev.getResponseDataAsString();
log.info("prevResponse:" + prevResponse);


 具体应用可以参考:Jmeter学习-beanshell之登录跨线程处理_Christina.bai的博客-CSDN博客

4.5 getStartTime and getEndTime

增加一个beanshell postprocessor

//1.获取请求响应时间,即对应的Load Time
log.info(prev.getTime().toString());//2.获取请求连接时间,即对应的Connect Time
log.info(prev.getConnectTime().toString());//3.获取延迟,即Latency
log.info(prev.getLatency().toString());//4.获取请求的开始时间和结束时间,并求时间差,结果实际和Load Time一致log.info(prev.getStartTime().toString());
log.info(prev.getEndTime().toString());
rst=prev.getEndTime()-prev.getStartTime();
log.info("时间差:"+rst);

4.6 getSamplerData

取到post data的数据有两种方法:

1.prev.getSamplerData() //获取所有request body数据
2.prev.queryString //获取post data ,未看出这两者的区别,后续学习再更新

Jmeter学习-BeanShell 内置变量vars、props、prev相关推荐

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

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

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

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

  3. Jmeter系列(68)- BeanShell 内置变量 prev

    前提 BeanShell 有的内置变量,JSR223 也会有对应的变量,这里 JSR223 效率更高,所以以它为栗子 简单介绍 prev 提供对当前取样器结果的访问能力 prev 映射 org.apa ...

  4. BeanShell 内置变量 prev详细介绍

    前提 BeanShell 有的内置变量,JSR223 也会有对应的变量,这里 JSR223 效率更高,所以以它为栗子 简单介绍 prev 提供对当前取样器结果的访问能力 prev 映射 org.apa ...

  5. jmeter中没有sampler_jmeter(七)-BeanShell常用内置变量和场景

    Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log ...

  6. shell学习之常用bash内置变量

    常用的Bash内置变量 1 BASH_COMMAND当前执行的命令 2 LINENO显示当前所在行号 /bin/bash echo "this is test about ARG LINEN ...

  7. awk 内置变量与自定义变量

    点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...

  8. 命令 —— awk内置变量(NF,NR,FS,FILENAME)

    关于awk命令的几个内置变量(NF,NR,FS,FILENAME) 1.NF:支持记录域个数,在记录被读之后再设置例1 [root@redhat wilsontest]# pwd /tmp/wilso ...

  9. 文件自定义变量_awk 内置变量与自定义变量

    点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...

最新文章

  1. 京东技术主导:全新架构的分布式事务Hmily 2.1.1发布
  2. Servlet 生命周期、工作原理
  3. android 之SharedPreferences,SDCard以及网络存储
  4. 解决Spring Boot 整合Security后,所有接口提示Unauthorized、返回401
  5. IE6下div宽高设置
  6. ML《集成学习(二)Boosting之Adaboosting》
  7. 微信回应 WeTool 被封事件;支付宝小程序开放直播功能;Raspberry Pi 4 发布 8GB 版本| 极客头条...
  8. Luogu3613 睡觉困难综合征
  9. linux上机考试题(Linux基础)
  10. 聊一聊,小程序的开发
  11. 站在2018看单片机和嵌入式芯片方案选型和发展趋势
  12. 解决idea工具下tomcat中文乱码问题
  13. SQLSERVER大小写转换方法
  14. 模拟小白:挑战23天JAVA程序设计从入门到精通第一天
  15. 给程序员的 2018 新年计划清单
  16. DS1302 时钟 51单片机实现时钟显示
  17. promise 中的异常捕获_Promise异常捕获
  18. 线性代数-01矩阵与行列式
  19. 敏感词过滤算法 为内容保驾护航 Java/.Net/C++/c/Python等语言是如何进行敏感词打码限制的 高效防范违规内容
  20. 使用python脚本和excel对比Telegram多国语言包资源

热门文章

  1. 计算机组装活动感悟,电脑组装员实习体会感想-最新版
  2. 拉线位移编码器零线有电的原因
  3. poj 1205 :Water Treatment Plants (DP+高精度)
  4. 英雄联盟LPL比赛数据可视化详细教程,可视化的魅力,你值得拥有!!!
  5. 使用ltp进行三元组提取的实战代码
  6. ANSYS|workbench输出梁的剪力图和弯矩图
  7. zigbee 报警联动方案原理
  8. 用安卓手机控制 HomeKit 智能设备?绿米Aqara设备接入智汀家庭云保姆级教程
  9. Java面试题及答案整理( 2022年 整理版)
  10. [ACNOI2022]我不会GF啊