Jmeter函数二次开发说明

jmeter 二次开发使用

jmeter二次开发实现方法

使用maven依賴进行开发

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

    java 复制代码
    <!-- 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实现里面的四个抽象方法,代码如下。

    java 复制代码
    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 异常
         */
        @Override
        public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
    
            return RSAUtil.encryptByPublicKey(data);
        }
    
        /**
         * 设置函数的参数
         * @param collection 参数
         * @throws InvalidVariableException 异常
         */
        @Override
        public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
            // 检测传入的参数是否就是一个
            checkParameterCount(collection, 1);
            // 获取出入的参数值
            Object[] object = collection.toArray();
            data = ((CompoundVariable)object[0]).execute();
        }
    	
        /**
         * 设置函数名
         * @return 函数名
         */
        @Override
        public String getReferenceKey() {
            return FUNCTION_NAME;
        }
    
        /**
         * 设置参数说明
         * @return 参数说明
         */
        @Override
        public 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流就可以直接读文件中的类容了。代码如下:

    java 复制代码
    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;
    	// 获取对应文件的Read
        public 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);
        }
    
    }
相关推荐
零千叶13 分钟前
【面试】AI大模型应用原理面试题
java·设计模式·面试
坐吃山猪5 小时前
SpringBoot01-配置文件
java·开发语言
我叫汪枫5 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
yaoxtao5 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
Swift社区7 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT8 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy8 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss9 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续9 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升