Jmeter BeanShell 的用法大全(JSR223通用)

您所在的位置:网站首页 beanshell脚本语法判断代码 Jmeter BeanShell 的用法大全(JSR223通用)

Jmeter BeanShell 的用法大全(JSR223通用)

2024-07-05 12:59| 来源: 网络整理| 查看: 265

Bean shell 内置函数 1. 什么是Bean Shell? BeanShell 是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell 是一种松散类型的脚本语言(这点和 JS类似) BeanShell 是用于 Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大写为175k BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。 官网: http://www.BeanShell.org/ 2. Jmeter有哪些Bean Shell? 定时器:  BeanShell Timer 前置处理器:BeanShell PreProcessor 采样器:  BeanShell Sampler 后置处理器:BeanShell PostProcessor 断言:   BeanShell 断言 监听器:  BeanShell Listener 3. Bean Shell 内置变量 1. log

简述: 打印日志,并写入信息到 jmeber.log 文件

使用方法:

log.info(“这是我想要输出的日志内容”) log.error(“这是一个错误日志”)

GUI 界面开始日志查看: 在这里插入图片描述

2. ctx

简述:

该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext ctx 变量是JMeter JSR223功能最强大的内置变量之一 通过它可以轻松的访问当前线程的上下文 在 JMeter 内部,ctx 映射为 org.apache.jmeter.threads 的 JMeterContext 类 由于JMeterContext 不具有线程安全性,故仅适用于在单线程中使用 官方文档: https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html

使用方法:

获取当前jmeter线程的所有变量 【getVariables】

vars.put("name", "bingtang"); ctx.getVariables().get("name");

获取jmeter的内置属性值(jmeter的内置属性可在jmeter.properties中了解详情) 【getProperties】

p = ctx.getProperties().getProperty("sampleresult.default.encoding"); log.info("sampleresult.default.encoding is " + pv)

在这里插入图片描述 在这里插入图片描述

获取前一个取样器的结果 【getPreviousResult】

import org.apache.jmeter.samplers.SampleResult; SampleResult rsp = ctx.getPreviousResult(); String rh = rsp.getResponseDataAsString(); log.info('\n' + rh);

在这里插入图片描述

获取取样器的对象 【getCurrentSampler】

cname = ctx.getCurrentSampler().getName(); log.info("当前的cname是: " + cname)

在这里插入图片描述

获取当前线程组下的线程编号(编号从0开始) 【getThreadNum】

tn = ctx.getThreadNum(); log.info("线程号: " + tn)

在这里插入图片描述

3. vars

简述:

操作 JMeter 变量,这个变量实际引用了 JMeter 线程中的局部变量容器(本质上是Map),它是测试用例与 BeanShell 交互的桥梁,更多方法可参考:org.apache.jmeter.threads.JMeterVariables

vars 是最常用的JMeter变量之一

在 JMeter 内部,映射 org.apache.jmeter.threads 的 JMeterVariables 类

vars 提供了对当前线程变量的读写能力

所有的 JMeter 变量都是 java字符串

如果你需要把数据存放到一个 JMeter 变量中,需要先将它转换成字符串

官方文档:https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html

使用方法:

获取线程名 【getThreadName】

获取迭代号 【getIteration】

创建/更新变量 【put】

// 赋值 vars.put("name","bingtang"); vars.put("age","18"); // 传字符串 // 获取 name = vars.get("name"); age = vars.get("age"); // 打印 log.info("name is : " + name); log.info("age is : " + age); // 修改 vars.put("name", "qingtian"); name = vars.get("name") log.info("name is :" + name);

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

vars.put(“name”, “bingtang”) name = vars.get(“name”) // 取出name的值转为字符串存在name变量中

创建或更新一个非字符串变量。key变量名,value变量值 【putObject】

推荐使用JSR233,不知道是beanshell不支持语法还是,beanshell会报错

