JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用

2023-09-13 16:11:07

一、什么是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后置处理器的基本应用了,当然还可以编写更加适用于测试场景的脚本和逻辑满足测试需要。

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

在这里插入图片描述

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

更多推荐

汽车电子系统总线LIN通信协议精要

汽车电子系统总线LIN通信协议精要文章目录汽车电子系统总线LIN通信协议精要简介LIN信号的物理层LIN总线收发器LIN通信协议LIN的主机和从机LIN报文帧结构同步间隔段(Breakfield)同步段(Syncfield)受保护的帧ID(ProtectedIdentifierfield)应答数据段(Datafield

从零开始:使用 Kubernetes 部署 Nginx 应用

[root@icv-k8s-node-1~]#kubectlcreatedeploymentjavaedge-nginx--image=nginx:1.24.0deployment.apps/javaedge-nginxcreated[root@icv-k8s-node-1~]#kubectlgetallNAMEREA

内网穿透的应用-NAS私有云存储 - 搭建Nextcloud私有云盘并公网远程访问

文章目录摘要1.环境搭建2.测试局域网访问3.内网穿透3.1ubuntu本地安装cpolar3.2创建隧道3.3测试公网访问4配置固定http公网地址4.1保留一个二级子域名4.1配置固定二级子域名4.3测试访问公网固定二级子域名摘要Nextcloud,它是ownCloud的一个分支,是一个文件共享服务器,允许您将个人

月木学途开发 5.轮播图模块

概述效果图数据库设计轮播图表DROPTABLEIFEXISTS`banner`;CREATETABLE`banner`(`bannerId`int(11)NOTNULLAUTO_INCREMENT,`bannerUrl`longtext,`bannerDesc`varchar(255)DEFAULTNULL,`bann

十天学完基础数据结构-第一天(绪论)

1.数据结构的研究内容数据结构的研究主要包括以下核心内容和目标:存储和组织数据:数据结构研究如何高效地存储和组织数据,以便于访问和操作。这包括了在内存或磁盘上的数据存储方式,如何将数据元素组织成有序或无序的集合,以及如何表示复杂的数据关系。数据的操作和处理:数据结构不仅关注数据的存储,还关注如何对数据进行各种操作,如插

并发编程——ScheduledThreadPoolExecutor

文章目录ScheduledThreadPoolExecutor介绍ScheduledFutureTask四种方法执行任务execute方法schedule方法scheduleAtFixedRate和scheduleWithFixedDelay分析ScheduledThreadPoolExecutor介绍Schedule

力扣刷题(简单篇):两数之和、两数相加、无重复字符的最长子串

坚持就是胜利一、两数之和题目链接:https://leetcode.cn/problems/two-sum/给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你

QCA组态如何科学命名?

前言(一)文献来源文献来源:[1]FurnariS,CrillyD,MisangyiVF,etal.Capturingcausalcomplexity:Heuristicsforconfigurationaltheorizing[J].AcademyofManagementReview,2021,46(4):778-7

Linux下的系统编程——线程同步(十三)

前言:在多线程编程中,如果多个线程同时访问和修改共享资源,可能会产生竞争条件和数据不一致的问题。同步机制用于协调线程之间的访问和操作,确保数据的正确性和一致性。为了避免多个线程同时访问和操作共享资源导致的问题,可以使用互斥锁(mutex)来实现线程的互斥访问。互斥锁可以保证同一时间只有一个线程访问共享资源、条件变量用于

读书笔记:多Transformer的双向编码器表示法(Bert)-2

多Transformer的双向编码器表示法BidirectionalEncoderRepresentationsfromTransformers,即Bert;第2章了解Bert模型(掩码语言模型构建和下句预测)文本嵌入模型Bert,在许多自然语言处理任务上表现优秀,本节主要包括:了解Bert,及与其他嵌入模型的区别;分

Packet Tracer中交换机的配置及Lab2实验

交换机是计算机网络中的一种网络设备,用于在局域网内传输和转发数据包。它具有数据包转发、数据包过滤、VLAN划分和端口管理等功能,能够实现高速、可靠和安全的数据传输,并支持网络的管理和控制。交换机在网络中发挥着连接终端设备和实现数据交换的重要作用。交换机的基本配置模式:模式提示符作用用户模式>只允许用户访问有限量的基本监

热文推荐