JMeter自定义函数

news2024/9/24 21:27:12

JMeter二次开发需求一般集中在2个方向:

  • 针对请求类,即需要和服务器进行通信的,我们一般是做java请求的二次开发

  • 针对数据处理类型,是不需要和服务器进行通信,是在客户端完成的,一般是做JMeter的自定义函数

除了用自定义函数,还可以通过beanshell去进行处理。但是一般不建议,因为beanshell脚本语言属于解释型语言,即每一次运行都需要临时编译一次,即编译一次运行一次,整体性能较差。 并且在JMeter中,beanshell的调试是非常糟糕的,提示信息较少;Beanshell的解析执行顺序,会导致无法读取其他函数的值。

怎么做自定义函数

JMeter提供了一个abstractFunction的类用于用户去继承、实现自定义函数。

准备工作

准备自定义函数开发过程所需要的依赖jar包。通常分为两种:

  • JMeter框架lib\ext目录下的ApacheJMeter_core.jar和ApacheJMeter_functions.jar

  • 业务相关,指数据处理本身的逻辑和JMeter是没有任何关系的情况。

  • 业务本身的jar包

  • 业务依赖的jar包

实操

  1. 创建一个Java project后,选中工程右键Build Path ->Configure Build Path...->Libraries

  1. 通过Add External JARs添加ApacheJMeter_core.jar

  1. 创建一个Java Package,命名为XX.XX.functions

  1. 在Package中创建一个继承AbstractFunction的Java Class

  1. 需要复写4个方法

  1. getArgumentDesc() //用来定义函数的参数列表,是给用户看的

  1. execute() //函数的主题部分,即函数的结果由该方法返回

  1. getReferenceKey() //用来定义函数的名称

在JMeter中,约定俗成要求函数的名称必须是以"__"开头,因此通常该方法返回以下定义的字符串:
private final static String key = "__hello";
  1. setParameters() //用来接收和处理用户调用函数时所传入的参数值

  1. 导出jar包。 选中类文件,右键Export导出为Java JAR file

  1. 将jar包复制到lib\ext目录后,重新启动JMeter

传值

private final static String key = "__hello";

private static List<String> params = new LinkedList<String>();
static
{
    params.add("请输入用户名");
    params.add("请输入性别:男or女");
}

public String username = "";
public String sex = "";

@Override
public List<String> getArgumentDesc(){
    return params;
}

@Override
public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariable...{
    String result = "";
    if(sex.equals("男")){
        result = username + ",先生你好。";
    }
    else if(sex.equals("女")){
        result = username + ",女士你好。";
    }
    else{
        result = "无名氏你好,请问你是男是女?";
    }    
    return result;
}

@Override
public String getReferenceKey(){
    return key;
}

@Override
public void setParameters(Collection<CompoundVariable> arg0) throws Inval...{
    checkParameterCount(arg0, 2);
    Object[] data = arg0.toArray();
    username = ((CompoundVariable)data[0]).execute();
    set = ((CompoundVariable)data[1]).execute();
}

业务包

自定义function依赖的业务包放在JMeter的lib目录下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【谷粒商城基础篇】商品服务开发:属性分组、平台属性

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

若依RuoYi整合短信验证码登录

背景&#xff1a;若依默认使用账号密码进行登录&#xff0c;但是咱们客户需要增加一个短信登录功能&#xff0c;即在不更改原有账号密码登录的基础上&#xff0c;整合短信验证码登录。 一、自定义短信登录 token 验证 仿照 UsernamePasswordAuthenticationToken 类&#xff0c…

使没有sudo权限的普通用户可以使用容器

一、基本思路将普通用户加入docker组二、ubuntu组管理命令1、配置文件&#xff08;1&#xff09;文件&#xff1a;/etc/group&#xff08;2&#xff09;权限&#xff1a;①超级用户可读可写②普通用户只读2、查看组&#xff08;1&#xff09;命令cat /etc/group&#xff08;2&a…

【从零开始学习深度学习】34. Pytorch-RNN项目实战:RNN创作歌词案例--使用周杰伦专辑歌词训练模型并创作歌曲【含数据集与源码】

目录RNN项目实战使用周杰伦专辑歌词训练模型并创作歌曲1.语言模型数据集预处理1.1 读取数据集1.2 建立字符索引1.3 时序数据的2种采样方式1.3.1 随机采样1.3.2 相邻采样小结2. 从零实现循环神经网络并进行训练预测2.1 one-hot向量表示2.2 初始化模型参数2.3 定义模型2.4 定义预…

2023 年更新计划

前言 2023 年&#xff0c;会继续更新这个 CSDN 博客了&#xff1b; 看了一下博客数据&#xff0c;有些惨不忍睹&#xff0c;不过之前的内容质量并不高&#xff0c;从头来过吧&#xff1b; 当初个人娱乐写的 STM32 学习笔记&#xff0c;莫名受欢迎&#xff0c;不出意外的话&am…

Spring之Bean实例化的基本流程

目录 一&#xff1a;概述 二&#xff1a;代码展示 一&#xff1a;概述 Spring容器在进行初始化时&#xff0c; 会将xml配置的<bean>的信息封装成一个BeanDefinition对象&#xff0c; 所有的 BeanDefinition存储到一个名为be…

勇闯掘金小游戏为一款多个小游戏的合集游戏,有五个关卡:找掘金、石头剪刀布、寻找藏宝图、打地鼠、抽奖。基于Vue

