《BeanShell 在 JMeter 中的应用》总结

news2024/11/26 13:46:38

通过案例进行讲解

一、BeanShell 介绍

官网: http://www.BeanShell.org

BeanShell 是一种完全符合 Java 语法规范的脚本语言,具有以下特点:

  • 是一种松散类型的脚本语言,类似 JS。
  • 是用 Java 写成的小型、免费、可下载的嵌入式 Java 源代码解释器。
  • 执行标准 Java 语句和表达式,包含一些脚本命令和语法。

在 JMeter 中,BeanShell 可以对功能进行扩展,对变量进行操作,其主要作用包括:

  • 作为定时器(BeanShell Timer)。
  • 作为前置处理器(BeanShell PreProcessor)。
  • 作为取样器(BeanShell 取样器)。
  • 作为后置处理器(BeanShell PostProcessor)。
  • 作为断言(BeanShell 断言)。
  • 作为监听器(BeanShell Listener)。

二、BeanShell 常用内置变量

  1. Log:用于打印日志,最常用且简单,打印在 jmeter.log 中(JMeter安装目录/bin/jmeter.log)

    • 使用方法:
      • 打印 info 形式的普通字符串日志,如 log.info("hello world"); 
      • 拼接字符串和变量,如 log.info("hello world" + "${token}"); 
      • 打印自定义变量,先定义变量再打印,如 str = "hello world"; log.info(str); 
      • 打印 error 形式的普通字符串日志,如 log.error("ERROR - ERROR"); 
    • 查看
  2. vars:用于存取 JMeter 局部变量,可存取字符串内容或对象。

    • 使用方法:
      • 获取变量:vars.get() 。
      • 保存变量:vars.put("key", "value") 。
      • 对象保存 JMeter 变量中:vars.putObject("key", object) 。
      • 变量删除:vars.remove("key") 。
      • Parameters 保存参数集合,可通过 log.info(Parameters); 打印。
  3. props:设置 JMeter 全局的静态变量,实现跨线程组共享变量。

    • 使用方法:
      • 获取属性变量:props.get("key") 。
      • 存入全局属性:props.put("key", "value") 。
  4. ctx/prev

    • ctx:获取当前线程的上下文信息。
    • prev:等同于 ctx.getPreviousResult,可获取前一个取样器返回的信息。
    • 使用方法:
      • prev.getResponseDataAsString():获取响应信息。
      • prev.getResponseCode():获取响应 code。
  5. 其他

    • ResponseCode:响应码。
    • ResponseMessage:响应结果。
    • SampleResult.setResponseData("Hello world"):设置响应数据。
    • Label:表示取样器的名称。
    • IsSuccess:设置是否成功。

