Jmeter——BeanShell 内置变量vars、props、prev的使用
在使用Jmeter过程中,或多或少都会接触些BeanShell,它会使工具的使用,变得更灵活。
Jmeter中关于BeanShell的有:
1.BeanShell Sampler 取样器:完成Beanshell请求组件中定义的脚本功能;
2.BeanShell PostProcessor 后置处理器:可通过编程方式获取对应请求的响应结果;
3.BeanShell PreProcessor 前置处理器:可通过编程方式在发起请求以前做预处理,比如编码或者加密;
4.Beanshell 断言:可通过编程方式实现复杂的断言逻辑;
5.Beanshell 计时器:编码实现条件定时功能;
6.BeanShell Listener 监听器:监听Beanshell运行结果。
目前我使用较多的是前三种元件。使用过程中,就会使用一些内置变量,所以这也是今天的主要内容。
vars
vars 在 JMeter 内部,映射 org.apache.jmeter.threads 的 JMeterVariables 类,官方文档:https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html
注意点:
- vars 提供了对当前线程变量的读写能力
- 所有的 JMeter 变量都是 java字符串
- 把数据存放到一个 JMeter 变量中,需要先将它转换成字符串
getThreadName
方法声明
public String getThreadName()
功能
获取当前运行线程名
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 name
value - 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 name
value - 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);

props
props 映射 java.util 的 Properties 类。java.util.Properties 这个类是线程安全的;多个线程可以共享一个 Properties 对象
vars跟props的区别
- vars 是对变量进行读写操作, 而 props 主要是对属性进行读写操作
- vars 只能在当前线程组内使用,props 可以跨线程组使用 ,因为属性可以跨线程组但是变量不行
- vars 只能保存 String 或者 Object,props 可以是 Hashtable 或者 Object
getProperty
方法声明
public String getProperty(String key)
public String getProperty(String key, String defaultValue):当 key 不存在则返回默认值
功能
用指定的key在此属性列表中搜索属性,如果在此属性列表中未找到该key,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回 null
timeFormat = props.getProperty("jmeter.save.saveservice.timestamp_format");
log.info("timeFormat:"+ timeFormat);
propsTest = props.getProperty("jmeter.save.saveservice.timestamp");
log.info("propsTest:"+ propsTest);
propsTest = props.getProperty("jmeter.save.saveservice.timestamp","温一壶清酒 博客园");
log.info("propsTest:"+ propsTest);

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);
setProperty
方法声明
public Object setProperty(String key,String value)
功能
设置属性值
props.setProperty("pName","温一壶清酒");
propsName = props.getProperty("pName");
log.info("propsName:"+ propsName);

put
方法声明
public synchronized V put(Object key)
功能
设置属性值,跟 setProperty 类似
props.put("pName","温一壶清酒");
pPropsName = props.get("pName");
log.info("pPropsName:"+ pPropsName);
propertyNames
方法声明
public Enumeration<?> propertyNames()
功能
返回属性列表中所有key的枚举,如果在主属性列表中未找到同名的key,则包括默认属性列表中不同的key
propsNames = props.propertyNames();
propsNames.each{
log.info(it)
}

size
方法声明
public int size()
功能
返回有多少个属性
pPropsCount = props.size();
log.info("pPropsCount:"+ pPropsCount);

remove
方法声明
public synchronized V remove(Object key)
功能
删除一个变量,并返回变量的值,若变量不存在则返回 null
props.put("pName","温一壶清酒");
rName = props.remove("pName");
log.info("rName:"+ rName);
rSex = props.remove("sex");
log.info("rSex:"+ rSex);

