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

Jmeter函数二次开发说明

jmeter 二次开发使用

jmeter二次开发实现方法

使用maven依賴进行开发

  1. 导入jmeter的maven依赖,需要和你使用的jmeter版本一致。

    • <!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core -->
      <dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_core</artifactId><version>5.6.3</version>
      </dependency>
      
  2. 现在就可以直接二次开发了。

  3. 然后将你开发好的代码直接放入jmeter中就可以直接运行了。

使用jmeter的jar包进行开发

  1. jmeter自带jar包位于:jmeter安装目录/lib/ext目录中。
  2. 将jar包导入自己的项目就可以进行二次开发了。
  3. 然后将你开发好的代码直接放入jmeter中就可以直接运行了。

jmeter 二次开发使用方法

函数开发

  1. 需要创建一个类继承AbstractFunction实现里面的四个抽象方法,代码如下。

    • package com.leisure.function;
      import com.leisure.utils.RSAUtil;
      import org.apache.jmeter.engine.util.CompoundVariable;
      import org.apache.jmeter.functions.AbstractFunction;
      import org.apache.jmeter.functions.InvalidVariableException;
      import org.apache.jmeter.samplers.SampleResult;
      import org.apache.jmeter.samplers.Sampler;import java.util.ArrayList;
      import java.util.Collection;
      import java.util.List;public class RSAFunction extends AbstractFunction {// 函数传入的参数,可以在setParameters 方法中设置这个值,如果有多个参数就设置多个变量。测试的时候可以用无参构造方法private String data = "";// 算法名必须要使用'__'双下划线开头,且不能使用中文命名private static final String FUNCTION_NAME = "__RSAPublicEncryptFunction";/*** 执行函数体* @param sampleResult 代表了一个采样结果,即对一个特定请求的执行结果的所有信息记录。它包含了关于请求执行的各种详细信息* @param sampler 是JMeter中的一个基本元素,它是向服务器发送请求并记录响应的核心组件。每个sampler代表了一次具体的请求操作,比如HTTP请求、TCP请求、JDBC请求等。* @return 函数处理结果* @throws InvalidVariableException 异常*/@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {return RSAUtil.encryptByPublicKey(data);}/*** 设置函数的参数* @param collection 参数* @throws InvalidVariableException 异常*/@Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {// 检测传入的参数是否就是一个checkParameterCount(collection, 1);// 获取出入的参数值Object[] object = collection.toArray();data = ((CompoundVariable)object[0]).execute();}/*** 设置函数名* @return 函数名*/@Overridepublic String getReferenceKey() {return FUNCTION_NAME;}/*** 设置参数说明* @return 参数说明*/@Overridepublic List<String> getArgumentDesc() {List<String> list = new ArrayList<>();list.add("需要加密的内容(必填): ");return list;}}
      
  2. 使用maven直接构建成一个jar包,获取这个jar包,将这个jar包放到jmeter的:D:\Program Files\apache-jmeter-5.6.3\lib\ext 目录下,重启jmter,然后在函数里面找自己定义的函数名就可以使用了。

  3. 注意:如果使用了第三方jar包就直接将第三方jar包放到:D:\Program Files\apache-jmeter-5.6.3\lib\ext 目录下就可以了。

  4. 注意:如果使用了特定文件直接使用我类构造器获取对应文件的InputStream流就可以直接读文件中的类容了。代码如下:

    • package com.leisure.config;import org.w3c.tidy.Out;import java.io.*;
      import java.net.URL;
      import java.net.URLDecoder;
      import java.nio.charset.StandardCharsets;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.Objects;public class FilePathConfig {public static Map<String, Reader> paths;// 获取对应文件的Readpublic static Reader getFileReader(String  filename){paths = new HashMap<>();// 类加载器ClassLoader classLoader = FilePathConfig.class.getClassLoader();// 添加获取对应文件的Read  ,rsa/publicKeyStr.pem  这个文件的resource path ,在 idae中直接右键文件选择这个路径进行复制就行InputStream publicKeyStr = classLoader.getResourceAsStream("rsa/publicKeyStr.pem");assert publicKeyStr != null;Reader reader_publicKeyStr = new InputStreamReader(publicKeyStr, StandardCharsets.UTF_8);//将文件的Read存放得到Map中方便以后获取paths.put("publicKeyStr", reader_publicKeyStr);return paths.get(filename);}public static void main(String[] args) {Reader publicKeyStr = getFileReader("publicKeyStr");System.out.println(publicKeyStr);}}
      

相关文章:

  • Springboot结合redis实现关注推送
  • 【Linux】进程程序替换
  • MSP430单片机控制流水灯,Proteus仿真
  • adb shell进入设备后的命令
  • [ZJCTF 2019]NiZhuanSiWei、[HUBUCTF 2022 新生赛]checkin、[SWPUCTF 2021 新生赛]pop
  • 【学习笔记】finalshell上传文件夹、上传文件失败或速度为0
  • 手机连接ESP8266的WIFI,进入内置网页,输入要显示的内容,在OLED显示屏上显示文本
  • 【C++题解】1457 - 子数整除
  • 内存卡执行格式化数据还能恢复吗?
  • qt自适应图片
  • [Vue3:axios]:实现登录跳转页面展示列表(查看教师所承担课程的学生选课情况)
  • 基于springboot实现交通管理在线服务系统项目【项目源码+论文说明】计算机毕业设计
  • [一] 解释自己思维判断与行为 - 《情报分析心理学》读后感
  • Java中如何调用mysql中函数
  • LVGL移植和图片显示
  • #Java异常处理
  • [译]Python中的类属性与实例属性的区别
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2017届校招提前批面试回顾
  • Android交互
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • C++类中的特殊成员函数
  • Consul Config 使用Git做版本控制的实现
  • EventListener原理
  • HomeBrew常规使用教程
  • JavaScript-Array类型
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Markdown 语法简单说明
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • opencv python Meanshift 和 Camshift
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 闭包--闭包之tab栏切换(四)
  • 从零开始的无人驾驶 1
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 理清楚Vue的结构
  • 两列自适应布局方案整理
  • 聊聊hikari连接池的leakDetectionThreshold
  • 爬虫模拟登陆 SegmentFault
  • 前端_面试
  • 设计模式(12)迭代器模式(讲解+应用)
  • 数据结构java版之冒泡排序及优化
  • 线性表及其算法(java实现)
  • 正则学习笔记
  • - 转 Ext2.0 form使用实例
  • 回归生活:清理微信公众号
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 容器镜像
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​马来语翻译中文去哪比较好?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #565. 查找之大编号
  • #mysql 8.0 踩坑日记
  • #QT项目实战(天气预报)