JMeter:BeanShell向JSR223迁移过程遭遇的java标准库不可用问题-如何切换JDK版本

前言

看过我前面文章的人想必记得我因使用BeanShell,遭遇过JMeter OOM的问题。所以想起官网频频提示的,性能测试中建议使用JSR223+groovy来代替BeanShell。于是,开启BeanShell脚本向JSR223迁移之旅。

什么是JSR223

JSR223全称为Java Specification Request 223。其中JSR(Java Specification Request)是Java规范提案中的缩写,而JSR223是其中的一个提案,旨在将脚本语言集成到Java平台之上。所以,相比于BeanShell解释器,它支持更多的脚本语言:groovy、beanshell(java)、javascript、jexl和jexl2等。

同BeanShell一样,JSR223也包含多种组件:

  1. JSR223 PreProcessor:在执行取样器之前运行JSR223脚本代码的前置处理器。
  2. JSR223 PostProcessor:在执行取样器之后运行JSR223脚本代码的后置处理器。
  3. JSR223 Sampler:使用JSR223脚本编写的采样器。
  4. JSR223 Timer:基于JSR223脚本的定时器。
  5. JSR223 Assertion:用于验证响应的断言。
  6. JSR223 Listener:监听器,用于处理测试结果。

Groovy简介

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言能够与Java代码很好地结合无缝集成所有已经存在的Java对象和类库所以,对于习惯于使用BeanShell+java的人来说,应该可以很平滑地迁移至JSR223+groovy。

然而,我将原有的BeanShell脚本换成JSR223的时候,却频频出错。

迁移尝试

我曾处理过一个使用BeanShell对请求入参进行加密的场景,BeanShell中的脚本如下:

import java.util.Base64;//使用StringBuild构建需要加密的json字符串
StringBuilder ori_data = new StringBuilder("{\"userOrgInfo\": {\"userInfo\": {\"userId\": \"123\",\"name\": \"123\",\"orderNo\": \"");
ori_data.append("IBS-DD-${__time(,)}${__Random(000,999,)}");
ori_data.append("\"}}}");
//执行加密
String encryptedData = Base64.getEncoder().encodeToString(ori_data.toString().getBytes());      
//将加密结果赋值给encryptedData
vars.put("encryptedData", encryptedData);
//将不需要的字符串设置为null,以及时回收
oriDataStr = null;
encryptedData = null;

添加一个JSR223,将脚本粘贴进去,执行:

BUG! exception in phase 'semantic analysis' in source unit 'Script1.groovy' Unsupported class file major version 64

看起来是没找到类库。把代码全都注释掉,只留第一行import,仍然找不到。

BUG! exception in phase 'semantic analysis' in source unit 'Script2.groovy' Unsupported class file major version 64

它居然不能识别java的标准类库。。。。无缝集成?

查找原因

Jmeter集成的是Groovy 3.0.11,查了官网,有这么一句话:

Groovy 3.0 is the previous stable version of Groovy designed for JDK8+ with a new more flexible parser (aka Parrot parser).

而我电脑上的JDK是2.0

于是,重新安装一个JDK1.8,但是不敢卸载2.0,担心其它应用需要。所以,想要实现两个版本方便的切换。

Windows上切换JDK版本

按照如下步骤,设置环境变量:环境变量->环境变量

1、新建环境变量JAVA_HOME

分别创建一个JAVA_HOME8和一个JAVA_HOME10,输入它们的正确路径。

2、编辑系统变量->path

编辑->新建,输入%JAVA_HOME8%\bin,然后将它上移到第一个,至少是这些common Files的上面,它们是JDK在安装的过程中默认生成的环境变量,系统读取时从上向下,导致自己加的这个path不起作用。

3、切换JDK版本

想要切换JDK版本时,就修改path中的路径,指向JAVA_HOME8的路径时,便用jdk1.8,否则是jdk2.0

切换到jdk1.8后,再执行JSR223中的加密代码,顺利通过。不过这段代码仍有问题。下一次详述。

总结

Jmeter 5.5中集成的groovy版本为3.0.11,它需要的jdk版本是1.8。更多groovy与jdk版本信息,可查阅groovy官网:

The Apache Groovy programming language - Download

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

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

相关文章

Python爬虫(1) --基础知识

爬虫 爬虫是什么? spider 是一种模仿浏览器上网过程的一种程序,可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…

jenkins+gitlab+harbor+maven自动化容器部署

一、gitlab安装配置 1.1、安装 由于比较懒啊!这里就直接使用docker安装了啊! 没事先更新一个yum源:yum update -y 整一个gitlab镜像:docker pull gitlab/gitlab-ce 运行一个gitlab容器:docker run -d -p 8443:443 -p…

十七、【机器学习】【非监督学习】- K-均值 (K-Means)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