prev
prev 提供对当前取样器结果的访问能力,映射 org.apache.jmeter.samplers 的 SampleResult 类
官方文档: https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
getResponseCode
方法声明
public String getResponseCode()
功能
获取响应状态码
responseCode = prev.getResponseCode() ;
log.info("responseCode:" + responseCode);
2022-10-04 15:34:29,057 INFO o.a.j.u.BeanShellTestElement: responseCode:200
isResponseCodeOK
方法声明
public boolean isResponseCodeOK()
功能
判断响应状态码是否为OK对应的状态码(200),结果只有true和false
responseCodeBoolean = prev.isResponseCodeOK();
log.info("responseCodeBoolean:" + responseCodeBoolean);
2022-10-04 15:36:35,077 INFO o.a.j.u.BeanShellTestElement: responseCodeBoolean:true
getThreadName
方法声明
public String getThreadName()
功能
获取线程名
prevThreadName = prev.getThreadName();
log.info("prevThreadName:" + prevThreadName);
2022-10-04 15:39:17,955 INFO o.a.j.u.BeanShellTestElement: prevThreadName:prevThreadName
getResponseDataAsString
方法声明
public String getResponseDataAsString()
功能
获取String类型的响应结果
prevResponse = prev.getResponseDataAsString();
log.info("prevResponse:" + prevResponse);
getStartTime
获取请求开始时间
getEndTime
获取请求结束时间
getSamplerData
获取请求内容
好了,以上就是平时经常用到的一些内置变量的方法,还有其他的方法,可以参考源码或官方文档。
Jmeter——BeanShell 内置变量vars、props、prev的使用的更多相关文章
- jmeter 常用内置变量
1. vars API:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html vars.get(& ...
- Python每日一练------内置函数+内置变量+内置模块
1.内置函数 Python所有的内置函数 Built-in Functions abs() divmod() input() open() staticmethod() all() e ...
- Jmeter之Bean shell使用-常用内置变量
Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.l ...
- jmeter常用的内置变量
1. vars API:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html vars.get(& ...
- Robot Framework 内置变量
转自:https://blog.csdn.net/qq_26886929/article/details/53907755 Robot Framework 内部提供了一下直接可用的内置变量 1. 操作 ...
- Python - 常用内置变量
直接上代码 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 这是注释__doc__会打印这部分内容 "&qu ...
- Maven系列三Maven内置变量
Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...
- Maven的内置变量
Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...
- nginx的那些内置变量
nginx在配置文件nginx.conf中可以使用很多内置变量,配置如下: location /info { add_header 'Content-Type' 'text/html'; echo & ...
随机推荐
- github访问较慢问题初步解决方案
简介 众所周知,github在国内向来都是访问的非常坎坷,不挂代理访问起来非常困难,本文将介绍一种不依赖代理的加快访问的方式,但不一定可行哦,只能说是优化 步骤 1.在搜索框中输入记事本或者notep ...
- .NET的求复杂类型集合的差集、交集、并集
前言 如标题所述,在ASP.NET应用程序开发中,两个集合做比较时 我们使用微软IEnumerable封装的 Except/Intersect/Union 取 差集/交集/并集 方法是非常的方便的: ...
- PHP操作路由器
用PHP操作路由器 我们经常会碰到需要自动换IP的需求,比方模拟点击投票,数据采集被封IP,Alexa作弊等等,也就是需要经常换IP的,我们都可以通过PHP控制路由器来换IP,这样就不需要用按键精灵搞 ...
- 技术分享 | ARM下中标麒麟系统ky10使用Xtrabackup-8.0.25
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 一.需求背景 查询Percona官方手册,Xtrabackup 8.0可以备份M ...
- LuoguP2575 高手过招(博弈论)
空格数变吗?不变呀 阶梯博弈阶梯数变吗?不变呀 那这不就阶梯博弈,每行一栋楼,爬完\(mex\)就可以了吗? #include <iostream> #include <cstdio ...
- 移动端实现HTML5 mp3录音踩坑指南:系统播放音量变小、一些机型录音断断续续 之 MediaRecorder和AudioWorklet的终极对决
目录 H5录音见坑填坑 采用MediaRecorder采集音频 音频格式:WebM和PCM 从WebM封装容器中提取PCM数据 录音的兼容性 困扰已久的H5录音时系统播放音量变小的问题 H5录音见坑填 ...
- what the difference betweent pin page and lock page ?
以前在项目中,大家为了避免自己使用的page被换出,使用的方式是mlock,从mlock的实现的看,它限制了page被swap, 然后在一个swap off的系统中,这样其实和mlock调用与否没有关 ...
- Apache HttpClient 5 使用详细教程
点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 超文本传输协议(HTTP)可能是当今 ...
- 分布式版本控制系统Git的使用;
1.什么是Git Git是一个分布式的版本控制软件: 软件,类似于qq.office等安装到电脑才能使用的工具. 版本控制,类似于毕业论文,视频剪辑等需要反复修改和保留原历史数据: 分布式 文件夹拷贝 ...
- 【java】学习路径26-泛型,集合使用自定义的类型
接着上一节的内容,上一节我们使用到了ArrayList.Vector.LinkedList三个集合类型. 但是目前我们有一个问题:如果集合中存储的是Integer类型的数据(int的引用类型),那我们 ...