JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
一、什么是BeanShell?
BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,JMeter性能测试工具也充分接纳了BeanShell解释器,封装成了可配置的BeanShell前置和后置处理器,分别是
BeanShell Preprocessor(BeanShell预处理程序)和BeanShell Postprocessor(BeanShell后置处理程序),能通过编写代码的方式更好的处理接口性能测试中的请求前置入参和后置数据的获取等等。BeanShell配置原件在JMeter的位置如下图:
BeanShell Preprocessor(BeanShell预处理程序)
BeanShell Postprocessor(BeanShell后置处理程序)
二、BeanShell Preprocessor(BeanShell预处理程序)的基本应用
在进行接口性能测试时,往往经常用到的场景就是每次api请求的入参都是变化的,比如有些接口请求参数有时间戳、或者很多时候后台为了保证接口请求的安全性,需要请求携带sign入参甚至这个sign是通过加密算法得到的。也就是说,这样的接口基本都是每次请求前需要构建不同的入参数据。因此在对这样的接口做并发测试时就需要参数化请求入参,BeanShell Preprocessor(BeanShell预处理程序)这样的前置处理器就可以很方便构建参数化入参。看看如下实例:可以参数化时间戳、参数化sign签名。
添加BeanShell Preprocessor前置处理器,在脚本编辑框中编辑如下代码:
// 导入MD5加密需要用到的jar包。
import org.apache.commons.codec.digest.DigestUtils;
// 声明你需要拼接的字符串
//String requestTime = "1680089472000"; //生成时间戳
String requestTime = "${__time(,)}"; //生成时间戳
log.info("=====请求时间戳:=====>>"+requestTime);
String yan = "N[8HXx!57Ivy%)#R";
//拼接需要加密的字符串
String str = yan + requestTime;
// 加密已拼接的字符串
String sign = DigestUtils.md5Hex(str);
log.info("=====sign签名:=====>>"+sign);
vars.put("sign",sign); //设置变量,将md5加密后的值传递给变量sign
vars.put("requestTime", requestTime); //将时间传递给变量requestTime
如上的BeanShell脚本中,定义了两个字符串:requestTime 和sign,设置了它们的取值,其中requestTime的值是${__time(,)},该函数可以按当前时间生成时间戳,sign的值是进行了md5加密后生成了一个32位小写的字符串,并将值传给变量requestTime 和sign用于后续接口请求参数化,然后脚本中也加入了日志打印,接口请求后可以在日志查看中输出参数日志信息
效果如下图:
这样就完成了BeanShell预处理脚本的编写,然后我们将脚本中的requestTime 和sign参数引入接口请求中,如下图:
最后,BeanShell预处理脚本以及请求参数化配置好后,我们运行JMeter看看请求效果和日志打印,请求2次接口:
可以看到每次请求的时间戳和sign值都不一样,请求响应结果都是返回正确的。这样就完成了jmeter并发请求每次都是不一样的请求入参。
三、BeanShell Postprocessor(BeanShell后置处理程序)的基本应用
BeanShell Postprocessor(BeanShell后置处理程序)其实就是通过脚本来获取响应相关的数据,用于做一些和其他接口有交互的场景,如接口A的响应结果的某个字段用于接口B的入参的时候,就可以通过BeanShell Postprocessor(BeanShell后置处理程序)来提取到接口A的响应结果的数据,然后参数化传递给接口B或者将提取的数据写入文件等。当然JMeter也提供了类似正则表达式提取器、json提取器等后置处理元件来提取响应或者请求数据,BeanShell Postprocessor(BeanShell后置处理程序)可能更方便通过脚本来自定义获取想要的数据。
添加BeanShell Postprocessor后置处理器,比如我们想要获取请求后的响应状态码、响应头响应体等数据都是可以的。在脚本编辑框中编辑脚本,如下图:
这样我们就可以得到响应状态码、响应体、响应头等数据,用于后续接口响应断言等测试验证,运行结果如下:
如上就是BeanShell Postprocessor后置处理器的基本应用了,当然还可以编写更加适用于测试场景的脚本和逻辑满足测试需要。
最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
面试文档获取方式:
相关文章
- Spring事务在单元测试中的应用
- 如何应用streamlit开发一个网络应用程序?
- 【MATLAB教程案例81】matlab在大学数学中的应用——线性代数
- 将web容器置于OSGi框架下进行web应用的开发
- C#Winform程序应用练习
- 【GIS】BlenderGIS应用配置之一
- JAVA-应用easyui
- 【快应用】小程序转快应用的原生广告
- 《重构HTML:改善Web应用的设计(修订版)》——2.7 XSLT
- Swift - 程序进入后台,以及应用终止时调用的方法
- 【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
- android开发:Android 中自定义View的应用
- 「基于Django的全民健康智慧中医数字服务平台」后端应用General_Data可视化
- Hera 是一个用小程序方式来写跨平台应用的开发框架
- Android 应用架构指南 -- 三种架构模式简介(MVC、MVP、MVVM)
- 《OpenGL ES应用开发实践指南:Android卷》—— 1.2 创建第一个程序
- 《深入解析sas:数据处理、分析优化与商业应用》一1.5 一个简单的SAS程序
- 《Spark大数据处理:技术、应用与性能优化》——第3章 Spark计算模型3.1 Spark程序模型
- [js高手之路] es6系列教程 - Set详解与抽奖程序应用实战
- 【HarmonyOS】鸿蒙轻量级智能穿戴应用可以集成华为分析SDK吗?
- 【快应用】快应用用户协议、隐私政策内容中可以多次跳转,点击返回未能返回上一级页面,该如何处理?
- 【快应用】折叠屏手机打开快应用页面重新加载问题
- 微信小程序 | 微信公众平台SpringBoot开发实例 │ 模板消息的应用开发
- 【转】锁(lock)知识及锁应用
- C/C++程序员必须熟练应用的开源项目