一 引入:

  

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. c#通过表达式树优雅的实现分组取TopN笔记

    需要引入nuget包来实现ef.functions调用row_number Thinktecture.EntityFrameworkCore.SqlServer 调用方式: //顺排 context. ...

  2. 学到一个编码技巧:用重复写入代替if判断,减少程序分支

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 近期阅读了rust标准库的hashbrown库(也就是一个 ...

  3. Docker 完整指南

    欢迎来到 Docker 的完整指南!在这个教程中,我们将深入研究 Docker 的各种特性,从基础的容器操作到高级的网络配置和数据管理.让我们一步步地探索 Docker 的丰富功能. 1. 安装 Do ...

  4. 修改微信PC通知声音

    安装软件 下载地址如下 点我下载 提取码:1314 找到微信的位置 选择版本号文件夹进去 搜索关键词:WeChatResource.dll 拖拽到软件当中,选择如下分类 118是通知声音 119是来电 ...

  5. TienChin-课程管理-配置课程字典

    课程类型 课程适用人群

  6. 脑科学与人工神经网络ANN的发展历程与最新研究

    本文深入研究了ANN的基本概念.发展背景.应用场景以及与人脑神经网络的关系. 关注TechLead,分享AI全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复 ...

  7. LyScript 通过PEB结构解析堆基址

    LyScript中默认并没有提供获取进程堆基址的函数,不过却提供了获取PEB/TEB的函数,以PEB获取为例,可以调用dbg.get_peb_address(local_pid)用户传入当前进程的PI ...

  8. 记录一次py2编码带来的坑

    "中文" == u"中文" # PY2 False"中文" == u"中文" # PY3 True

  9. PHP 会话(Session)实现用户登陆功能

    PHP 会话(Session)实现用户登陆功能 Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量.UID 存储在 cookie 中,或者通过 U ...

  10. 【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

    1.背景 大家好啊,上次给大家写了ChatGLM-6B的部署使用教程,[奶奶看了都会]云服务器部署开源ChatGLM-6B,让你拥有自己的ChatGPT 但是因为模型比较小的问题,所以日常工作中可能用 ...