JMeter:BeanShell到JSR223迁移中的注意事项

前言

在之前的文章JMeter:BeanShell向JSR223迁移过程遭遇的java标准库不可用问题-如何切换JDK版本中引用了一段使用BeanShell对入参进行加密的脚本,迁移到JSR223,虽然更换JDK后编译通过,看似也可以执行了,但是其实那段脚本是有问题的。要解释这个,就要先说一下JSR223在处理groovy语言时,与BeanShell的区别。

使用groovy语言时,JSR223可先对脚本进行编译,而且,推荐缓存编译后的脚本(配置项Script compiled caching - Cache compiled script if available默认选中,且推荐保持选中状态)。这使得它在脚本的执行效率上比BeanShell+Java解释器更加高效,因而官网建议在性能测试中使用JSR223 +Groovy来替代BeanShell+Java。

但是正是由于它的编译功能和缓存编译脚本的特性,使得当在脚本中直接使用JMeter变量或JMeter内置函数时,可能会出现非预期的效果,因为它仅缓存变量的第一次替换。所以,当在JSR223中使用{key}或{function}的方式来使用属性、变量或内置函数时,它仅在第一次调用的时候对值进行更新和替换,后续将不再替换,导致这些值更新后无法获取最新值,从而出错。

示例

1、添加一个dummy sampler

在响应中,模拟返回一个json,其中res字段是一个5位的随机字符串:{res:${__RandomString(5,abcdef,)}}

2、添加json提取器,提前响应中的res字段

3、添加JSR223 PostProcessor,在res的基础上进行处理

我就是简单的,在res后面添加一个字符传:“我是飞鸟呀”,其中分别使用${key}和vars.get("key")的方式来获取res的值,以比较其不同。

String newName = "${res}_我是飞鸟呀";
vars.put("newName",newName);String newName2 = vars.get("res") + "_我是飞鸟呀";
vars.put("newName2",newName2);

4、添加一个dummy sampler,显示第三步处理后的两个字符串

 

5、运行结果

单线程,执行两次,可以看到,使用{}方式获取的res,两次都是"dabdf",第二次没有按照预期更新。

而使用vars.get()方式获取的res,两次的值是不一样的,每次都拿到了最新的响应值。这才是我们实际业务中所预期的结果。

将第三步中的代码,粘贴到一个beanshell后置处理器中,再次执行,可以看到,即便是使用{}方式获取的变量,也每次都会更新:

总结

在JSR223中推荐使用vars.get(“key”)的方式使用变量,而非${key}的方式。

对于JMeter的内置函数,推荐通过Parameters passed to script来传递,在代码中通过args[]数组来调用,如下:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《0基础》学习Python——第二十讲__网络爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多,即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容,如果content-typejson类型的,打印上述代码的请求,则用一个命…

Linux 13:网络编程1

1. 预备知识 1-1. 理解源IP地址和目的IP地址 在IP数据包头部中,有两个IP地址,分别叫做源IP地址,和目的IP地址。 我们光有IP地址就可以完成通信了嘛?想象一下发qq消息的例子,有了IP地址能够把消息发送到对方的…

[嵌入式Linux]-常见编译框架与软件包组成

嵌入式常见编译框架与软件包组成 1.嵌入式开发准备工作 主芯片资料包括: 主芯片资料 主芯片开发参考手册;主芯片数据手册;主芯片规格书; 硬件参考 主芯片硬件设计参考资料;主芯片配套公板硬件工程; 软件…

Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习多输入单输出时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测) 模型设计 步骤1: 数据准备 收集和整理历史数据。确保数据集经过适当的预处理,如归一…

自己开发软件实现网站抓取m3u8链接

几天前一个同学说想下载一个网站的视频找不到连接,问我有没有什么办法,网站抓取m3u8链接 网页抓取m3u8链接。当时一听觉得应该简单,于是说我抽空看看。然后就分析目标网页,试图从网页源码里找出连接,有的源代码直接有,但是有的没有…

【Linux学习 | 第1篇】Linux介绍+安装