三、BeanShell 实际场景应用

  1. 登录密码加密(BeanShell 前置处理器)

    • 在java开发工具中编写代码 Eclipse打jar包(选中该类点击右键->Export->jar file) IDEA打jar包(File–>Project Structure-> Artifacts ->“+”JAR->From Module with dependency,导出,最后Build->Build Artifacts
    • 把打好的jar包放到jmeter目录下的apache-jmeter目录的lib下
    • 添加前置处理器-BeanShell PreProcessor
    • 编写代码,把加密好的结果存在变量中
    • 执行测试
  2. BeanShell 断言

    • BeanShell 断言可使用脚本执行更复杂的个性化断言检查,通过 Failure 和 FailureMessage 设置断言结果。
    • 案例:与数据库结果进行验证,添加 BeanShell 断言并编写相应代码。
  3. 线程之间共享变量(BeanShell 后置处理器)

        

实现步骤:

1. 创建线程组1-登录接口,在接口下添加BeanShell后置处理器, 实现CASTGC=${token},

2. 编写代码: 获取响应,把响应结果转为json对象 获取响应结果放在全局变量中,实现关联

3. 创建线程组2-用例1,header中引用线程组1的变量名称

4.执行线程组2-用例1

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

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

相关文章

计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

LocalDateTime的序列化和反序列化

背景 最近定位出一个LocalDateTime序列化相关的问题,简单记录一下。本文重点介绍Jackson对LocalDateTime的序列化和反序列化,并结合Spring应用场景进行介绍。 1.LocalDateTime与字符串转换 可以通过DateTimeFormatter实现LocalDateTime与字符串的相互…

Windows远程桌面无法拷贝文件问题

场景说明 Winwdows远程桌面,相比Linux方便一点就是,同是windows连接,其中复制粘贴功能,可以在两个windows无缝切换。 但最近笔者远程一台测试windows服务器时,发现无法在服务器上复制内容到本地,也无法从…

西门子s7第三方(S7netplus)读写操作

和西门子PLC通讯需要使用S7netplus​​这个包,可以在NuGet​​上搜索下载,下载后引入命令空间using S7.Net;​​ 创建PLC对象进行连接使用Write Read进行读写操作即可不需要在发请求帧 //创建Plc对象Plc plc; //西门子设备是s7-1200//参数1 CPu类型//参…

微信小程序+JAVA实现微信支付

时隔两年再次回归 本文主要讲的是小程序实现微信支付功能,后台采用JAVA。 一.准备工作 1.小程序 2.微信商户号 1.商户号申请 这里对小程序的申请不做赘述。 如果没有微信商户号的同学,点击该链接https://pay.weixin.qq.com/,按照下属步骤…

低代码与人工智能的融合:加速应用开发的未来趋势

什么是低代码,它是如何工作的? 低代码是一种软件开发概念,它通过最小化手工编码的方式,为开发和部署定制化应用提速。低代码平台具备模型驱动、沙盒多环境、可编程的可视化开发方式等,能用于开发包含有用户界面、业务逻…

二叉树——链式结构的实现

首先是分为三个文件进行实现:tree.h、tree.c、test.c tree.h 用链表来表示⼀棵⼆叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩⼦和右孩⼦所在…

基于Springboot + vue + mysql 校友社交管理系统 设计实现

目录 📚 前言 📑摘要 1.1 研究背景 📑操作流程 📚 系统架构设计 📚 数据库设计 💬 E-R表 4.2.2数据库逻辑结构设计 📚 系统功能的具体实现 系统功能模块 系统首页 校友会信息 校友活动 …

仿RabbitMQ实现消息队列———整体框架

目录 一、项目简介 需求分析 AMQP 特点: AMQP 模型: 交换机类型 持久化 网络通信 二、服务端模块 1、交换机数据管理 2、队列数据管理 3、绑定数据管理 4、消息数据管理 5、虚拟机数据管理 6、路由匹配管理 7、消费者管理 8、信道管理 …

智源发布三款BGE新模型,再次刷新向量检索最佳水平

近期,以大语言模型(LLM)为基础的向量模型(embedding model)变得愈发流行。得益于大语言模型强大的语义理解能力,相关模型在下游任务中的检索精度得到了显著的提升。然而,当前基于大模型的向量模…

leetcode 1555 银行账号概要(postgresql)

需求 用户表: Users --------------------- | Column Name | Type | --------------------- | user_id | int | | user_name | varchar | | credit | int | --------------------- user_id 是这个表的主键。 表中的每一列包含每一个用户当前的额度信息。 交易表&…

Nginx反向代理实战

使用反向代理代理服务 假设我们有三台服务器提供不同的服务 nginx作为代理服务器 代理服务器: 192.168.101.23 其余三台服务器 服务器1 192.168.101.18 服务器2 192.168.101.87 服务器3 192.168.101.20 代理服务器的nginix配置 server {listen 8085;ser…

【机器学习基础】机器学习概述与实践基础

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

Docker中使用自定义网络方式实现Redis集群部署与测试流程

场景 Docker中Docker网络-理解Docker0与自定义网络的使用示例: Docker中Docker网络-理解Docker0与自定义网络的使用示例-CSDN博客 参考上面的流程实现自定义网络的实现。 下面记录其应用实例,使用Docker的自定义网络实现redis集群部署。 注&#xf…

IP地址https证书的优势与申请途径

一、IP地址SSL证书的优势 无需域名:对于一些内部系统或者专用设备而言,它们可能不具有域名,但仍需保障通信安全。IP地址SSL证书正好满足这一需求。简化管理:对于拥有大量设备的企业来说,维护每个设备的域名可能是一个…

tomato-靶机渗透

tomato-靶机 一、安装靶机环境 下载双击.ova文件,写文件名路径导入 打开虚拟机用NAT模式 编辑–>虚拟网络编辑器查看IP段 二、信息收集 1.御剑端口扫描查找该虚拟机的IP 访问网站 扫目录 dirb http://192.168.30.130 收集到目录 /server-status /antibot_im…

成为git砖家(9): git checkout <commit> <file> 的含义

文章目录 1. 目的2. 官方文档解释3. Tower 的解释4. References 1. 目的 git checkout 命令承载了非常多的功能&#xff0c; 想要一次全弄懂&#xff0c;不太现实&#xff1b; 这次白鱼带领大家学习 git checkout <file> 的用法。 老规矩&#xff0c;先查看 git checko…

鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇

一、概述 云数据库是一款基于对象模型的数据库&#xff0c;采用存储区、对象类型和对象三级结构。 数据模型 存储区 存储区是一个独立的数据存储区域&#xff0c;多个数据存储区之间相互独立&#xff0c;每个存储区拥有完全相同的对象类型定义 --类似于关系型数据库中的da…

如何有效管理众多账号密码:选择适合你的密码管理工具

在如今的数字化时代&#xff0c;我们的生活几乎离不开各种互联网应用和服务。从社交媒体到在线银行&#xff0c;从购物网站到工作平台&#xff0c;每个应用都要求我们注册账号并设置密码。 随着账号数量的不断增加&#xff0c;管理这些密码成为了一个令人头疼的问题。幸运的是…