当前位置: 首页 > 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语言实现所有排序算法

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

escodegen浏览器端使用教程:在Web环境中实现代码生成

escodegen浏览器端使用教程:在Web环境中实现代码生成 【免费下载链接】escodegen ECMAScript code generator 项目地址: https://gitcode.com/gh_mirrors/es/escodegen escodegen是一个强大的ECMAScript代码生成器,它能够将抽象语法树(AST)转换回…...

实战指南,基于快马平台快速构建用于工业质检的yolo缺陷检测系统

今天想和大家分享一个很实用的工业质检项目实战经验——基于YOLO模型快速搭建零件缺陷检测系统。这个项目特别适合需要快速验证算法效果的场景,我在InsCode(快马)平台上只用半天就完成了从原型到部署的全流程。 项目背景与需求分析 工业质检对精度和实时性要求很高&…...

【多模态表示与语言模型】3.1 自引用嵌入字符串(SELFIES)

3.1 自引用嵌入字符串(SELFIES)在分子生成式 AI 领域,表示学习(Representation Learning)的瓶颈长期以来集中在语法脆弱性问题上。传统 SMILES(Simplified Molecular-Input Line-Entry System)表…...

JAVA重点基础、进阶知识及易错点总结(34)注解基础(Annotation)

🚀 Java 巩固进阶 第 34 天 主题:注解基础(Annotation)—— 代码的"元数据"标签📅 进度概览:继设计模式之后,今天学习 Java 注解体系。注解是"代码的标签",是 …...

S7-200 MCGS 基于PLC的小型水厂恒压供水系统 带解释的梯形图接线图原理图图纸,io分配

S7-200 MCGS 基于PLC的小型水厂恒压供水系统 带解释的梯形图接线图原理图图纸,io分配,组态画面最近在搞一个小型水厂的恒压供水系统项目,用西门子S7-200 PLC搭配MCGS组态软件,效果挺有意思的。这个系统核心就仨字——稳如狗&#…...

对接亚马逊 SP-API(Amazon Selling Partner API) 第一章:AWS IAM 配置详解

1. AWS IAM 基础概念扫盲 第一次接触亚马逊SP-API的开发者,往往会在IAM配置环节卡壳。我见过不少团队在这个阶段浪费两三周时间反复调试,其实只要理解几个核心概念就能事半功倍。IAM(Identity and Access Management)就像亚马逊AW…...

3步解锁群晖Photos人脸识别:让DS918+等设备重获AI能力

3步解锁群晖Photos人脸识别:让DS918等设备重获AI能力 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 还在为群晖DS918、DS3615xs等设备无…...

教育科技赋能自主学习:JiYuTrainer的平衡之道与效率提升方案

教育科技赋能自主学习:JiYuTrainer的平衡之道与效率提升方案 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 教学管控与学习自由的平衡难题 在数字化教育普及的今天&…...

学生成绩管理系统|基于springboot + vue学生成绩管理系统(源码+数据库+文档)

学生成绩管理系统 目录 基于springboot vue学生成绩管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue学生成绩管理系统 一、前言 博主介绍&…...

【物联网】基于STM32F429与TMS320F28377的储能变流器控制软件架构设计

目录 一、双处理器架构设计概述 (一)异构双核系统定位 (二)硬件资源协同策略 二、STM32F429ZGT6 核心功能开发 (一)系统管理模块设计 1. 任务调度与状态监控 2. 多源数据融合存储 (二&am…...