文章目录 Linux1. Linux简介1.1 不同操作系统1.2 Linux系统版本 2. Linux安装2.1 安装方式2.2 网卡设置2.3 安装SSH连接工具2.4 Linux和Windows目录结构对比 Linux 1. Linux简介 1.1 不同操作系统 桌面操作系统 Windows (用户数量最多)MacOS ( 操作体验好,办公人…

golang 解压带密码的zip包

目录 Zip文件详解ZIP 文件格式主要特性常用算法Zip格式结构图总览Zip文件结构详解数据区本地文件头文件数据文件描述 中央目录记录区(核心目录记录区 )中央目录记录尾部区 压缩包解压过程方式1 通过解析中央目录区来解压方式2 通过读取本地文件头来解压两…

mq基础入门

前言 黑马商城导入了mq依赖 但是没有改service发消息 因为下单业务一直有问题 所以先没改 作业时间不够也没处理 1.异步调用 就是所谓的发短信 可以不用立即恢复 比如下单业务 下了单更新信息 就相当于发个消息通知一下 不用立即更改 但是支付就比较重要 不需要因为故障导…

谷粒商城实战笔记-48~49-商品服务-API-三级分类-查询-树形展示三级分类数据-前端优化

文章目录 一,48-商品服务-API-三级分类-查询-树形展示三级分类数据1,创建商品服务命名空间2,商品服务增加配置3,网关增加商品服务的路由配置4,前端树形展示5,测试 二,49-商品服务-API-三级分类-…

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…

VTK源码分析:Type System

作为一款开源跨平台的数据可视化代码库,VTK以其清晰的流水线工作方式、丰富的后处理算法、异种渲染/交互方式,而被众多CAx软件选作后处理实施方案。而异种渲染/交互方式的实现,主要是倚重于VTK的类型系统,因此,有必要对…

从安装Node到TypeScript到VsCode的配置教程

从安装Node到TypeScript到VsCode的配置教程 1.下载Node安装包, 链接 2.双击安装包,选择安装路径,如下: 3.一直点击下一步,直至安装结束即可: 这个时候,node会默认配置好环境变量,并且…

抖音客户端一面

C | 字节抖音客户端一面 Http握手过程 1. 客户端问候(Client Hello) 客户端向服务器发送一个“问候”消息,其中包含客户端支持的SSL/TLS版本、加密算法、压缩方法以及一个随机数。 version 版本号,https也有版本号哦TLS 1.0、TLS 1.1、TLS 1.2等等 random 随机数…

(11)Python引领金融前沿:投资组合优化实战案例

1. 前言 本篇文章为 Python 对金融的投资组合优化的示例。投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程,目的是最大限度地提高回报和降低风险。 投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程,目的是最大限度地提高回报…

JUnit 单元测试

JUnit 测试是程序员测试,就是白盒测试,可以让程序员知道被测试的软件如何 (How)完成功能和完成什么样(What)的功能。 下载junit-4.12和hamcrest-core-1.3依赖包 相关链接 junit-4.12:Central …

【Qt】窗口

文章目录 QMainWindow菜单栏工具栏状态栏浮动窗口对话框自定义对话框Qt内置对话框QMessageBox QMainWindow Qt中的主窗口以QMainWindow表示,其总体结构如下: 菜单栏 菜单栏MenuBar,可包含多个菜单Menu,每个菜单也可以包含多个菜…

Godot游戏制作 03世界构建1.0版

在game场景,删除StaticBody2D节点,添加TileMap节点 添加TileSet图块集 添加TileSet源 拖动图片到图块,自动创建图块 使用橡皮擦擦除。取消橡皮擦后按住Shift创建大型图块。 进入选择模式,TileMap选择绘制,选中图块后在…

Java——————接口(interface) <详解>

1.1 接口的概念 在现实生活中,接口的例子比比皆是,比如:笔记本电脑上的USB接口,电源插座等。 电脑的USB口上,可以插:U盘、鼠标、键盘...所有符合USB协议的设备 电源插座插孔上,可以插&#xff…

若依Vue前后端分离版如何部署(windows)(超详细)

一、项目环境准备 下面是项目所需要准备的环境 Node.js redis 1、Node.js下载 下面进入官网可以下载Node.js — 在任何地方运行 JavaScript (nodejs.org)https://nodejs.org/zh-cn 下载完成安装后,需要配置环境变量,首先复制以下nodejs的安…

springboot系列十一:Thymeleaf

文章目录 官方文档基本介绍Thymeleaf机制说明Thymeleaf语法表达式运算符th属性迭代条件运算使用Thymeleaf th属性需要注意点 Thymeleaf综合案例需求说明思路分析代码实现 作业布置 官方文档 在线文档: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 离线…