游戏简介 勇闯掘金小游戏为一款多个小游戏的合集游戏&#xff0c;共有五个关卡&#xff0c;分别为&#xff1a;找掘金、石头剪刀布、寻找藏宝图、打地鼠、抽奖。每个环节20分&#xff0c;满分100分。 完整代码下载地址&#xff1a;勇闯掘金小游戏 快速体验 https://ihope_to…

Acwing---730.机器人问题

机器人问题1.题目2.基本思想3.代码实现1.题目 机器人正在玩一个古老的基于 DOS 的游戏。 游戏中有 N1 座建筑——从 0 到 N 编号&#xff0c;从左到右排列。 编号为 0 的建筑高度为 0 个单位&#xff0c;编号为 i 的建筑高度为 H(i) 个单位。 起初&#xff0c;机器人在编号…

Mycat2(四)mycat2 分库分表

文章目录一、分库分表原理垂直切分&#xff1a;分库水平切分&#xff1a;分表二、分库分表环境准备示例&#xff1a;开始准备环境三、实现分库分表3.1 分库分表--广播表&#xff08;BROADCAST&#xff09;3.2 分库分表--分片表&#xff08;dbpartition、tbpartition&#xff09…

电脑录屏怎么录ppt?三个ppt录制视频的方法

PPT演示文稿是人们在日常生活和学习中常用的工具&#xff0c;它也被广泛地运用于各个方面。最近有不少朋友问小编ppt录制视频的方法&#xff0c;其实ppt录制视频的方法有很多。如果只需要录制PPT内容&#xff0c;可以用PPT自带的“屏幕录制”来录制视频就可以了&#xff0c;如果…

Day848.Copy-on-Write模式 -Java 性能调优实战

Copy-on-Write模式 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Copy-on-Write模式的内容。 Java 里 String 这个类在实现 replace() 方法的时候&#xff0c;并没有更改原字符串里面 value[]数组的内容&#xff0c;而是创建了一个新字符串&#xff0c;这种方法在…

C++GUI之wxWidgets(10)-编写应用涉及的类和方法(5)-事件处理(4)

目录自定义事件AddPendingEvent()QueueEvent()PushEventHandler()ProcessEvent()wxCommandEvent与新的事件类型一起使用自定义事件 AddPendingEvent() virtual void wxEvtHandler::AddPendingEvent ( const wxEvent & event ) 发布要稍后处理的事件。 此函数类似于Qu…

逆向-还原代码之eth (Interl 64)

// 源程序 #include <stdio.h> #define HIETH_SYSREG_BASE (0x101e0000) #define REG_RESET 0x01C // 外设控制寄存器(IP软复位控制) #define RESET_SHIFT 12 static void hieth_set_regbit(unsigned long addr, int bit, int shift) { unsigned long …

nginx学习笔记1(小d课堂)

我们进入到官网可以看到有很多个版本的nginx。 我们点击documentation&#xff0c;可以看到官方文档&#xff0c;但是这里的文档暂时还没有中文的&#xff1a; 我们这里后期会在linux上进行安装部署nginx。 而我们的nginx就是我们的反向代理服务器。 我们可以这样来配置。 我们…

栈和队列(内附模拟实现代码)

一&#xff0c;栈1.1 栈的概念栈是一种线性表&#xff08;是一种特殊的线性表&#xff09;&#xff0c;栈只允许在固定一端进行插入和删除元素。插入元素的一端称为栈顶&#xff0c;另一端称为栈底。所以栈中的数据元素满足先进后出&#xff08;First In Last Out&#xff09;的…

【数据篇】31 # 如何对海量数据进行优化性能?

说明 【跟月影学可视化】学习笔记。 渲染动态的地理位置 用随机的小圆点模拟地图的小圆点&#xff0c;实现呼吸灯效果 最简单的做法&#xff1a;先创建圆的几何顶点数据&#xff0c;然后对每个圆设置不同的参数来分别一个一个圆绘制上去。 <!DOCTYPE html> <html …

如何使用python删除一个文件?别说,还挺好用....

嗨害大家好鸭&#xff01;我是小熊猫~ 若想利用python删除windows里的文件&#xff0c;这里需要使用os模块&#xff01;那接下来就看看利用os模块是如何删除文件的&#xff01; 具体实现方法如下&#xff01; 更多学习资料:点击此处跳转文末名片获取 os.remove(path) 删除文…

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

Java 定义的位运算&#xff08;bitwise operators&#xff09;直接对整数类型的位进行操作&#xff0c;这些整数类型包括 long&#xff0c;int&#xff0c;short&#xff0c;char 和 byte。位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位&#xff08…

GitLab安装使用(SSH+Docker两种方式)

GitLab安装使用1、在ssh下安装gitlab1.1 安装依赖1.2 配置镜像1.3 开始安装1.4 gitlab常用命令2、在docker下安装gitlab2.1 安装docker2.1.1 更新yum源2.1.2 安装依赖2.1.3 添加镜像2.1.4 查看源中可用版本2.1.5 安装指定版本2.1.6 配置开机启动项2.2 使用容器安装gitlab2.2.1 …

车载以太网 - DoIP头部信息检测逻辑 - 03

通过前面的文章我们已经了解了DoIP所具备的Payload类型,基础的信息都已经具备了,今天我们就要进一步的去了解DoIP的处理逻辑了;按照正常的逻辑来看,处理无论是我们人眼去看书,还是计算机处理一段数据,都是从前到后依次进行处理;而DoIP的信息处理也不例外,也是从头开始进…