当前位置: 首页 > news >正文

【性能测试】初识 Jmeter 中的 BeanShell

初识 Jmeter 中的 BeanShell

  • 1.简介
    • 1.1 应用场景
    • 1.2 BeanShell 类型
  • 2.常用内置变量
    • 2.1 log 日志模块
    • 2.2 vars 模块
    • 2.3 props 模块
    • 2.4 prev 模块
  • 3.常见应用场景
    • 3.1 Java 文件处理
    • 3.2 导入外部 jar 包

BeanShell 是一个小型嵌入式 Java 源代码解释器,完全兼容 Java 语法。同时 BeanShell 也支持 JavaScript 和 Python 的一些语法,可谓是一个精巧、集大成的小工具,本文我们就重点说说这个小工具能在 Jmeter 接口测试、压测过程中的一些用法。

1.简介

1.1 应用场景

  • 提供的 Java 语法,可以做复杂的逻辑或者业务场景的判断。
  • 可以引用开发编写好的 jar 包实现功能,需要借助【测试计划】模块的 jar 包导入功能。
  • 接口测试中处理关联数据。
  • 跨线程组共享变量。

1.2 BeanShell 类型

  • 采样器BeanShell Sampler):发送 BeanShell 请求。
  • 前置处理器BeanShell PreProcessor):提前处理请求参数,如:图片处理,加密解密、日期处理等。
  • 后置处理器BeanShell PostProcessor):可以对请求完成后的响应数据的处理,实现接口关联、数据加密处理、解决乱码、中文显示等。
  • 定时器BeanShell Timer):定时器会让作用域内的每一个采样器都在执行前等待一个固定的时长。
  • 断言Beanshell Assertion):验证返回结果的正确性。
  • 监听器BeanShell Listener):监听器用来监听及显示 JMeter 取样器测试结果,能够以树、表及图形形式显示测试结果,也可以以文件方式保存测试结果。

2.常用内置变量

在这里插入图片描述

2.1 log 日志模块

提供不同等级的日志信息输出。

log.info("这是我的第一个beanshell脚本");
log.error("这是一条报错的日志");

2.2 vars 模块

全称为 JmeterVariables,表示 Jmeter 变量,vars 的变量作用域 在同一线程组,不可跨线程组

  • vars.get(String key):从 Jmeter 中获得变量值。
  • vars.put(String key,String value):数据输出到 Jmeter 变量中。
// 先获取 token 值,java 语法
String aa = vars.get("token");// 在 aa 的前面添加 Token 前缀
String token1 = "Token" + aa;
log.info(token1);//将拼接后的数据再写回到 jmeter 变量中
vars.put("token",token1);

2.3 props 模块

操作 Jmeter 属性,该变量引用了 Jmeter 的配置信息,可获取 Jmeter 属性,使用方法与 vars 类似,这个全局变量是可以跨线程组的

// 添加变量,非临时的,只要添加进去,就保存下来,一直有
props.put("name","value");
// 删除变量
props.remove("name");
// 获得一个变量
props.get(key); 

2.4 prev 模块

获取当前 Sample 返回响应信息,常用如下:

// 获取到第一个接口的返回码和返回数据
log.info(prev.getResponseCode())
log.info(prev.getResponseDataAsString())
  • getThreadName:获取线程名
log.error("getThreadName: " + prev.getThreadName());
  • getRequestHeaders:获取请求头
log.error("getRequestHeaders: " + prev.getRequestHeaders());
  • getUrlAsString:获取 URL 并转为 String
log.error("getUrlAsString: " + prev.getUrlAsString());
  • getSamplerData:获取 Sample 数据
log.error("getSampleData: " + prev.getSamplerData());
  • getSampleLabel:获取 Sample 名称
log.error("getSampleLabel: " + prev.getSampleLabel());
  • getResponseCode:获取响应码
log.error("getResponseCode: " + prev.getResponseCode());
  • getResponseHeaders:获取响应头
log.error("getResponseHeaders: " + prev.getResponseHeaders());
  • getResponseMessage:获取响应信息
log.error("getResponseMessage: " + prev.getResponseMessage());
  • getResponseDataAsString:获取响应数据并转为字符串
log.error("getResponseDataAsString: " + prev.getResponseDataAsString());

在这里插入图片描述

3.常见应用场景

3.1 Java 文件处理

BeanShell 是可以使用 source() 方法直接导入外部的 Java 文件,并进行直接编程的。

// 导入本地 java 文件,注意使用 \\
source("E:\\3-Learning\\22-BK2301\\javademo\\mianxiangduixiang\\Student.java");// 直接调用 java 文件中的类生成对象,并且通过这个对象调用里面的方法
Student s = new Student();
String id = s.id;
log.error("student对象s的id属性值为:"+id);

在这里插入图片描述

3.2 导入外部 jar 包

从测试计划模块直接导入外部开发完成的 jar 包,即可导入、使用其中的类和方法。

  • 添加 ToImage.jar
  • 添加 sun.misc.BASE64Decoder.jar
  • 定义一个变量 code,用于中转存储验证码数据

在这里插入图片描述

