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

结果展示

结果可展示在日志中

相关推荐
蜗牛^^O^30 分钟前
Docker和K8S
java·docker·kubernetes
从心归零1 小时前
sshj使用代理连接服务器
java·服务器·sshj
IT毕设梦工厂2 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Ylucius3 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
七夜zippoe3 小时前
分布式系统实战经验
java·分布式
是梦终空3 小时前
JAVA毕业设计176—基于Java+Springboot+vue3的交通旅游订票管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·源代码·交通订票
落落落sss3 小时前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
码爸3 小时前
flink doris批量sink
java·前端·flink
Monodye4 小时前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光4 小时前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符