一 引入:

  

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. 【记录一个问题】gin框架中,ShouldBindUri()函数依赖特定版本编译器,更换库的版本号后导致panic

    panic发生在这一行: uriBindErr = c.ShouldBindUri(methodLastInParam.Interface()) 导致panic的堆栈信息如下: err=reflect ...

  2. 全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性

    全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性 1. 基本思想 大型语言模型(LLMs)具有出色的能力,但由于完全依赖其内部的参数化知识,它们 ...

  3. ABC306 A - F

    ABC306 A - F 代码不提供 A 题意:吧字符串的每个字符连续输出两遍,记得不要快读,不要忘记输入 $ n $ 纪念 Qinzh A 题 WA 掉 B 题意:给定长度为 $ 64 $ 的数组 ...

  4. 记录一则exachk进程占用大量CPU资源

    有Exadata客户在进行exachk巡检之后反馈,发现系统中,exachk进程占用了大量CPU资源. 了解之前的变更,只是巡检之前升级了AHF,然后进行标准的exachk巡检. 现象: 目前机器整体 ...

  5. [转载自jayant97] nRF9160与nRF Cloud 超详细入门攻略

    原文链接:nRF9160与nRF Cloud 超详细入门攻略 1. 产品简介 1.1. nRF Cloud ​ nRF Cloud是Nordic Semiconducotr公司在AWS上搭建的IoT平 ...

  6. TortoiseSVN 官网打不开,去哪下最新的软件和中文包?

    官网:https://tortoisesvn.net 能打开最好,但通常打不开,打不开时候去这个网站下: https://sourceforge.net/projects/tortoisesvn/ 这 ...

  7. Vue DevTools 安装和浏览器跳转到编辑器指定组件

    Vue DevTools install and Open component in editor 1.在谷歌浏览器安装vue 插件 1.1下载vue插件 链接:https://pan.baidu.c ...

  8. Java I/O 教程(九) FileWriter和FileReader

    FileWriter Java FileWriter 用于往文件中写入字符数据. 不像FileOutputStream类,你无需转换字符串成字节数组,因为它提供了直接写字符串的方法. 类定义 publ ...

  9. C++常用快读

    1.快读相关代码 inline int read() { int x=0,f=0; char ch=getchar(); while(!isdigit(ch))f|=(ch=='-'),ch=getc ...

  10. ~Keven_He的黑历史~

    "先生,我认为文言文比白话文更加简洁" "请举例" "就好像沉鱼落雁这句成语不是比白话文更加简洁吗" "沉鱼落雁是四个字,该用白话 ...