首页 > 系统相关 >BeanShell Sample 如何使用?

BeanShell Sample 如何使用?

时间:2024-02-25 12:44:06浏览次数:17  
标签:prev SampleResult 获取 Sample 如何 取样器 BeanShell JMeter

一 引入:

  

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:获取线程组对象

标签:prev,SampleResult,获取,Sample,如何,取样器,BeanShell,JMeter
From: https://www.cnblogs.com/yongheng999/p/18032264

相关文章

  • OpenResty中如何实现,按QPS、时间范围、来源IP进行限流
    OpenResty是一个基于Nginx与Lua的高性能Web平台,它通过LuaJIT在Nginx中运行高效的Lua脚本和模块,可以用来处理复杂的网络请求,并且支持各种流量控制和限制的功能。近期研究在OpenResty中如何实现,按QPS、时间范围、来源IP进行限流,以及动态更新限流策略。今天将实现方案分享给大家。......
  • 已知两个数列各自的均值和方差,如何快速求出两个数列拼合后的均值和方差
    问题:数列A为[1,2,3,4,5,6,7,8,9],已知数列A的均值和方差和个数为mean_x,var_x,size_x数列B为[20,21,22,23,24,25,26,27,28,29],已知数列B的均值和方差和个数为mean_y,var_y,size_y现在将数列A与数列B拼合为数列Z,则数列Z为[1,2,3,4,5,6,7,8,9,20,......
  • 在K8S中,RS资源如何实现升级和回滚?
    在Kubernetes中,ReplicaSet(简称RS)是工作负载API对象,用于确保指定数量的Pod副本在集群中运行。当需要升级或回滚RS管理的Pod时,可以通过修改ReplicaSet的配置来实现。下面是如何实现RS资源的升级和回滚的步骤:升级RS资源修改ReplicaSet的配置:要升级RS,您需要修改其对应的Deploymen......
  • 读人工不智能:计算机如何误解世界笔记02_Hello,world
    1. Hello,world1.1. “Hello,world”是布赖恩·克尼汉和丹尼斯·里奇于1978年出版的经典著作《C程序设计语言》中的第一个编程项目1.2. 贝尔实验室可以说是现代计算机科学界中的智库,地位好比巧克力界的好时巧克力1.3. 计算机科学界的大量创新都起源于贝尔实验室1.3.1. 激......
  • 在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
    在Kubernetes(K8s)中,可以通过不同的策略来实现金丝雀发布(灰度发布)和蓝绿发布。以下是两种发布方式在K8s中的基本实现方法:金丝雀发布(灰度发布)金丝雀发布是一种逐步将新版本应用推送给部分用户群体,以收集反馈并监控新版本表现的方式。在K8s中,可以通过以下步骤实现:基于Deploym......
  • 在K8S中,如何让Pod运行一次?如何解决一次性任务?
    在Kubernetes(K8S)中,要让Pod运行一次并完成一次性任务,可以使用Job资源。Job是Kubernetes中用于运行一次性任务的工作负载API对象。它创建一个或多个Pod,并确保指定数量的Pod成功终止。当Pod成功完成后,Job将跟踪成功完成的情况。当达到指定的成功完成次数时,任务(即Job)就完成了。以下是......
  • 团队协作如何确保项目Node版本的一致性?
    前言想必大家在工作过程中都遇到过node版本带来的各种各样的问题,对于团队协作项目,你不能保证所有人的本地node版本都相同,所以在项目文档中往往会写上以下内容:为与线上环境一致,请保证以下版本node:15.x.xvue-cli:4.4.x但这样并不能完全避免问题,比如多个不同项目中使用的node版......
  • 什么是转换矩阵以及如何使用它
    项目地址:Pdfium.Net:https://github.com/1000374/Pdfium.NetPdfiumViewer:https://github.com/1000374/PdfiumViewer当您使用PDFium库处理PDF文件中的对象时,您可以使用SetMatrix函数以各种方式转换对象(通常是图像,但也包括任何其他嵌入对象)。使用变换矩阵,您可以旋转、平移(移......
  • windows如何同时安装两个不同版本的Mysql(Mysql8.0+Mysql5.7)
    1.问题由于公司要求使用mysql版本为Mysql5.7,而我之前的项目均是使用Mysql8.0,为了避免卸载重新安装Mysql5.7可能导致的问题,便寻找了可以同时在Windows上安装两个不同版本Mysql的方法2.解决参考:windows如何同时安装两个不同版本的Mysql(Mysql8.0+Mysql5.7)2.1进入你下载解压后......
  • 在K8S中,如何具体实现Pod被删除后,还能被自动拉起功能?
    在Kubernetes中,Pod被删除后能够自动拉起的功能是通过Deployment、StatefulSet或ReplicaSet等控制器来实现的。这些控制器负责维护指定数量的Pod副本,并确保在某个Pod实例由于任何原因(包括手动删除)消失时,会有一个新的Pod实例被创建以替换它。以下是具体实现方式:使用Deployment:D......