java扩展jmeter依赖

前置条件

创建一个maven项目, 引入依赖

复制代码
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_core</artifactId>
    <version>3.2</version>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_java</artifactId>
    <version>3.2</version>
</dependency>

// 用于函数助手开发
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_functions</artifactId>
    <version>3.2</version>
</dependency>

若引入依赖失败,找到仓库内的文件,删除,reimport一下依赖即可

默认路径 /Users/lvxueqing/.m2/repository/org/apache/jmeter

一、Java请求开发

方式1 继承AbstractJavaSamplerClient类

复制代码
public class First extends AbstractJavaSamplerClient {
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        System.out.println(" 我的demo!!!!");
        return null;
    }
}

使用方式:

1)到idea终端 打包 mvn clean package

2)将打包后生成的文件,放到jmeter的/apache-jmeter-5.2.1/lib/ext路径下

3)重启jemter

4)添加线程组,添加java请求,可看到刚刚写好的类

5)点击运行 日志打印了

方式2 实现JavaSamplerClient接口

复制代码
public class Second implements JavaSamplerClient {
    private static final String URLNAME="URL"; //jmeter属性中显示的变量名称
    private static final String DEFAULTURL="http://www.baidu.com"; //jmeter属性中显示的变量值
    private String resultData; // 存储响应数据,将结果放到查看结果树里

    /**
     * 决定了jmeter中要展示哪些属性, 第一个运行
     */
    public Arguments getDefaultParameters() {
        System.out.println("getDefaultParameters  run!! ");
        Arguments arguments = new  Arguments();
        arguments.addArgument(URLNAME,DEFAULTURL);
        return arguments;
    }

    //接收用户输入的URL
    private String inputUrl ;
    /**
     * 初始化的方法
     */
    public void setupTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("setupTest  run!! ");

        inputUrl = javaSamplerContext.getParameter(URLNAME,DEFAULTURL);
        System.out.println("用户输入的url地址是  " + inputUrl);

    }

    /**
     * 具体功能逻辑的方法
     */
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("runTest  run!! ");
        SampleResult sampleResult = new SampleResult();
        StringBuilder sb = new StringBuilder();

        try {
            URL url = new URL(inputUrl);
            URLConnection conn = url.openConnection();
            byte[] buffer = new byte[1024];
            int len;
            sampleResult.sampleStart(); // 标记事务开始
            InputStream in = conn.getInputStream();
            while ((len=in.read(buffer)) != -1){
                resultData = new String(buffer,"UTF-8");
                sb.append(resultData);

            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
//        resultData = "这就是响应结果";
        resultData = sb.toString();
        sampleResult.setSuccessful(true); // 告诉查看结果树 请求是否成功
        sampleResult.setSampleLabel("自定义java访问请求");
        sampleResult.setResponseData(resultData,"UTF-8");
        sampleResult.setDataType(SampleResult.TEXT);
        
        return sampleResult;
    }

    /**
     * 做一些收尾工作的方法
     */
    public void teardownTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("teardownTest  run!! ");

    }


}

结果展示

二、函数助手开发

注意: 函数相关类要放到functions目录下

复制代码
public class Plus extends AbstractFunction {
    private Object[] values;
    private CompoundVariable first,second; // 存储第一个和第二个参数

    /**
     * 执行方法
     */
    public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
        System.out.println(" execute  run ");

        first = (CompoundVariable) values[0];
        System.out.println("第一个参数是 " + first);
        second = (CompoundVariable) values[1];
        System.out.println("第二个参数是 " + second);
        int count = new Integer(first.execute().trim()) + new Integer(second.execute().trim()) ;
        System.out.println("和 " + count);

        return String.valueOf(count);
    }

    /**
     * 设置参数, 接收用户传递的参数
     */
    public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
        System.out.println(" setParameters  run ");
        checkParameterCount(collection,2);
        values = collection.toArray();
    }

    /**
     * 功能名称
     */
    public String getReferenceKey() {
        System.out.println(" getReferenceKey  run ");
        return "__MyDemoPlus";
    }

    /**
     * 功能描述 参数描述
     */
    public List<String> getArgumentDesc() {
        System.out.println(" getArgumentDesc  run ");
        List desc = new ArrayList();
        desc.add("第一个数");
        desc.add("第二个数");
        return desc;
    }
}

使用方式:

1)到idea终端 打包 mvn clean package

  1. 将打包后生成的jar文件,放到jmeter的/apache-jmeter-5.2.1/lib/ext路径下

3)重启jemter

结果展示

结果可展示在日志中

相关推荐
考虑考虑5 小时前
JDK25模块导入声明
java·后端·java ee
_小马快跑_7 小时前
Java 的 8 大基本数据类型:为何是不可或缺的设计?
java
Re_zero9 小时前
线上日志被清空?这段仅10行的 IO 代码里竟然藏着3个毒瘤
java·后端
洋洋技术笔记9 小时前
Spring Boot条件注解详解
java·spring boot
程序员清风1 天前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林5511 天前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊1 天前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing1 天前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠2 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840822 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot