一 引入:

  

eanShell Sample主要用于生成一些逻辑复杂的数据,例如用于加解密数据;
**每次调用前重置bsh.Interpreter:每个BeanShell副本都有自己的解释器副本(每个线程都有),**
在循环内,如果没有勾选重置bs.Interpreter,那么解释器会保留在调用过程中,一些长时间运行的测试就会占用大量内存。
由于BeanShell的bsh.Interpreter存在内存泄漏,所以使用BeanShell时无法支持长时间的压力测试,所以如果是使用BeanShell性能脚本有BeanShell那么建议勾选重置bs.Interpreter,防止内存泄漏
(下图是bsh.Interpreter的部分源码截图,可以看到,它主要设置了ctx、Label、prev、props、vars等参数)
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/16194/1663307082040/7d431cd355464129bf9c9b3d31c8d708.png)
**参数(-> String Parameters 和 String []bash.args):** 传递给BeanShell脚本的参数
例如:\${p1} \${p2} 会传递给BeanShell奥本中的bsh.args,然后通过bsh.args[0]、bsh.args[1]来读取
**脚本文件:** 包含BeanShell脚本的文件,这个文件名存储在变量FileName中,需要注意的是,一旦设置了脚本文件,那么JMeter就不再使用JMeter GUI界面脚本区域写的脚本了
**脚本(见下文所定义的变量):** 编写BeanShell脚本的区域
 

二 内置对象的使用:

  

BeanShell取样器脚本中,有一些内置的对象可以直接使用
主要包括:
* SampleResult
* ResponseCode
* ResponseMessage
* IsSuccess
* Label
* FileName
* ctx
* vars
* prev
* props
* log
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/16194/1663307082040/33eb0e42eb5344ce91f4135e614393d7.png)
其中,ctx、Label、prev、props、vars是所有BeanShell都具有的通用对象;
而SamplerResult、ResponseCode、ResponseMessage、IsSuccess、FileName、log是BeanShell取样器中定义的,这些知识可以通过阅读JMeter源码得知

三 每个参数的使用方法:

  

**SampleResult:** 顾名思义SampleResult是取样器结果的意思,JMeter的响应结果都是通过SampleResult对象去操作的。我们可以使用SampleResult设置响应数据
例如:
* SampleResult.setResponseData("Data的内容") :设置响应体
* SampleResult.setResponseHeaders("Content-Type:application/json"); 设置响应头
* SampleResult.setSamplerData("请求数据"):设置显示的请求数据
* SampleResult.setRequestHeaders("Connection: keep-alive"):设置显示的请求头
注意:由于JMeter源码中有运行流程上的Bug,有部分属性配置通过SampleResult设置时无法生效
**ResponseCode:响应状态码**
**ResponseMessage:状态消息**
**IsSuccess:执行是否成功,是布尔类型**
**Label: 取样器的名称**
**FileName:要读取的BeanShell脚本的名称**
**vars:操作JMeter变量,对应org.apache.jmeter.threads的JMeterVariables 类**
* vars.get("变量名") :获取变量
* vars.put("变量名", "变量值"): 保存当前结果到JMeter变量
**prev:操作前一个取样器的结果对象SampleResult  对应org.apache.jmeter.samplers 的 SampleResult 类**
 

四  常用方法:

* prev.getResponseDataAsString(): 获取前一个取样器的响应数据
* prev.getResponseCode():获取前一个取样器的状态码
* prev.getAssertionResults(): 获取前一个取样器的断言结果
* prev.getContentType(): 获取前一个取样器的请求头
* prev.getUrlAsString():获取前一个取样器的URL
* prev.getConnectTime():获取前一个取样器的连接时间
**props:操作JMeter属性,对应java.util的Properties类**
* props.get("属性名"):获取属性
* props.put("属性名", "属性值"):设置属性
**log:打印日志**
常用用法:
* log.info("日志内容"): 打印info级别的日志
**ctx:** 是JMeter的上下文,org.apache.jmeter.threads的JMeterContext类,可以参考官网API学习:https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html
常用方法:
* getVariables:获取当前JMeter的全部变量
* getProperties:获取JMeter全部属性
* getPreviousResult:获取前一个取样器的SampleResult结果
* getCurrentSampler:获取当前取样器对象
* getPreviousSampler:获取前一个取样器对象
* getThreadNum:获取当前线程的线程编号
* getThread:获取线程对象
 
* getThreadGroup:获取线程组对象

