【Jmeter】什么是BeanShell?

news2025/1/23 10:37:47

一、什么是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前置处理器,在脚本编辑框中编辑如下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

2023最新Jmeter接口测试从入门到精通(全套项目实战教程)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速打造BI大屏 激活各行业数据价值

BI的概念普遍认为最早由Gartner公司提出,简单可理解为基于现代企业经营理论与信息应用技术系统对信息、数据进行挖掘、分析和处理,最终辅助商业决策的一个企业服务解决方案。 在企业数字化进程中,这样的解决方案主要以信息技术系统为底座&am…

力扣 -- 673. 最长递增子序列的个数

小算法&#xff1a; 通过一次遍历找到数组中最大值出现的次数&#xff1a; 利用这个小算法求解这道题就会非常简单了。 参考代码&#xff1a; class Solution { public:int findNumberOfLIS(vector<int>& nums) {int nnums.size();vector<int> len(n,1);auto…

23.Xaml Frame控件---->导航控件

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…

leetcode330. 按要求补齐数组(java)

按要求补齐数组 题目描述贪心算法代码演示 题目描述 难度 - 困难 leetcode - 330. 按要求补齐数组 给定一个已排序的正整数数组 nums &#xff0c;和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中&#xff0c;使得 [1, n] 区间内的任何数字都可以用 nums 中某几…

演讲实录:大模型时代,我们需要什么样的AI算力系统?

当前&#xff0c;“百模大战”带来了算力需求的爆发&#xff0c;AI芯片产业也迎来巨大机遇&#xff0c;“创新架构开源生态”正在激发多元AI算力产品百花齐放。面对新的产业机会&#xff0c;AI算力产业链亟需通过上下游协作共同把握机遇。 近日&#xff0c;浪潮信息AI&HPC…

Unity Shader顶点数据疑问

1&#xff09;Unity Shader顶点数据疑问 2&#xff09;Unity 2018发布在iOS 16.3偶尔出现画面不动的问题 3&#xff09;安卓游戏启动后提示“应用程序异常” 这是第352篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、社区帖子等技术知…

MCU芯片测试:性能指标测试痛点是什么?ATECLOUD能否解决?

MCU芯片测试指标的核心是性能指标&#xff0c;包括处理器性能、存储器容量和读写速度&#xff0c;外设性能等。芯片测试对自动化测试的要求很高&#xff0c;ATECLOUD-IC不仅解决了传统测试方法的问题&#xff0c;而且也可以满足芯片测试的高要求&#xff0c;高效地完成MCU芯片性…

详解qsort函数的使用及模拟实现qsort函数

目录 引言&#xff1a; 1. qsort函数简介&#xff1a; &#x1f388;qsort函数原型&#xff1a; &#x1f388;函数参数介绍&#xff1a; &#x1f388;比较函数(compar)的编写&#xff1a; &#x1f388;(补充) void*类型的指针&#xff1a; 2.qsort函数示例&#xff1a;…

java将excel中用例写到world中【搬代码】

首先创建用例 例如&#xff1a; 运行代码: 预期结果&#xff1a; 实际结果&#xff1a;与预期结果不符合&#xff0c;哪位大佬有代码传授一下啊&#xff0c;实在是不知道咋写了 代码&#xff1a; package com.znzdh.qitagongju; import com.spire.doc.*; import com.spire…

安徽省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

安徽省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

InstallShield打包升级时不覆盖原有文件的解决方案

一个.NET Framework的Devexpress UI Windows Form项目&#xff0c;用的InstallShield&#xff0c;前些个版本都好好的&#xff0c;最近几个版本突然就没法更新了&#xff0c;每次更新的时候都覆盖不了原文件&#xff0c;而且这样更新后第一次打开程序&#xff08;虽然是老程序&…

ReID网络:MGN网络(5): 一点延伸: 缩减特征维度, 提高匹配效率

1. MGN网络输出 在实际使用MGN时&#xff0c;是将网络尾部的特征进行导出&#xff0c;并进行相关的相似性度量。 如图1所示&#xff0c;MGN特网络在析出特征的结尾处执行了concat操作。如果每一条特征维度是256的话&#xff0c;那么MGN最终输出将是2048维的特征。 图1 MGN特征…

香港汇丰银行开户

作为香港较知名的银行之一&#xff0c;汇丰银行提供了丰富的金融服务&#xff0c;包括个人银行服务、企业银行服务以及国际银行服务等。对于需要在香港开展业务或投资的人来说&#xff0c;开立一个汇丰银行账户是必不可少的。那么&#xff0c;开立汇丰银行账户需要哪些资料&…

医院用泛微构建数字化信创平台,人财物、医教研、文事会统一管理

近年来&#xff0c;国家多次发布政策&#xff0c;驱动医疗行业的智慧化转型。医疗行业作为重点领域&#xff0c;正在大力推进信创发展&#xff0c;数字化和信创将共同助力医院的高质量发展。 国家卫健委发布的《医院智慧管理分级评估标准体系&#xff08;试行&#xff09;》、…

【算法训练-数组 五】【二分查找】:旋转排序数组的最小数字、旋转排序数组的指定数字

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【数组的二分查找】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为…

fast-lio2添加wheel在发散时轨迹约束

fast-lio2主要算法为迭代误差卡尔曼滤波算法&#xff0c;imu作为预测&#xff0c;点云更新&#xff0c;当点云发散时输出位姿异常&#xff0c;漂移很大&#xff0c;后端在融合出现崩溃情况&#xff0c;加入轮速计约束发散时位姿。 1.订阅wheel话题 2.发散检测&#xff0c;检测…

mybatisplus配置拦截器实现保存加密,输出解密,模糊查询

前言&#xff1a;因公司需求需要把某些实体类的某些字段值进行加密保存&#xff0c;在查询时解密明文输出。现记录两种方式。 一、第一种方式&#xff1a; &#xff08;1&#xff09;使用TableField(typeHandler TypeHandler.class)注解自带的字段类型处理器&#xff0c;写一…

盲盒游戏开发方案

盲盒游戏是一种新兴的游戏类型&#xff0c;其核心机制是让玩家在购买时不知道会获得哪一种物品&#xff0c;从而产生一种探索的乐趣。那么&#xff0c;如何开发一个盲盒游戏呢&#xff1f;以下是一些步骤和要点。 一、确定游戏目标和规则 在开发盲盒游戏时&#xff0c;…

前端:nodejs多版本管理工具nvm

nvm是什么 nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具&#xff0c;为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 nvm下载 可在点此在github上下载最新版本,本次…

拷贝构造函数(深拷贝+浅拷贝)

目录 拷贝构造函数浅拷贝深拷贝 拷贝构造函数 拷贝构造函数&#xff1a; Myclass(const Myclass& myclass) {amyclass.a;bmyclass.b;cmyclass.c; }浅拷贝 浅拷贝的思路就是和默认的拷贝构造函数一样: 即将原对象的值直接赋值给新对象&#xff0c;这样做一般情况下是没什…