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

Jmeter二次开发实操问题汇总(JDK问题,jar包问题)

前提

之前写过一篇文章:https://qa-lsq.blog.csdn.net/article/details/119782694
只是简单尝试了一下生成一个随机手机号码。
但是如果在工作中一个实际场景要用的二次开发,可能会遇到一些问题。

比如这样一个场景:
Mobile或者前端调用部分接口,比如登录,验证码发送等等,要求手机号,密码,验证码等信息需要加密。
在调用接口时的值是经过加密的值,后端收到相应的信息后再解密。

这就使得在使用jmeter调用接口的时候,需要先把手机号,密码等值在其他地方加密一下,然后再填到jmeter里去,非常麻烦。
Jmeter二次开发就能完美的解决这个问题。

问题1

但在实际操作过程中遇到了一些问题。

首先讲一下环境,公司提供的电脑权限是限制的很死的,我没有权限修改环境变量。
同时java JDK的版本是17,IDEA只能下载社区版。

这就导致一个问题,使用社区版的IDEA创建Maven项目,然后打jar包,一切的做法都是对的,但偏偏打出来的jar包Jmeter无法读取。

原因是创建的maven项目中,pom.xml文件少了如下这段:
在这里插入图片描述

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>7</source><target>7</target></configuration></plugin></plugins></build>

如果少了这段,maven未必能正确支持j你的java版本,打出来的jar包jmeter识别不了。

这边还有一个问题,

<source>7</source>
<target>7</target>

这边我填的是7,不是17
因为经过确定的尝试,填17打出来的jar包jmeter也无法识别,需要填写低版本
我推测是因为我使用的jmeter版本较低的原因,与高版本的java JDK不兼容。

问题2

我之前尝试的是生成随机手机号码,这个函数非常简单,不需要特别的jar包支持。
仅需二次开发所必须的一些jar包,如下:
在这里插入图片描述

这些jar包在下载好的meter里都会自带的。

但如果我要实现其他的功能,需要另外的jar包支持呢。
我贴一下此次二开的加密代码,密钥用XXXXXXXXX替换:

package org.examples.functions;import cn.hutool.crypto.Mode;
import cn.hutool.crypto.symmetric.AES;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.Function;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.util.JMeterUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;import java.security.Security;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;public class EcbEncryFunctionsAA extends AbstractFunction {//密钥private static final String ACE_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXX";private static final String key = "__ecbEncryptfunctions";private static final List<String> desc = new LinkedList<String>();private static String middleString = "";static{desc.add(JMeterUtils.getResString("Name of encrypt String using ECB"));}//    public static void main(String[] args) {
//        System.out.println(aesEncryptPKCS7Padding("13944566740"));
//    }@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {Security.addProvider(new BouncyCastleProvider());
//        String ecb_key = ACE_KEY;String padding="PKCS7Padding";AES aes = new AES(Mode.ECB.name(),padding, ACE_KEY.getBytes());// 加密并进行Base转码String encrypt = aes.encryptBase64(middleString);return encrypt;}@Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {if (collection.size() != 1) {throw new InvalidVariableException("Expected 1 parameter, but got " + collection.size());}CompoundVariable parameter = collection.iterator().next();middleString = parameter.execute();}//    private static String aesEncryptPKCS7Padding(String text) {
//        Security.addProvider(new BouncyCastleProvider());
//        String ecb_key = ACE_KEY;
//        String padding="PKCS7Padding";
//        AES aes = new AES(Mode.ECB.name(),padding, ecb_key.getBytes());
 加密并进行Base转码
//        String encrypt = aes.encryptBase64(text);
//        return encrypt;
//    }@Overridepublic String getReferenceKey() {return key;}@Overridepublic List<String> getArgumentDesc() {return desc;}
}

这段加密需要两个jar包支持
在这里插入图片描述

经过测试,这段加密代码可用,而且打包之后可以在jmeter的函数助手里看见这个函数
但是在实际调用这个函数的时候jmeter会报错:
在这里插入图片描述

意思是没有相应的jar包支持