BeanShell 中即可直接导入使用:

import com.qf.ToImage;// 先将图像文件读入到此处,转为 base64
String aaa = ToImage.GetImageStr("E:/1.png");
System.out.println(aaa);// 使用 put 方法将加密的图片数据输出到 code 变量(测试计划中定义)中
vars.put("code",aaa);

在这里插入图片描述
补充:也可以将 jar 文件放到 jmeter/lib/ext 目录下,重启 Jmeter 后,即可使用 import 调用 jar 包内的方法。

相关文章:

【性能测试】初识 Jmeter 中的 BeanShell

初识 Jmeter 中的 BeanShell 1.简介1.1 应用场景1.2 BeanShell 类型 2.常用内置变量2.1 log 日志模块2.2 vars 模块2.3 props 模块2.4 prev 模块 3.常见应用场景3.1 Java 文件处理3.2 导入外部 jar 包 BeanShell 是一个小型嵌入式 Java 源代码解释器,完全兼容 Java …...

Rust实现基于Tokio的限制内存占用的channel

Rust实现基于Tokio的限制内存占用的channel 简介 本文介绍如何基于tokio的channel实现一个限制内存占用的channel。 Tokio提供了多种协程间同步的接口,用于在不同的协程中同步数据。 常用的channel有两种:bounded和unbounded,其中ubbounded的channel可…...

【C++】C++入门(上)--命名空间 输入输出 缺省参数 函数重载

目录 一 命名空间 1 命名空间的定义 2 命名空间的使用 二 C输入和输出 1 输出 2 输入 三 缺省参数 1 缺省参数概念 2 缺省参数分类 (1) 全缺省参数 (2)半缺省参数 四 函数重载 1 函数重载概念 2 分类 1 参数类型不同 2 参数个数不同 3 参数类型顺序不同 3 C为什…...

设计模式:原型模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《访问者模式》 下一篇《享元模式》 简介: 原型模式,它是一种创建型设计模式,它允许通过复制原型对象来创建新的对象,而无需知道创建的细节。其工作原…...

SpringMVC 资源状态转移RESTful

文章目录 1、RESTful简介a>资源b>资源的表述c>状态转移 2、RESTful的实现HiddenHttpMethodFilterRESTful案例 1、RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 a>资源 资源是一种看待服务器的方式&#xff0c…...

verilog vscode linux

安装 vscode 插件 插件:Verilog-HDL/SystemVerilog/Bluespec SystemVerilog 功能:.xdc .ucf .v 等代码高亮、代码格式化、语法检查(Linting)、光标放到变量上提示变量的信息等 关于其他语言的依赖工具等信息查看插件说明 代码对齐…...

Postman日常操作

一.Postman介绍 1.1第一个简单的demo 路特斯(英国汽车品牌)_百度百科 (baidu.com) 1.2 cookie 用postman测试需要登录权限的接口时,会被拦截,解决办法就是每次请求接口前,先执行登录,然后记住cookie或者to…...

10月份程序员书单推荐

新书书单 1、C程序设计教程(第9版) 1.广受认可的《C程序设计教程》系列的第9版(个别版本也译作《C语言大学教程》),秉承了该系列一贯的丰富而详细的风格。该系列一些版本因封面画有蚂蚁形象而被称为“C语言蚂蚁书”。…...

【ChatGPT系列】ChatGPT:创新工具还是失业威胁?

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

C++ 实现定时器的两种方法(线程定时和时间轮算法修改版)

定时器要求在固定的时间异步执行一个操作,比如boost库中的boost::asio::deadline_timer,以及MFC中的定时器。也可以利用c11的thread, mutex, condition_variable 来实现一个定时器。 1、使用C11中的thread, mutex, condition_variable来实现一个定时器。…...

2023mathorcup大数据竞赛选题建议及思路

大家好呀,昨天6点2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛开赛,在这里给大家带来初步的选题建议及思路。 注意,本文章只是比较简略的图文讲解,更加详细完整的视频讲解请移步: 2023mathorcup大数据数学…...

部署vuepress项目到githubPage

部署vuepress项目到githubPage 1. 项目文件夹下有两个分支(main和gh-page) 1.1 main分支存放项目代码 1.2 gh-page分支存放 npm run docs:build之后的dist里面的所有文件 2. 分别提交到github上 3. 你的项目/docs/.vuepress/config.js module.export…...

ORACLE表空间说明及操作

ORACLE 表空间作用 数据存储:表空间是数据库中存储数据的逻辑结构。它提供了用于存储表、索引、视图、存储过程等数据库对象的空间。通过划分数据和索引等对象的存储,可以更好地管理和组织数据库的物理存储结构。性能管理和优化:通过将不同类…...

vue使用Element-plus的Image预览时样式崩乱

🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ 问题: 在使用组件库的image时出现了点小问题,预览的图片层级反而没有表格的层级高 效果图:…...

安装使用vcpkg的简易教程

目录 1. 首先安装vcpkg2. 在vcpkg目录下运行bootstrap-vcpkg.bat 命令3. 接着vs进行集成4. 使用vcpkg搜索可用的包5.下载安装所需包6.下载安装完成 1. 首先安装vcpkg 使用git命令下载 git clone https://github.com/Microsoft/vcpkg.git如果下载失败可直接下载文件 (vcpkg-ma…...

