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);
        }
    
    }
相关推荐
跟着珅聪学java18 分钟前
spring boot +Elment UI 上传文件教程
java·spring boot·后端·ui·elementui·vue
我命由我1234523 分钟前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
lilye6624 分钟前
程序化广告行业(55/89):DMP与DSP对接及数据统计原理剖析
java·服务器·前端
战族狼魂4 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
xyliiiiiL5 小时前
ZGC初步了解
java·jvm·算法
杉之5 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch6 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
天天向上杰7 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal
请来次降维打击!!!7 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
用键盘当武器的秋刀鱼7 小时前
springBoot统一响应类型3.5.1版本
java·spring boot·后端