这边需要把所有依赖的jar包同样放到lib/ext/下
这边需要把所有依赖的jar包同样放到lib/ext/下
这边需要把所有依赖的jar包同样放到lib/ext/下

maven下载的jar包在.m2文件下,这边不多解释
在这里插入图片描述

解决这些问题之后,我的加密就可以在jmeter里使用了
在这里插入图片描述

相关文章:

Jmeter二次开发实操问题汇总(JDK问题,jar包问题)

前提 之前写过一篇文章&#xff1a;https://qa-lsq.blog.csdn.net/article/details/119782694 只是简单尝试了一下生成一个随机手机号码。 但是如果在工作中一个实际场景要用的二次开发&#xff0c;可能会遇到一些问题。 比如这样一个场景&#xff1a; Mobile或者前端调用部分…...

网络安全B模块(笔记详解)- 数字取证

数据分析数字取证-attack 1.使用Wireshark查看并分析Windows 7桌面下的attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户的IP地址,并将恶意用户的IP地址作为Flag(形式:[IP地址])提交; 解析:http.request.method==POST ​ Flag:[172.16.1.102] 2.继续…...

阿里云服务器8080端口安全组开通图文教程

阿里云服务器8080端口开放在安全组中放行&#xff0c;Tomcat默认使用8080端口&#xff0c;8080端口也用于www代理服务&#xff0c;阿腾云atengyun.com以8080端口为例来详细说下阿里云服务器8080端口开启教程教程&#xff1a; 阿里云服务器8080端口开启教程 阿里云服务器8080端…...

vmlinux, vmlinux.bin, bzImage; cmake的find_package(Clang)新增了哪些变量( 比较两次记录的所有变量差异)

vmlinux, vmlinux.bin, bzImage cd /bal/linux-stable/ file vmlinux #vmlinux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, BuildID[sha1]=b99bbd9dda1ec2751da246d4a7ae4e6fcf7d789b, not stripped #文件大小 20MB, 19940148Bfile ar…...

webpack配置入门

webpack是需要一定配置才能使用的&#xff0c;否则无任何效果。在开始webpack学习之前必须理解以下5个核心概念。 5大核心配置 1.entry(入口) webpack从那个文件开始打包&#xff0c;支持单文件入口&#xff08;vue和react脚手架单入口&#xff09;和多文件入口 2.output(输…...

Elasticsearch 8.X进阶搜索之“图搜图”实战

Elasticsearch 8.X “图搜图”实战 1、什么是图搜图&#xff1f; "图搜图"指的是通过图像搜索的一种方法&#xff0c;用户可以通过上传一张图片&#xff0c;搜索引擎会返回类似或者相关的图片结果。这种搜索方式不需要用户输入文字&#xff0c;而是通过比较图片的视…...

LLM之RAG实战(十三)| 利用MongoDB矢量搜索实现RAG高级检索

想象一下&#xff0c;你是一名侦探&#xff0c;身处庞大的信息世界&#xff0c;试图在堆积如山的数据中找到隐藏的一条重要线索&#xff0c;这就是检索增强生成&#xff08;RAG&#xff09;发挥作用的地方&#xff0c;它就像你在人工智能和语言模型世界中的可靠助手。但即使是最…...

UI动效设计师通往高薪之路,AE设计从基础到进阶教学

一、教程描述 UI动效设计&#xff0c;顾名思义即动态效果的设计&#xff0c;用户界面上所有运动的效果&#xff0c;也可以视其为界面设计与动态设计的交集&#xff0c;或者可以简单理解为UI设计中的动画效果&#xff0c;是UI设计中不可或缺的组成部分。现在UI设计的要求越来越…...

APK多渠道加固打包笔记之360加固宝

知识储备 首先需要知道V1,V2,V3签名的区别&#xff0c;可以参考之前的文章&#xff1a;AndroidV1,V2,V3签名原理详解 前言&#xff1a;一般开发者会指定使用自己创建的证书&#xff0c;如果没有指定&#xff0c;则会默认使用系统的证书&#xff0c;该默认的证书存储在C:\Users…...

编程天赋和努力哪个更重要?

