一、前置条件(对jmeter进行二次开发)

本篇通过抽象类AbstractFunction来实现:

1、JMeter提供了接口给用户进行二次开发,其中接口可通过引入

ApacheJMeter_components.jar、

ApacheJMeter_core.jar两个包获取。(或许你看到别人介绍所要用的jar包会更多,其实正常开发就这两个,所以至少保证有这两个包即可)

2、开发的代码需要符合JMeter的规范:

第一,新建的包名称必须是以 functions 结尾,包名如test.functions;

第二,方法类需要继承AbstractFunction类,而AbstractFunction类中有四个要实现的函数,其中我们要实现的功能需要结合这四个函数实现。

3、编辑Java程序

  • ApacheJMeter_components.jar

  • ApacheJMeter_core.jar

以上两个jar包在JMeter安装目录下的\lib\ext 文件夹(安装jmeter后会存在这两个包)

在工程里新建一个lib目录,把jar包复制到lib目录下

然后添加到项目工程里(添加依赖包)

创建包以functions结尾

创建类继承AbstractFunction类

直接继承会报异常,导入方法即可

函数介绍:

demo:

package test.functions;
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.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;

public class JavaRequestTest extends AbstractFunction {
//程序需要用到的参数需要提前定义
public String card_code="";
public String card_birthday="";
public String card_sex="";

//要调用的函数名称
@Override
public String getReferenceKey() {
//函数名称,及引用时调用的函数名
//比较简单,就是定义函数的名称,主要注意的是需要是两个下划线开头,这是JMeter规范要求的
String KEY="__AAATest";
return KEy;
}

@Override
public List<String> getArgumentDesc() {
//自定义函数参数列表
List<String> parms=new LinkedList<String>();
parms.add("请输入地区:");
parms.add("请输入生日:");
parms.add("请输入性别:");

return parms;
}
@Override
public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
//用来接收,处理用户调用函数时所输入的函数参数值
//Collection为getArgumentDesc函数接收到用户输入的值
//检查用户输入的参数是否为3个
checkParameterCount(collection,3);
//把Collection<CompoundVariable>转换成数组,固定写法
Object[] parmsData = collection.toArray();

//把data对象取值做CompoundVariable类型的强制转换,再用excute把值转为String类型
card_code=((CompoundVariable)parmsData[0]).execute();
card_birthday=((CompoundVariable)parmsData[1]).execute();
card_sex=((CompoundVariable)parmsData[2]).execute();

}
@Override
public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
//函数主体,函数逻辑处理,最终返回结果
String value=card_code+card_birthday+card_sex;

return value;
}
}

代码编辑完成后,生成jar包:
怎么在IDEA中把代码导出成jar包

三步走:

  • 配置Artifacts
  • 编译Artifacts,生成jar包
  • 把jar包放到JMeter

上一步只是设置了生成jar包的环境,接下来还需要编译代码,生成jar包

生成的jar默认放在工程目录的out/artifacts下,可直接复制~

另:若更新了代码,也只需直接“编译Artifacts”就行了,但若更新jar包,则需要重新配置环境!!

把jar复制到JMeter

一般放在lib目录就好,记得重启喔

这里示例的是java请求,放在/lib/ext下重启。查看函数助手