vars.putObject("number",3.14); vars.putObject("list1",[1,2,3,4]); vars.putObject("array1",[4,3,2,1] as int[]); vars.putObject("map1",["name":"bingtang", "age": 18]); log.info("数字是: " + vars.getObject("number").toString()); log.info("列表是: " + vars.getObject("list1")); log.info("数组是: " + vars.getObject("array1")); log.info("字典是: " + vars.getObject("map1").get("name"))

在这里插入图片描述

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

删除一个变量,并返回变量的值,若变量不存在则返回 null 【remove】

vars.remove(‘name’)

4. props

简述:

操作 JMeter 属性,该变量引用了 JMeter 的配置信息,可以获取 JMeter 的属性,它的使用方法与 vars 类似,但是只能 put 进去 String 类型的值,而不能是一个对象,对应于 java.util.Properties

props 映射 java.util 的 Properties 类 与 vars 作用大致相同,区别的是 vars 是对变量进行读写操作, 而 props 主要是对属性进行读写操作 vars 只能在当前线程组内使用,props 可以跨线程组使用 ,因为属性可以跨线程组但是变量不行 vars 只能保存 String 或者 Object,props 可以是 Hashtable 或者 Object java.util.Properties 这个类是线程安全的;多个线程可以共享一个 Properties 对象,而不需要外部同步 官方文档: https://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/Properties.html

使用方法:

设置属性值和获取属性值 【setProperty】 【getProperty】

用指定的键在此属性列表中搜索属性,如果在此属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回 null 操作文件指向:jmeter.properties

props.setProperty("test", "csinfo") vtest = props.getProperty("test") log.info("vtest的值是: " + vtest)

在这里插入图片描述

返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键 【propertyNames】 在这里插入图片描述

5. prev(SampleResult)

简述: 获取前面的 Sampler 返回的信息,更多方法可参考:org.apache.jmeter.samplers.SampleResult

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

使用方法:

获取响应状态码 【 getResponseCode】 sc = prev.getResponseCode();

判断响应状态码是否为OK对应的状态码(200) 【isResponseCodeOK()】 yn = prev.isResponseCodeOK() 返回True或者False

获取线程名 【getThreadName()】 tname = prev.getThreadName()

获取取样器响应Content-Type首部字段的值域(包含参数) 【getContentType()】 ct = prev.getContentType()

请求报文大小 【getSentBytes()】 sb = prev.getSentBytes()

响应报文大小 【getBytesAsLong()】 rb = prev.getBytesAsLong()

获取延迟时间 【getLatency()】

获取连接时间 【getConnectTime()】

获取取样器URL 【getURL()】

响应正文大小 【getBodySizeAsLong()】

sc = prev.getResponseCode(); // 响应状态码 yn = prev.isResponseCodeOK(); // 响应状态码是否为200 返回True或者False tname = prev.getThreadName(); // 当前的线程名 ct = prev.getContentType(); // 连接类型 sb = prev.getSentBytes(); // 请求报文大小 rb = prev.getBytesAsLong(); // 响应报文大小 db = prev.getLatency(); // 延迟时间 cont = prev.getConnectTime(); // 连接时间 url = prev.getURL(); // 取样器的URL rsb = prev.getBodySizeAsLong(); // 响应正文大小 log.info("响应状态码:" + sc) log.info("响应状态码是否为200: " + yn) log.info("线程名: " + tname) log.info("连接类型:" + ct) log.info("请求报文大小: " + sb) log.info("响应报文大小: " +rb) log.info("延迟时间: " + db) log.info("连接时间: "+ cont) log.info("取样器的URL: " + url) log.info("响应正文大小: " + rsb) ```

在这里插入图片描述

总结: 按需使用,常用的一般使用到的是log、vars、prev等相应功能 推荐使用JSR233 ,原因是更好的性能,还有些java的语法解析似乎beanshell没有带导致运行可能会报错


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3