详解Jmeter中的BeanShell脚本

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法,所以它和java是可以无缝衔接的,学了Java的一些基本语法后,就可以来在Jmeter中写写BeanShell脚本了
在利用jmeter进行接口测试或者性能测试的时候,我们需要处理一些复杂的请求,此时就需要利用beanshell脚本了,BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法,所以它和java是可以无缝衔接的。beanshell由于内置了一些特有的变量,没法在一些集成代码工具上去调试。
学了Java的一些基本语法后,就可以来在Jmeter中写写BeanShell脚本了。
直接在线程组下创建一个BeanShell取样器,然后在脚本区写java代码:

写了个循环,执行后在这里看不到,要在jmeter.bat的windows批处理里看到:

JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互:
1、log:写入信息到jmeter.log文件,使用方法:log.info(“hahahahahahah”);
2、vars:操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
添加日志查看:

使用vars:

在线程组2里面去访问vars变量,输出null,可见vars确实是个局部变量:

3、props:操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
props的全局性:

4、prev:获取前面的sample返回的信息,常用方法:
a)getResponseDataAsString(): 获取响应信息;
b) getResponseCode(): 获取响应代码;
先发个接口请求,然后prev获取返回信息:

自定义函数:使用Java自定义函数来处理特定的逻辑,结合BeanShell的内置对象进行变量的存取,提高脚本的灵活性。
写了个自定义的静态函数,实现的是整数的累加:

发现报错,原来是函数的返回值是int类型的,而log.info()里面要的是String。这里把int类型的result转换为string有三种方法:
1、String.valueOf(result)
2、Integer.toString(result)
3、result+“”
任选一个即可。

引用外部java文件:在BeanShell中通过source(“代码路径”)方法引入Java文件,然后调用方法和java一样,new一个对象,通过
对象调用里面的方法。
写个静态方法,保存为Test.java文件,放在D盘下:

然后在BeanShell里引用Test.java,调用函数,传参100,日志输出:

引用外部jar包
首先打包:
1、把当前的Test作为运行文件,先运行一遍。

2、右键项目名–Export–Runnable JAR file.

3、在Launch找到运行文件,放到jmeter安装目录下lib/ext下。

4、在Jmeter的BeanShell里导包,调用方法。

这里我运行报错了,说方法找不到,摸索良久后尝试在测试计划里添加一下jar包,结果成功了。


到此这篇关于Jmeter中的BeanShell脚本的文章就介绍到这了
最后
如果你想学习自动化测试,那么下面这套视频应该会帮到你很多
如何逼自己1个月学完自动化测试,学完即就业,小白也能信手拈来,拿走不谢,允许白嫖....
最后我这里给你们分享一下我所积累和整理的一些文档和学习资料,有需要直接领取就可以了!

以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

