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加密后的值传递给变量signvars.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后置处理器的基本应用了,当然还可以编写更加适用于测试场景的脚本和逻辑满足测试需要。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108577.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程桌面工具

PRemoteM 是一款现代的远程会话管理和启动器,它让你能够在任何时候快速开启一个远程会话。目前 PRemoteM 已支持 微软远程桌面(RDP)、VNC、SSH、Telnet、SFTP, FTP, RemoteApp等协议。 图片 1 PRemoteM 简介 如果你远程连接windows桌面仍旧在使用winR,输…

靶场上新:Openfire身份认证绕过

本文由掌控安全学院-江月投稿 封神台新上线漏洞复现靶场:Openfire身份认证绕过。 漏洞详情: Openfire是采用Java编程语言开发的实时协作服务器,Openfire的管理控制台是一个基于Web的应用程序,被发现可以使用路径遍历的方式绕过…

内网穿透——Windows搭建服务器

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…

机器学习基础之《分类算法(6)—决策树》

一、决策树 1、认识决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法 2、一个对话的例子 想一想这个女生为什么把年龄放在最上面判断!!&…

四叶草clover配置工具:Clover Configurator for Mac

Clover Configurator是一款Mac上的工具,用于配置和优化Clover引导加载器。Clover引导加载器是一种用于启动macOS的开源引导加载器。它允许用户在启动时选择操作系统和配置启动选项。 Clover Configurator提供了一个可视化的界面,让用户可以轻松地编辑和…

关于时空数据的培训 GAN:实用指南(第 01/3 部分)

第 1 部分:深入了解 GAN 训练中最臭名昭著的不稳定性。 一、说明 GAN 是迄今为止最受欢迎的深度生成模型,主要是因为它们最近在图像生成任务上产生了令人难以置信的结果。然而,GAN并不容易训练,因为它们的基本设计引入了无数的不稳…

学习Bootstrap 5的第十一天

目录 折叠 基础的折叠 实例 Accordion(手风琴) 实例 导航 导航菜单 实例 导航对齐方式 实例 垂直导航栏 实例 动态选项卡 实例 胶囊状动态选项卡 实例 等宽的选项卡/胶囊的下拉菜单 实例 导航栏 基础的导航栏 实例 垂直导航栏 实…

多元函数的偏导数

目录 偏导数的定义 二元函数偏导数的几何意义 高阶偏导数 全微分 偏导数的定义 偏导数是一种特殊的数学概念,它是针对一个多变量的函数在某个自变量上的导数。 具体来说,对于一个有多个自变量的函数yf(x0, x1, xj, ..., xn),在自变量xk固…

使用Git把项目上传到Gitee的详细步骤

1.到Git官网下载并安装 2.到Gitee官网进行注册,然后在Gitee中新建一个远程仓库 3.设置远程仓库的参数 4.返回Gitee查看仓库是否生成成功 5.新建一个文件夹作为你的本地仓库 6.将新建好的文件夹初始化成本地仓库 第一步:右键点击刚创建的本地仓库&#…

软件流程图怎么画?详细画法看这里

软件流程图怎么画?软件流程图是软件开发过程中必不可少的一环,可以帮助开发人员更好地理解和规划软件开发的流程。在制作软件流程图的时候,我们可以使用一些制作工具。下面就给大家介绍一款好用的绘制工具。 我们可以使用【迅捷画图】来进行流…

Element Plus table formatter函数返回html内容

查看 Element Plus table formatter 支持返回 类型为string 和 VNode对象; 若依全局直接用h函数,无需引用 下面普通基本用法:在Element Plus中,你可以使用自定义的formatter函数来返回VNode对象,从而实现更灵活的自定…

Unity 课时 4 : No.4 模拟面试题

课时 4 : No.4 模拟面试题 C# 1. 请说明字符串中 string str null string str “” string str string.Empty 三者的区别 第一个未作初始化没有值, 第二个为空字符串, 答案: str null 在堆中没有分配内存地址 str "" 和 string.Empty 一样都是…