制作一个简单的C语言词法分析程序

1.分析组成 C语言的程序中,有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表,给出对应的识别码,然后跟据对应的表格来写出程序 2.程序设计 程序主要有循环判断构成。不需推理即可产生的符号我…...

Java项目中将MySQL改为8.0以上

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 maven依…...

软考高项-计算题(2)

题4 项目的总预算是包含管理储备的,所以总预算应该是:13238102*360 ETC(BAC-EV)/CPI BAC60 EV60*0.318 CPI18/200.9 ETC42/0.9 答案选择C A 题5 因为题目中提到了“按目前的状况继续发展”,那么是:ETC(BAC-EV)/CPI EV1230*0…...

Centos使用war文件部署jenkins

部署jenkins所需要的jdk环境如下: 这里下载官网最新的版本: 选择jenkins2.414.3版本,所以jdk环境最低得是java11 安装java11环境 这里直接安装open-jdk yum -y install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64下载jenkins最新…...

数据结构和算法——用C语言实现所有排序算法

文章目录 前言排序算法的基本概念内部排序插入排序直接插入排序折半插入排序希尔排序 交换排序冒泡排序快速排序 选择排序简单选择排序堆排序 归并排序基数排序 外部排序多路归并败者树置换——选择排序最佳归并树 前言 本文所有代码均在仓库中,这是一个完整的由纯…...

吃豆人C语言开发—Day2 需求分析 流程图 原型图

目录 需求分析 流程图 原型图 主菜单: 设置界面: 地图选择: 游戏界面: 收集完成提示: 游戏胜利界面: 游戏失败界面 死亡提示: 这个项目是我和朋友们一起开发的,在此声明一下…...

Nautilus Chain 联合香港数码港举办 BIG DEMO DAY活动,释放何信号?

在今年的 10 月 26 日 9:30-18:30 GMT8 期间,Nautilus Chain 联合香港数码港共同举办了 “BIG DEMO DAY” Web3 项目路演活动,包括Xwinner、Sleek、Tx、All weather、Coral Finance、DBOE、PARSIQ、Hookfi、Parallels、Fintestra 以及 dot.GAMING 等在内…...

手写RPC框架

文章目录 什么是RPC框架RPC框架中的关键点通信协议序列化协议动态代理和反射 目前已有的RPC框架手写RPC框架介绍项目框架项目执行流程项目启动 什么是RPC框架 RPC(Remote Procedure Call,远程过程调用), 简单来说遵循RPC协议的就是RPC框架. …...

音视频常见问题(六):视频黑边或放大

摘要 本文介绍了视频黑边或放大的原因和解决方案。主要原因包括视频分辨率与显示视图尺寸不一致、摄像头采集、美颜滤镜格式兼容和分辨率。为了解决这些问题,开发者可以选择合适的渲染模式、动态调整分辨率、处理视频旋转和使用自定义视频渲染。 即构音视频SDK提供…...

Android笔记(八):基于CameraX库结合Compose和传统视图组件PreviewView实现照相机画面预览和照相功能

CameraX是JetPack库之一,通过CameraX可以向应用增加相机的功能。在下列内容中,将介绍一个结合CameraX实现一个简单的拍照应用。本应用必须采用Android SDK 34。并通过该简单示例,了解传统View层次组件的UI组件如何与Compose组件结合实现移动应…...

【每日一题Day361】LC2558从数量最多的堆取走礼物 | 大顶堆

从数量最多的堆取走礼物【LC2558】 给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作: 选择礼物数量最多的那一堆。如果不止一堆都符合礼物数量最多,从中选择任一堆即可。选中的那一堆留下平方根数量的礼物…...

【psychopy】【脑与认知科学】认知过程中的面孔识别加工

目录 实验描述 实验思路 python实现 实验描述 现有的文献认为,人们对倒置的面孔、模糊的面孔等可能会出现加工时长增加、准确率下降的问题,现请你设计一个相关实验,判断不同的面孔是否会出现上述现象。请按照认知科学要求,画…...

File类的常用API

判断文件类型 public boolean isDirectory() public boolean isFile() 获取文件信息 public boolean exists() public String getAbsolutePath() public String getPath() 返回创建文件对象时传入的抽象路径的字符串形式 public String getName() public long lastModi…...

02【Git分支的使用、Git回退、还原】

上一篇:01【Git的基本命令、底层命令、命令原理】 下一篇:03【Git的协同开发、TortoiseGit、IDEA的操作Git】 文章目录 02【Git分支的使用、Git回退、还原】一、分支1.1 分支概述1.1.1 Git分支简介1.1.2 Git分支原理 1.2 创建分支1.2.1 创建普通分支1.…...

Qt文件 I/O 操作

一.QFile 文件读取 QIODevice::ReadOnly QString filePath"/home/chenlang/RepUtils/1.txt"; QFile file(filePath); 1.逐行读取 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);while (!in.atEnd()) {QString line i…...