[论文笔记] pai-megatron-patch Qwen2-CT 长文本rope改yarn

更改: # Copyright (c) 2024 Alibaba PAI and Nvidia Megatron-LM Team. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License a…

MongoDB常用命令大全,概述、备份恢复

文章目录 一、MongoDB简介二、服务启动停止、连接三、数据库相关四、集合操作五、文档操作六、数据备份与恢复/导入导出数据6.1 mongodump备份数据库6.2 mongorestore还原数据库6.3 mongoexport导出表 或 表中部分字段6.4 mongoimport导入表 或 表中部分字段 七、其他常用命令八…

怎么关闭 Windows 安全中心,手动关闭 Windows Defender 教程

Windows 安全中心(也称为 Windows Defender Security Center)是微软 Windows 操作系统内置的安全管理工具,用于监控和控制病毒防护、防火墙、应用和浏览器保护等安全功能。然而,在某些情况下,用户可能需要关闭 Windows…

深层神经网络示例

维度说明: A[L]、Z[L]:(本层神经元个数、样本数) W[L]:(本层神经元个数、上层神经元个数) b[L]:(本层神经元个数、1) dZ[L]:dA[L] * g’A&#xf…

【BUG】已解决:ModuleNotFoundError: No module named ‘PIL‘

已解决:ModuleNotFoundError: No module named ‘PIL‘ 目录 已解决:ModuleNotFoundError: No module named ‘PIL‘ 【常见模块错误】 错误原因: 解决办法: 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我…

时序数据库如何选型?详细指标总结!

工业物联网场景,如何判断什么才是好的时序数据库? 工业物联网将机器设备、控制系统与信息系统、业务过程连接起来,利用海量数据进行分析决策,是智能制造的基础设施,并影响整个工业价值链。工业物联网机器设备感知形成了…

《Techporters架构搭建》-Day02 集成Mybatis-plus

集成Mybatis-plus Mybatis-plus集成Mybatis-plus步骤小结 Mybatis-plus Mybatis-plus官网 MyBatisPlus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它引入了一些新的特性&…

CSRF+XSS组合攻击实战

目录 0x01安装靶场 0x02分析功能点的请求接口,构造恶意请求 0x03寻找xss漏洞 0x01安装靶场 下载源码,解压到网站根目录 1.修改数据库配置文件 打开源码,进入到include目录下,打开数据库配置文件database.inc.php 将数据库的…

Template_C++

C模板 C提供了function template. function template:实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用的函数就称为函数模版。 是不是可以这样理解,函数模版就是给了一种功能&…

Keil开发IDE

Keil开发IDE 简述Keil C51Keil ARMMDK DFP安装 简述 Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公…

WebRTC音视频-环境搭建

目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1:VScode安装 2.2:MobaXterm安装 3:WebRTC服务器环境搭建 3.1:安装openssh服务器 3.2:安装Node.js 3.3:coturn穿透和转发服务器 3.3.1&a…

全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院(广东青年职业学院)第一届“求是论坛”成功举办

为进一步深化现代职业教育体系建设理论研究,丰富行业产教融合共同体实践探索,7月13日,全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院(广东青年职业学院)第一届“求是论坛”在广东行政职业学院&…

【iOS】static、extern、const、auto关键字以及联合使用

目录 前言extern关键字static关键字const关键字 联合使用static和externstatic和constextern和const auto关键字 先了解一下静态变量所在的全局/静态区的特点:【iOS】内存五大分区 前言 上面提到的全局/静态区中存放的是全局变量或静态变量: 全局变量…

LabVIEW软件开发的雷区在哪里?

在LabVIEW软件开发中,有几个需要注意的雷区,以避免常见的错误和提高开发效率: 1. 不良的代码结构 雷区:混乱的代码结构和不清晰的程序逻辑。 后果:导致难以维护和调试的代码,增加了错误和故障的风险。 …

AI算法18-最小角回归算法Least Angle Regression | LARS

​​​ 最小角回归算法简介 最小角回归(Least Angle Regression, LAR)是一种用于回归分析的统计方法,它在某些方面类似于最小二乘回归,但提供了一些额外的优点。最小角回归由Bradley Efron等人提出,主要用于处理具有…

Leetcode双指针法应用

1.双指针法 文章目录 1.双指针法1.1什么是双指针法?1.2解题思路1.3扩展 1.1什么是双指针法? 双指针算法是一种在数组或序列上操作的技巧,实际上是对暴力枚举算法的一种优化,通常涉及到两个索引(或指针)从两…

【D3.js in Action 3 精译_020】2.6 用 D3 设置与修改元素样式 + 名人专访(Nadieh Bremer)+ 2.7 本章小结

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可视化最佳实践(下)1.4 本章小结 第二章…