相关文章:
详解Jmeter中的BeanShell脚本
BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法,所以它和java是可以无缝衔接的,学了Java的一些基本语法后,就可以来在Jmeter中写写BeanShell脚本了 在利用jmeter进行接口测试或者性能测试的时候,…...
前端和后端 优化
1.前端资源优化 1.1 html结构优化 保证简洁、清晰的html结构,减少或避免多余的html标签 使用HTML5的web语义化标签,结构清晰且利于seo css文件在head中引入,js文件放在body底部引入,这样做可以防止阻塞。另外如果有需要提前加载的…...
C++编译与运行:其二、编译期和运行期的区别
C的编译分为四步,最终生成一个可执行文件。 C的运行,就是将可执行文件交给操作系统,按照机器码逐步执行,运行功能。 先看一个非常非常有趣的例子: class Father{ public:virtual void f(){cout<<"I am fat…...
汽车电子专有名词与相应技术
1.EEA (Electronic & Electrical Architecture 电子电气架构) EEA在宏观上概括为物理架构与逻辑架构的结合,微观上通过众多电子元器件的协同配合,或集成式或分布式的系统级电子电气架构,具体详见专栏 新能源汽车电…...
idea 没加载 provided的包
目录 前言解决方案 前言 我的版本是IntelliJ IDEA 2022.1.4 (Community Edition),本地调试不知道为什么不加载provided的包。后来找到这篇文章https://youtrack.jetbrains.com/issue/IDEA-107048才知道这是个bug。不知道其他版本会不会出现这种问题。 解决方案 我…...
Hover:借贷新势力崛起,在经验与创新中找寻平衡
复苏中的Cosmos 如果让我选择一个最我感到可惜的区块链项目,我会选择Cosmos。 Cosmos最早提出并推动万链互联的概念,希望打通不同链之间的孤岛,彼时和另一个天王项目Polkadot号称跨链双雄。其跨链技术允许不同的区块链网络互相通信…...
软件设计原则-依赖倒置原则讲解以及代码示例
依赖倒置原则 一,介绍 1.前言 依赖倒置原则(Dependency Inversion Principle,DIP)是面向对象设计中的一个重要原则,由Robert C. Martin提出。 依赖倒置原则的核心思想是:高层模块不应该依赖于低层模块&…...
Linux--进程替换
1.什么是进程替换 在fork函数之后,父子进程各自执行代码的一部分,但是如果子进程想要执行一份全新的程序呢? 通过进程替换来完成,进程替换就是父子进程代码发生写时拷贝,子进程执行自己的功能。 程序替换就是通过特定的…...
【计算机网络】TCP协议
文章目录 1. TCP报文的结构2. TCP的发送缓冲区和接收缓冲区3. 确保可靠性序列号和确认序列号确认应答超时重传连接管理1️⃣三次握手建立连接2️⃣四次挥手断开连接 4. 提高性能流量控制滑动窗口拥塞控制延迟应答捎带应答 5. 面向字节流6. TCP/UDP对比 概念:TCP&…...
机器学习数据集:Kaggle
什么是Kaggle? Kaggle成立于2010年,是一个进行数据发掘和预测竞赛的在线平台。从公司的角度来讲,可以提供一些数据,进而提出一个实际需要解决的问题;从参赛者的角度来讲,他们将组队参与项目,针…...
软考 系统架构设计师系列知识点之设计模式(4)
接前一篇文章:软考 系统架构设计师系列知识点之设计模式(3) 所属章节: 老版(第一版)教材 第7章. 设计模式 第2节. 设计模式实例 3. 行为型模式 行为型模式可以影响一个系统的状态和行为流。通过优化状态…...
PyCharm 安装 cx_Oracle 失败
我在PyCharm的终端用 pip安装cx_Oracle失败,报错情况如下: ERROR: Could not build wheels for cx_Oracle, which is required to install pyproject.toml-based projects 出错原因: python 的版本太高了,我的是3.11版本的&…...
解决Windows出现找不到mfcm90u.dll无法打开软件程序的方法
今天,我非常荣幸能够在这里与大家分享关于mfc90u.dll丢失的5种解决方法。在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失。那么,mfc90u.dll究竟是什么文件呢?接下来,…...
如何设计线程安全的 HashMap?
如何设计线程安全的 HashMap? HashMap 线程不安全的体现: 多线程下扩容死循环:JDK1.7中的 HashMap 使用头插法插入元素,在多线程的环境下,扩容的时候有可能导致环形链表的出现,形成死循环。因此,JDK1.8使…...
rpc汇总
1、什么是rpc rpc的应用,有哪些 Google 开源了 gRPC, Facebook 开源了 Thrift, Twitter 开源了 Finagle, 百度开源了bRPC, 腾讯开源了 Tars, 阿里开源了 Dubbo 和 HSF, 新浪开源了 Motan 等 gr…...
OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框)
图像基本操作 5. 图像基本操作5.1 访问像素值并修改5.2 访问图像属性5.2 图像感兴趣区域ROI5.3 拆分和合并图像通道5.4 为图像设置边框(填充) 5. 图像基本操作 访问像素值并修改访问图像属性设置感兴趣区域(ROI)分割和合并图像 …...
指针仪表读数YOLOV8NANO
指针仪表读数YOLOV8 NANO 采用YOLOV8 NANO训练,标记,然后判断角度,得出角度,可以通过角度,换算成数据...
10000字!图解机器学习特征工程
文章目录 引言特征工程1.特征类型1.1 结构化 vs 非结构化数据1.2 定量 vs 定性数据 2.数据清洗2.1 数据对齐2.2 缺失值处理 原文链接:https://www.showmeai.tech/article-detail/208 作者:showmeAI 引言 上图为大家熟悉的机器学习建模流程图,…...
Java 官方提供了哪几种线程池,分别有什么特点?
JDK 中提供了 5 中不同线程池的创建方式: newCachedThreadPool newCachedThreadPool, 是一种可以缓存的线程池,它可以用来处理大量短期的突发流量。 它的特点有三个,最大线程数是 Integer.MaxValue,线程存活时间是 60 …...
DTI-ALPS处理笔记
DTI-ALPS处理笔记 前言: 前段时间刚好学习了一下DTI-ALPS处理(diffusion tensor image analysis along the perivascular space ),记录一下,以便后续学习。ALPS是2017年发表在《Japanese Journal of Radiology》的一篇文章首次提出的 (文章地址),主要用于无创评估脑内淋…...
C#异步编程陷阱:为何不能重复启动已完成的Task?
1. 从报错现象看Task的生命周期 那天调试代码时遇到一个奇怪的报错:"System.InvalidOperationException: 不能对已完成的任务执行Start"。作为一个常年和异步编程打交道的开发者,这个错误让我愣了好几秒。按理说Task不就是用来反复执行的吗&am…...
3种创新提取抖音高清封面方案:自媒体人的素材效率提升指南
3种创新提取抖音高清封面方案:自媒体人的素材效率提升指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...
MacBook Pro上从零配置PCL开发环境:Homebrew一键安装+CMake避坑指南
MacBook Pro上从零配置PCL开发环境:Homebrew一键安装CMake避坑指南 如果你刚入手一台M1/M2芯片的MacBook Pro,想要开始3D点云处理开发,PCL(Point Cloud Library)无疑是首选工具库。但不同于Windows平台的一键安装体验&…...
抖音无水印视频批量下载:如何免费获取高清内容并高效管理
抖音无水印视频批量下载:如何免费获取高清内容并高效管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...
TCP连接管理实战:从CLOSE_WAIT与TIME_WAIT的根源到内核调优
1. TCP连接状态机:从握手到挥手的全景视角 TCP协议作为互联网的基石,其连接管理机制直接影响着网络服务的稳定性和性能。要真正理解CLOSE_WAIT和TIME_WAIT这两个"问题状态",我们需要先建立完整的TCP状态机认知模型。想象TCP连接就…...
多模态AI新玩法:EVA-01帮你读懂复杂图表,做汇报、写分析效率翻倍
多模态AI新玩法:EVA-01帮你读懂复杂图表,做汇报、写分析效率翻倍 1. 引言:当数据可视化遇上AI"全知之眼" 在商业分析和学术研究的日常工作中,我们经常面临这样的困境:精心制作的图表被误解,关键…...
Shutter与Frame Length的动态平衡:如何在低光环境下优化帧率与画质
1. 低光环境下的成像挑战 昏暗的室内、夜晚的街道、烛光晚餐的场合——这些典型的低光环境总是让拍摄设备如临大敌。我清楚地记得第一次测试运动相机夜拍性能时的场景:画面要么布满雪花般的噪点,要么像卡顿的幻灯片。这背后的核心矛盾在于——当环境光线…...
Pixel Epic · Wisdom Terminal 代码调试与解释效果:精准定位错误并提供修复方案
Pixel Epic Wisdom Terminal 代码调试与解释效果:精准定位错误并提供修复方案 1. 代码调试新体验 想象一下这样的场景:深夜加班调试代码,面对一堆报错信息毫无头绪,只能一遍遍试错。现在,Pixel Epic的Wisdom Termin…...
JetBrains IDE试用期管理工具:从原理到实践的完整指南
JetBrains IDE试用期管理工具:从原理到实践的完整指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 一、问题导入:开发者的试用期困境 作为开发者,我们都经历过这样的场景&a…...
AcousticSense AI入门指南:零代码实现专业级音乐风格识别
AcousticSense AI入门指南:零代码实现专业级音乐风格识别 1. 为什么选择AcousticSense AI? 1.1 音乐风格识别的技术革新 传统音乐分类方法通常需要复杂的特征工程和专业知识,而AcousticSense AI采用了一种革命性的方法——让AI"看&qu…...
