Jmeter BeanShell 的用法大全(JSR223通用) |
您所在的位置:网站首页 › beanshell脚本语法判断代码 › Jmeter BeanShell 的用法大全(JSR223通用) |
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 界面开始日志查看:
简述: 该变量引用了当前线程的上下文,使用方法可参考: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)简述: 操作 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】
简述: 获取前面的 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) ``` |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |