如何使用Java编写Jmeter函数

Jmeter 自带有各种功能丰富的函数,可以帮助我们进行测试,但有时候提供的这些函数并不能满足我们的要求,这时候就需要我们自己来编写一个自定义的函数了。例如我们在测试时,有时候需要填入当前的时间,虽然我们可以使用props.get("START.YMD")来获取当前日期,但使用起来很不方便。所以今天就来写一个获取当前时间的函数,并且可以自定义时间的显示格式。

一、创建Package及类

  1. 在IDEA中创建一个Java项目(此步略),再创建一个包。包名必须是含有function​,如:package com.hetc.functions;​在function包下创建一个Java类

  1. 类创建后要继承AbstractFunction​抽象类,继承后需要实现的方法为execute()、setParameters()、getReferenceKey()、getArgumentDesc()​

二、方法详解

execute()方法

函数的执行主方法,可以实现主要的处理逻辑,该方法的返回结果会显示在函数助手的The result of the function is栏

方法内容:

    @Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {// 获取函数的参数,并进行格式转换String s = String.valueOf(((CompoundVariable) this.arrayValue[0]).execute());DateTimeFormatter formatter = DateTimeFormatter.ofPattern(s);return formatter.format(LocalDateTime.now());}

setParameters()方法

该方法用来接收和处理用户输入的函数参数,即获取在Jmeter函数助手中,函数参数的值中输入的内容

方法中如果没有其他处理逻辑的话,直接使用默认写法即可:

    @Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {// 判断参数的个数是否为 1checkParameterCount(collection, 1);// 将入参转为数组this.arrayValue = collection.toArray();}

getReferenceKey()方法

定义函数的名称,即函数助手下拉列表中显示的内容,以及调用函数时的函数名

可以直接return一个名称,我这里是通过在类的开始定义一个常量,在return这个常量

    private static final String KEY = "__TimeMaker";@Overridepublic String getReferenceKey() {return KEY;}

getArgumentDesc()方法

用来定义函数入参的描述内容,返回值是一个List<String>格式,函数有几个参数,就往List中add几个参数的描述。

    private static final List<String> desc = new ArrayList<>();static {desc.add("请输入要展示的时间格式,如“yyyy-MM-dd HH:mm”");}@Overridepublic List<String> getArgumentDesc() {return desc;}

具体的定义方法随意,无需拘泥于我上面的例子。

完整内容

package com.hetc.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.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;/*** @ClassName: TimeFunction* @Author: Jaxx* @Date: 2024/12/5* @Description: Jmeter自定义时间函数**/
public class TimeFunction extends AbstractFunction {private static final String KEY = "__TimeMaker";private static final List<String> desc = new ArrayList<>();private Object[] arrayValue;static {desc.add("请输入要展示的时间格式,如“yyyy-MM-dd HH:mm”");}@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {String s = String.valueOf(((CompoundVariable) this.arrayValue[0]).execute());DateTimeFormatter formatter = DateTimeFormatter.ofPattern(s);return formatter.format(LocalDateTime.now());}@Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {checkParameterCount(collection, 1);this.arrayValue = collection.toArray();}@Overridepublic String getReferenceKey() {return KEY;}@Overridepublic List<String> getArgumentDesc() {return desc;}
}

三、打包

在代码编写完成后,还需要将其打成Jar包,方法如下:

  1. 进入idea -> File -> Project Structure​
  2. 如下图,依次点击​
  3. 在弹出窗中依次进行输入
  4. 点击确定后,回到Project Structure窗口,默认会带出所有的依赖包,为了减小打出的Jar包的体积,可以将不需要的依赖手动删除,只保留必须的即可。点击确定进行保存
  5. 点击Build -> Build Artifacts
  6. 选中上一步中的Artifacts,点击Build,在out目录中会生成打好的Jar包

四、测试验证

将打好的Jar包放入jmeter_path/lib/ext目录,重启Jmeter后进入函数助手,选中新增的函数TimeMaker,输入参数值后点击生成,成功!

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

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

相关文章

无人设备遥控器之动态调频功能篇

一、动态调频功能概述 动态调频功能是指无人机遥控器能够根据当前环境或用户需求&#xff0c;自动调整无线电信号的频率&#xff0c;以优化通信质量和控制性能。这一功能对于确保无人机在复杂环境中的稳定飞行和精确控制至关重要。 二、动态调频的工作原理 频率选择与调整&am…

Android -- [SelfView] 自定义多行歌词滚动显示器

Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明&#xff1b;* 2. 外部可控制进度变化&#xff1b;* 3. 支持屏幕拖动调节进度&#xff08;回调给外部&#xff09;&#xff1b;效果 歌词文件&#xff08;.lrc&#xff09; 一. 使用…

【知识点】图与图论入门

何为图论 见名知意&#xff0c;图论 (Graph Theory) 就是研究 图 (Graph) 的数学理论和方法。图是一种抽象的数据结构&#xff0c;由 节点 (Node) 和 连接这些节点的 边 (Edge) 组成。图论在计算机科学、网络分析、物流、社会网络分析等领域有广泛的应用。 如下&#xff0c;这…

前海紫荆花广场附近路面的临时停车点

前海紫荆花广场附近路面的临时停车点大概20个的样子 具体在紫荆花广场的侧边&#xff0c;每天都有车停。建议临时应急停。因为虽然没有交警贴罚单&#xff0c;但是还是会被贴违停。 不少车贴如下禁停标志。其实附近桂湾公园就可以免费停车&#xff0c;可能是公园停满了&#xf…

【5G】5G Physical Layer物理层(一)

5G多址接入和物理层与长期演进&#xff08;LTE&#xff09;存在一些差异。在下行方向&#xff0c;5G与LTE相似&#xff0c;依旧采用正交频分多址&#xff08;OFDMA&#xff09;。而在上行方向&#xff0c;5G采用了OFDMA和单载波频分多址&#xff08;SC-FDMA&#xff09;&#x…

rk3576 , android14 , 编译, 卡死,android.bp , ninja

问题&#xff1a;我在 编译 &#xff41;&#xff4e;&#xff44;&#xff52;&#xff4f;&#xff49;&#xff44;&#xff11;&#xff14; 的时候&#xff0c; 卡死再 analysing android.bp 这里 &#xff0c;卡了 3&#xff0c;4 个小时。肯定是有问题的。 如图&…

element-plus的el-tree的双向绑定

el-tree改造了下 可选可取消 有默认值 不包含父级id 默认展开 点击节点也可触发选择 节点内容自定义 <template>{{ childKeys }}<!--default-checked-keys:默认展开值&#xff08;正常来说需要包含父级id的 但是我们后端不要后端id &#xff09;show-checkbox&#x…

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…

C++:类和对象(2)

1. 类的默认成员函数&#xff1a; 类的默认成员函数就是用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成6个默认成员函数&#xff08;构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&a…

爬虫运行后数据如何存储?

爬虫运行后获取的数据可以存储在多种不同的存储系统中&#xff0c;具体选择取决于数据的规模、查询需求以及应用场景。以下是一些常见的数据存储方法&#xff1a; 1. 文件系统 对于小型项目或临时数据存储&#xff0c;可以直接将数据保存到本地文件中。常见的文件格式包括&…

[生物信息]单细胞数据分析入门学习笔记1

推荐课程&#xff1a;Analysis of single cell RNA-seq data (singlecellcourse.org) 1 关于《Analysis of single cell RNA-seq data》课程 如今&#xff0c;通过高通量测序&#xff08;scRNA-seq&#xff09;可以从单细胞获取全基因组转录组数据。scRNA-seq 的主要优势在于…

ArcMap 分析栅格欧式分配、构建趋势面、插值模型精度等功能操作

ArcMap 分析栅格欧式分配、构建趋势面、插值模型精度等功能操作今天进行 一、栅格欧式分配 1、对点要素进行空间分配 配置环境变量 点击确定后展示 2、对线要素进行空间分配 环境变量依然选择 road 相同&#xff0c;点击确定后展示 3、对面要素进行空间分配 环境配置与 road …

推荐在线Sql运行

SQL Fiddle 1、网址&#xff1a;SQL Fiddle - Online SQL Compiler for learning & practiceDiscover our free online SQL editor enhanced with AI to chat, explain, and generate code. Support SQL Server, MySQL, MariaDB, PostgreSQL, and SQLite.http://www.sqlfi…

MySQL 8.0 新特性汇总

文章目录 前言1. 运维管理 1.1 可持久化变量1.2 管理员端口1.3 资源组1.4 数据库粒度只读1.5 show processlist 实现方式1.6 加速索引创建速度1.7 控制连接的内存使用量1.8 克隆插件1.9 mysqldump 新增参数1.10 慢日志增强1.11 快速加列1.12 InnoDB 隐藏主键1.13 Redo 配置1.14…

使用android studio写一个Android的远程通信软件(APP),有通讯的发送和接收消息界面

以下是使用 Android Studio 基于 Java 语言编写一个简单的 Android APP 实现远程通信&#xff08;这里以 TCP 通信为例&#xff09;的代码示例&#xff0c;包含基本的通信界面以及发送和接收消息功能。 1. 创建项目 打开 Android Studio&#xff0c;新建一个 Empty Activity …

记录blender学习过程中遇到的问题

物体发射的方向不对 被发射物体&#xff08;例如一棵树&#xff09;n键看旋转归0 切换正视图 将被发射物体的局部坐标的Z轴 指向 全局方向的X轴时 并且把粒子系统设置的物体旋转勾选上 方向就对了 做倒角发现有问题 检查缩放应用、面朝向、有没有重合点&#xff08;融合点&am…

【RBF SBN READ】hadoop社区基于RBF的SBN READ请求流转

读写分离功能的背景及架构 当前联邦生产集群的各个子集群只有Active NameNode在工作,当读写任务变得繁忙的时候,只有一个Active负责处理的话,此时集群的响应和处理能力业务侧感知会明显下降,为此,我们将引入Observer架构,实现读写功能的分离,使得Active只负责写请求,而…

01-Chromedriver下载与配置(mac)

下载地址&#xff1a; 这里我用的最后一个&#xff0c;根据自己chrome浏览器选择相应的版本号即可 ChromeDriver官网下载地址&#xff1a;https://sites.google.com/chromium.org/driver/downloads ChromeDriver官网最新版下载地址&#xff1a;https://googlechromelabs.git…

MySQL——buffer poll

为什么要有buffer poll&#xff1f; 如果没有buffer poll&#xff0c;每次读取数据的时候都是从磁盘上读的&#xff0c;这样效率是很差的的。 所以有了提高效率的方式&#xff0c;就加上了一个缓存——buffer poll 所以&#xff0c;当我们读取数据的时候就有以下的方式 当读…

重磅升级:OpenAI o1模型上手实测,从芯片架构分析到象棋残局判断的全能表现

引言 昨日&#xff0c;在圣诞节系列发布会的第一天&#xff0c;OpenAI终于给我们带来了令人振奋的更新&#xff0c;这些更新有望塑造AI互动的未来。备受期待的OpenAI o1正式版的推出&#xff0c;标志着ChatGPT体验的重大进化&#xff0c;宣告了AI驱动应用新时代的开始。o1现已可…