编程天赋和努力在编程中都非常重要&#xff0c;但它们的侧重点不同。 编程天赋通常指的是与生俱来的、在逻辑思维、抽象思维、创造力等方面的能力&#xff0c;这些能力可以帮助程序员更快地理解问题、更高效地设计和实现解决方案。天赋的确可以帮助程序员更容易地入门和更快地掌…...

SpringCloud Alibaba之Nacos配置中心配置详解

目录 Nacos配置中心数据模型Nacos配置文件加载Nacos配置 Nacos配置中心数据模型 Nacos 数据模型 Key 由三元组唯一确定&#xff0c;三元组分别是Namespace、Group、DataId&#xff0c;Namespace默认是公共命名空间&#xff08;public&#xff09;&#xff0c;分组默认是 DEFAUL…...

个人实际开发心得感悟及学习方法

前言 我的学习路线应该和大多数人的学习路线差不多,快速的学习完html和css,很多东西都没有记住的情况下就进入了js的学习,js学的懵懵懂懂就进入了node.js的基础学习和webpack的了解式学习,然后就跨度到了vue和react框架的学习。 节奏很快,学习的基础也极其不扎实。正如同那句…...

光速爱购--靠谱的SpringBoot项目

简介 这是一个靠谱的SpringBoot项目实战&#xff0c;名字叫光速爱购。从零开发项目&#xff0c;视频加文档&#xff0c;十天就能学会开发JavaWeb项目。 教程路线是&#xff1a;搭建环境> 安装软件> 创建项目> 添加依赖和配置> 通过表生成代码> 编写Java代码&g…...

P1019 [NOIP2000 提高组] 单词接龙

网址如下&#xff1a;P1019 [NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 很怪&#xff0c;不知道该说什么 我试了题目给的第一个测试点的输入&#xff0c;发现输出和测试点的一样&#xff0c;但是还是WA 不是很懂为什么 有没有大佬帮我看一下…...

图解设计模式-中介者模式(Mediator)

中介者模式 定义 使用一个中介者对象&#xff08;mediator&#xff09;集中封装多个具有依赖/关联关系的对象&#xff08;colleague&#xff0c;同事对象&#xff09;之间的交互&#xff0c;使各对象之间不再互相引用&#xff0c;降低对象之间的强耦合程度&#xff0c;对象之…...

小程序面试问答(解决方案)

目录 问&#xff1a;uni-app 组件库的解决方案&#xff1f;&#xff08;xx 分钟&#xff09; 必答​ 加分​ 深入​ 再深入​ 参考链接​ 问&#xff1a;在 uni-app 中&#xff0c;如何进行全局状态管理&#xff1f;请介绍一下你对 Vuex 和 Pinia 的了解。​ 必答​ 加…...

qt第三天快速回顾

控件 listWidget 两种添加方式 1QListWidgetItem 2QStringList(链式编程) TreeWidget 核心代码 1设置头的标签 2.Item创建 添加顶层级别的Item 3.创建子Item 挂载到顶层的Item上 QLabelWidget 表格 增加了一个删除和添加 1.设…...

Android 编译过程介绍,Android.mk 和 Android.bp 分析, 在源码中编译 AndroidStudio 构建的 App

Android 编译过程介绍&#xff0c;Android.mk 和 Android.bp 分析&#xff0c; 在源码中编译 AndroidStudio 构建的 App_.mk编译目录所有.bp-CSDN博客...

【C++】几种常用的类型转换

类型转换 c语言中的类型转换C的类型转换static_castreinterpret_castconst_castdynamic_cast c语言中的类型转换 在C语言中我们经常会遇到类型转化的问题&#xff0c;主要分为两种&#xff1a;显式类型转换和隐式类型转换。 显式类型转换&#xff1a;就是程序员使用强制类型转…...

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1&#xff1a;R1-R2之间认证不匹配错误2&#xff1a;hello包的时间配置不匹配错误3&#xff1a;R2的e0/1接口区域配置不正确错误4&#xff1a;R4的e0/1接口没有配置进OSPF错误5&#xff1a;R2的区域1没有配置成特殊区域错误6&#x…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...