BeanShell Sample 如何使用?的更多相关文章

  1. BeanShell Sample与控制台交互

    应用的场景:业务当中涉及到一些敏感信息,如验证码,银行卡密码等或是动态变化的,不能直接写在脚本中,就需要通过控制台手动输入 如密码已键盘的方式输入,在控制台中以密码的方式显示 处理方法:添加 bean ...

  2. jmeter 之 beanshell sample

    Lightweight Scripting for Java 官网:http://www.BeanShell.org/ 定时器: BeanShell Timer 前置处理器:BeanShell Pre ...

  3. 欢迎大家走进我的园子 ( ^___^ )y 本博客文章目录整理

    "记录"是见证成长:"成长"则意味着蜕变:“变",创造无限可能! ------致自己 文章越来越多,不容易查看,特整理了一个目录,方便快速查找 坚持的是分享,搬运的是知识,图的是大家的进步,欢迎更多的 ...

  4. Jmeter_上传与下载

    今天重点说一下Jmeter的上传与下载 1:Jmeter上传文件 首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看.注意,此处我的文件路 ...

  5. jmeter 之系统参数根据条件修改

    背景:在setup 线程组定义了一个全局变量a:${__setProperty(a,2,)},线程组里有两个线程通过判断a的值来决定是否执行sample,线程组的最后通过beanshell sampl ...

  6. jmeter需要学习的其他点

    jmeter知识点访问地址参数化http请求默认值远程连接非GUI运行测试命令jmeter参数设置jmeter常用脚本开发 Beanshell sampleDebug SampleFtp请求java请 ...

  7. Jmeter(十五)_上传与下载

    今天重点说一下Jmeter的上传与下载 1:Jmeter上传文件 首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看.注意,此处我的文件路 ...

  8. Jmeter 之下载图片

    利用Jmeter实现文件图片下载 步骤: 1. 新建线程组 2. 线程组右键新建HTTP请求: 添加服务器名称或IP, 路径,协议,方法,端口等信息 3. 线程组右键新建 BeanShell Samp ...

  9. Jmeter------查看JSON Extractor获取的值

    在接口的使用中,我们会经常用到上个接口response中的值作为下个接口的参数来使用,因此我们为了确保值的正确性,需要知道上个接口返回的值是否正确,因此我们使用到了如下的方法来查看返回值. 1.首先在 ...

  10. Jmeter mysql性能测试

    一:首先建立jdbc connection configuration,设置参数如图 1.variable name 参数名称,与后面的sample中设置的variable name一致.含义为:通过 ...

随机推荐

  1. uni-app 计算属性 computed

    功能:=>大于1000用kg表示 小于1000,用g表示 计算属性 计算属性必须是有一个返回值的哦 在html写被计算的值 在computed中去直接调用哈 <view> <t ...

  2. 【笔记】grafana v8.4.2 中如何设置曲线图的双坐标轴

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu 公众号:一本正经的瞎扯 这个话题当然很久就有人研究过了,只不过版本已经很老了,不适合新版本. 1 ...

  3. 【JS 逆向百例】吾爱破解2022春节解题领红包之番外篇 Web 中级题解

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 逆向目标 本次逆向的目标来源于吾爱破解 2022 春节解题领红包之番外篇 Web 中级题,吾爱破解每年都会有派送红包活动(送吾爱 ...

  4. 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(1)-初识Wireshark

    1.简介 前边已经介绍过两款抓包工具,应该是够用了,也能够处理在日常工作中遇到的问题了,但是还是有人留言让宏哥要讲解讲解Wireshark这一款抓包工具,说实话宏哥之前也没有用过这款工具,只能边研究边 ...

  5. 3、Web前端学习规划:CSS - 学习规划系列文章

    CSS作为Web前端开发的第2种重要的语言,笔者建议在学了HTML之后进行.CSS主要是对于HTML做一个渲染,其也带了一些语言语法函数,功能也非常强大. 1. 简介: CSS(层叠样式表)是一种用于 ...

  6. 顶配涨至近2万 该买还是买!iPhone15正面曝光 与历代苹果手机对比边框爆窄

    从曝光的iPhone 15正面渲染图来看,其颜值确实要比上代又提高不少. 外媒放出了一组iPhone 15 Pro的正面渲染图照,从图片看边框非常的窄,与历代iPhone 边框对比,这个特点更是被放大 ...

  7. 【Python】一篇拿下类属性与类方法详解【超详细的注释和解释】

    文章目录 前言 类的实例化 类的非静态属性或方法(实例属性和方法) 类的静态属性和方法 静态属性(静态成员变量) 静态方法 类方法(静态成员函数) 总结 属性的访问权限 尾声 前言 先赞后看好习惯 打 ...

  8. delphi的bpl、dcp 、dcu

    BPL  英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件.编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文 ...

  9. 【.net core学习一】.net 5.0 webapi部署

    服务器:windows server 2012 x64 1.安装IIS: 2.下载并安装 dotnet-hosting-5.0.13-win.exe 下载地址: https://dotnet.micr ...

  10. [Ngbatis源码学习] Ngbatis 源码学习之资源加载器 DaoResourceLoader

    Ngbatis 源码学习之资源加载器 DaoResourceLoader DaoResourceLoader 是 Ngbatis 的资源文件加载器,扩展自 MapperResourceLoader.本 ...