jmeter使用Java开发自定义函数的更多相关文章

  1. Jmeter二次开发——自定义函数

    在之前的博文中,Jmeter二次开发--基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发.聊到Jmeter的函数,知道Jme ...

  2. java mysql自定义函数UDF之调用c函数

    正如sqlite可以定义自定义函数,它是通过API定义c函数的,不像其他,如这里的mysql.sqlite提供原生接口就可以方便的调用其他语言的方法,同样的mysql也支持调用其它语言的方法. goo ...

  3. java开发----自定义对象,重写equals方法

    javaweb开发中,用到了好多自定义对象,这时候如果不重写equals方法,很多时候都会返回false, 因此我们必须习惯重写这个方法. 重点: 1.equals比较俩对象时比较的是对象引用是否指向 ...

  4. excel自定义函数添加和使用方法

    第一,excel自定义函数简介 Excel自带很多函数供使用,但有些问题用内置函数解决起来很复杂,甚至是无能为力,这时就可以利用VBA开发自定义函数. 第二,excel如何添加自定义函数 excel自 ...

  5. Jmeter扩展组件开发(7) - 自定义java请求的开发

    CODE package com.demo;import org.apache.jmeter.config.Arguments;import org.apache.jmeter.protocol.ja ...

  6. 3 hql语法及自定义函数(含array、map讲解) + hive的java api

    本博文的主要内容如下: .hive的详细官方手册    .hive支持的数据类型   .Hive Shell .Hive工程所需依赖的jar包  .hive自定义函数 .分桶4   .附PPT hiv ...

  7. 自定义编写jmeter的Java测试代码

    我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...

  8. [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. 扩展JMeter - 创建自定义函数 - String Joiner (翻译)

    JMeter是测试自动化社区中最好的开源工具之一.它提供了所有可能的扩展,可以快速提供我们的测试脚本.为了让我们的生活更轻松,它还让我们通过实现几个接口来提出我们自己的插件. 在本文中,让我们看看如何 ...

  10. hql语法及自定义函数(含array、map讲解) + hive的java api

    本博文的主要内容如下: .hive的详细官方手册    .hive支持的数据类型   .Hive Shell .Hive工程所需依赖的jar包  .hive自定义函数 .分桶4   .附PPT hiv ...

随机推荐

  1. ENCOURAGE研究: 病情中度活动RA获得深度缓解后有望实现停药

    标签: 类风湿关节炎; TNF拮抗剂; 维持期减停 病情中度活动的RA患者在获得深度缓解后有望实现停用生物制剂 电邮发布日期: 2016年2月3日 病情中度活动的类风湿关节炎(RA)患者通过传统DMA ...

  2. echart折线图异常多出一条连接线

    开发背景:vue3父传子,父中调子组件echarts图表 问题:第一次进入数据图表正常,再次进入不更新图表数据的情况下,图表异常多出来一条开始到结尾的连接线 原因:上次数据没清空 解决:请求完接口后先 ...

  3. Postgresql实现不同用跨模式访问

    1.修改参数 2.创建两个用户 创建a1 create user a1 connection limit-1 password '123456'; alter user a1 SUPERUSER; g ...

  4. JavaScript之异步编程

    什么是异步 异步:Asynchronous,async是与同步synchronous,sync相对的概念. 传统单线程编程中,程序的运行是同步的,指程序运行在一个控制流之中运行.而异步的概念就是不保证 ...

  5. day11_多态&抽象类&接口

    1.多态 1.1 多态的概述(记忆) 什么是多态     同一对象,在不同时刻表现出来的不同形态. 多态的前提 有继承/实现关系 有方法重写 有父类对象的引用执行子类对象 1.2 多态中的成员访问特点 ...

  6. 搭建CI环境和git使用

    部署Git+Gerrit+Jenkins 的CI环境 使用Git作为代码存储及版本控制 使用Jenkins进行自动化构建 构建测试通过后,再交给人工review 人工review通过后,自动同步到远程 ...

  7. EMQ X 系统调优和性能压测

    前言 如果使用 EMQ 来承载百万级别的用户连接可以吗?毕竟在 MQTT 官方介绍上说 EMQ X 可以处理千万并发客户端,而 EMQ X 自己官方称 4.x 版本 MQTT 连接压力测试一台 8 核 ...

  8. 银河麒麟V10安装MySQL5.7

      环境: Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.isomysql-5.7.28-linux-glibc2.12-x86_64.tar ...

  9. loj2511

    引言 思维题. 这个做法跑得飞快,还不用 dp,也不是爆搜! 复杂度(可能)为 \(O(s^2t)\) 或 \(O(s^2)\),实际效率也是飞快. 不过这题我直接提交答案了. 思路 考虑 \(A=m ...

  10. QQ空间数据抓取

    title: QQ空间数据抓取 author: 杨晓东 permalink: QQ空间数据抓取 date: 2021-10-02 11:27:04 categories: - 嗯哼 tags: - 无 ...