如何使用Java编写Jmeter函数

news2024/12/24 2:23:08

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栏

方法内容:

    @Override
    public 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函数助手中,函数参数的值中输入的内容

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

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

getReferenceKey()方法

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

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

    private static final String KEY = "__TimeMaker";

    @Override
    public 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”");
    }

    @Override
    public 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”");
    }

    @Override
    public 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());
    }

    @Override
    public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
        checkParameterCount(collection, 1);
        this.arrayValue = collection.toArray();
    }

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

    @Override
    public 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.coloradmin.cn/o/2255632.html

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

相关文章

练8:递归

欢迎大家订阅【蓝桥杯Python每日一练】 专栏&#xff0c;开启你的 Python数据结构与算法 学习之旅&#xff01; 1 递归 在 Python 中&#xff0c;递归&#xff08;Recursion&#xff09; 是一种函数调用自身的编程技术。 递归通常用来解决可以分解为类似子问题的问题&#xff…

Python金融大数据分析概述

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【海拥导航】&#x1f485; 想寻找共同学习交流&#xff0c;摸鱼划水的小伙伴&#xff0c;请点击【全栈技术交流群】 金融大数据分析在金融科技领域越来越重要&#xff0c;它涉及从海量数据中提取洞察&#xff0c;为金…

WSL2下如何部署CosyVoice并开启API服务

环境: WSL2 英伟达4070ti 12G Win10 Ubuntu22.04 问题描述: WSL下如何部署CosyVoice并开启API服务 解决方案: CosyVoice 下载不顺的时候,最好提前开科学 一、部署 1.拉取源码 git clone –recursive https://github.com/FunAudioLLM/CosyVoice.gitwsl下拉取 gi…

室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版)

目录&#xff1a; 0 引言 1 人形机器人对室内家政服务任务的结构化 1.1人形机器人在室内家政服务中的比较优势 1.1.1 人形机器人拟人性的7个维度 1.1.2 拟人性在室内家政服务工作中的比较优势 1.1.3 潜在的重要用户&#xff1a;宠物爱好者 1.2 居所室内环境的特征与结构…

基于 Apache Dolphinscheduler3.1.9中的Task 处理流程解析

实现一个调度任务&#xff0c;可能很简单。但是如何让工作流下的任务跑得更好、更快、更稳定、更具有扩展性&#xff0c;同时可视化&#xff0c;是值得我们去思考得问题。 Apache DolphinScheduler是一个分布式和可扩展的开源工作流协调平台&#xff0c;具有强大的DAG可视化界…

物联网接入网关的数据安全和高效传输详解

物联网接入网关&#xff0c;作为连接物联网终端设备与云端或本地服务器的关键环节&#xff0c;不仅负责数据的汇聚与转发&#xff0c;更需确保数据在传输过程中的安全无虞与高效流畅。 一、数据安全&#xff1a;构筑坚实防线 1. 加密技术的应用 天拓四方物联网接入网关内置了…

双指针算法(超详细版)

希望大家多多关注&#xff0c;有三必回 1.双指针 1.1快慢双指针 快慢双指针常用来解决循环问题&#xff0c;或是查找中间节点 1.1.1循环链表&#xff08;141. 环形链表 - 力扣&#xff08;LeetCode&#xff09;&#xff09; 解题思路&#xff1a; 1.定义快慢指针fast和slo…

Rain后台权限管理系统,快速开发

这段时间一直没有更新&#xff0c;因为在写一个脚手架&#xff0c;今天Rain项目终于完工&#xff0c;已经发布到github,免费使用 项目github链接 https://github.com/Rain-hechang/Rain 简介 前端采用Vue3.x、Element UI。 后端采用Spring Boot、Spring Security、Redis &…

欧歌Web电视 1.2|全新修改版,新增更多频道,更稳定

欧歌Web电视App是一款功能强大的电视直播软件&#xff0c;通过WebView二次开发&#xff0c;对内置线路进行了优化和增加&#xff0c;让用户可以看到更多的频道。首次打开如果不会自动全屏&#xff0c;可以进入设置调整画面尺寸。该版本新增了多个地方频道和娱乐内容频道&#x…

嵌入式系统与移动设备开发

文章目录 1 嵌入式系统概述1.1 嵌入式系统基本概念1.1.1 嵌入式系统定义1.1.2 嵌入式系统的发展1.1.3 嵌入式系统的特点 1.2 嵌入式系统分类1.2.1 单个微处理器1.2.2 嵌入式处理器可扩展的系统1.2.3 复杂的嵌入式系统1.2.4 在制造或过程控制中使用的计算机系统 1.3 嵌入式处理器…

使用 Elastic 和 Amazon Bedrock 制作混合地理空间 RAG 应用程序

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Srinivas Pendyala, Ayan Ray 借助 Elasticsearch 及其向量数据库&#xff0c;你可以构建可配置的搜索和可信的生成式 AI (GenAI) 体验&#xff0c;这些体验可快速从原型扩展到生产。主要功能包括&#xff1a; 内…

【opencv入门教程】15. 访问像素的十四种方式

文章选自&#xff1a; 一、像素访问 一张图片由许多个点组成&#xff0c;每个点就是一个像素&#xff0c;每个像素包含不同的值&#xff0c;对图像像素操作是图像处理过程中常使用的 二、访问像素 void Samples::AccessPixels1(Mat &image, int div 64) {int nl imag…

Ansys Maxwell使用技巧

1、回到原点 点击Fit All 2、长方体做差 选中两个长方体&#xff0c; 点击Subtracct&#xff0c;就可以得到一个镂空的绕组。 3、电感仿真步骤 3.1 画磁芯 3.2 画绕组 3.3 加激励 选择截面积-右键绕组-Edit-Surface-Section-YZ 选择一个截面添加电流激励 3.4选材料 绕组一…

掌握谈判技巧,达成双赢协议

在当今竞争激烈且合作频繁的社会环境中&#xff0c;谈判成为了我们解决分歧、谋求共同发展的重要手段。无论是商业合作、职场交流&#xff0c;还是国际事务协商&#xff0c;掌握谈判技巧以达成双赢协议都具有极其关键的意义。它不仅能够让各方在利益分配上找到平衡点&#xff0…

MacOS 命令行详解使用教程

本章讲述MacOs命令行详解的使用教程&#xff0c;感谢大家观看。 本人博客:如烟花般绚烂却又稍纵即逝的主页 MacOs命令行前言&#xff1a; 在 macOS 上,Terminal&#xff08;终端) 是一个功能强大的工具&#xff0c;它允许用户通过命令行直接与系统交互。本教程将详细介绍 macOS…

第十七章 使用 MariaDB 数据库管理系统

1. 数据库管理系统 数据库是指按照某些特定结构来存储数据资料的数据仓库。在当今这个大数据技术迅速崛起的年代&#xff0c;互联网上每天都会生成海量的数据信息&#xff0c;数据库技术也从最初只能存储简单的表格数据的单一集中存储模式&#xff0c;发展到了现如今存储海量…

11.17【大数据】Hadoop【DEBUG】

列出hdfs文件系统所有的目录和文件 主节点上 子结点 是一样的 *为什么能登进 slave 02 的主机,但是 master 当中依然显示 slave 02 为 DeadNode?* hadoop坏死节点的重启_hadoop3 子节点重启-CSDN博客 注意hadoop-daemon.sh 实际上位于 Hadoop 的 sbin 目录中&#xff0c;而不…

MetaGPT 安装

1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令&#xff0c;在C盘位置C:\Users\325…

图的最小生成树(Kruskal算法,Prim算法)

无向图中的最短路径问题&#xff1f;No&#xff0c;最短路径不是最小生成树&#xff01; 什么是最小生成树&#xff1f; 在一个无向连通图中&#xff0c;有一个子图连接所有顶点&#xff0c;并且权重和最小&#xff0c;那么他就是最小生成树。如果权重和不是最小的只能叫做生…

【Flink-scala】DataStream编程模型之水位线

DataStream API编程模型 1.【Flink-Scala】DataStream编程模型之 数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之 窗口计算-触发器-驱逐器 文章目录 DataStream API编程模型前言…