测试开发工具开发 -JMeter 函数二次开发

news2024/12/26 22:17:02

在JMeter中开发自定义函数是一个常见的需求,允许我们扩展JMeter的功能以适应特定的测试需求。自定义函数可以用来处理数据,生成输出,或者执行特定的运算。通过JMeter函数二次开发可以帮我们解决实际测试过程中造数难的问题

 

用过JMeter的同学对JMeter内置的函数助手不陌生,使用函数助手可以帮我们非常高效生成一些数据满足我们的接口测试的要求。比如我们想要生成随机的手机号码,可以使用RandomString函数,具体做法:设置手机号码前缀区段(比如189、138、177)这些,然后再使用RandomString函数帮我们生成后8位的随机数,然后拼接成手机号码:

图片

但是有时候测试需求中的手机号码区段并不是固定的,如果想要手机号码区段也能够满足随机的要求(并且符合运营商开放的区段),又或者是生成合法的随机身份证号码,这类需求该如何实现呢?JMeter的内置函数满足不了,此时我们可以对JMeter函数进行二次开发。

JMeter二次开发实现逻辑

自定义函数必须继承于JMeter的AbstractFunction类

并需要重写该类的4个方法:

  • execute,函数执行逻辑,必需,自定义函数的核心逻辑,并返回经过处理后的内容

  • getReferenceKey,函数名称,必需,返回一个字符串,表示在JMeter中使用自定义函数的函数名,一般以双下划线开头,如__IDNumber

  • setParameters,设置函数接收参数值,如果自定义函数有参数,用于接收调用时传递过来的参数,注意使用时,字符串参数不要加双引号

  • getArgumentDesc,函数参数描述,如果自定义函数有参数,用于返回函数参数说明

JMeter二次开发具体步骤

1、创建Java Maven项目

选择从maven-archetype-quickstart模板创建

在pom.xml中添加依赖ApacheJMeter_java、ApacheJMeter_core,注意与使用的JMeter版本保持一致

<!--引入JMeter依赖--><dependency>    <groupId>org.apache.jmeter</groupId>    <artifactId>ApacheJMeter_java</artifactId>    <version>5.4.3</version></dependency><dependency>    <groupId>org.apache.jmeter</groupId>    <artifactId>ApacheJMeter_core</artifactId>    <version>5.4.3</version></dependency>
2、自定义函数类继承AbstractFunction

创建functions子包,在已有包中,添加一个名为functions子包

添加自定义函数, 在functions子包下,添加自定义函数类,并继承AbstractFunction类,并实现该类的4个抽象方法:

  • 在execute方法中添加插件逻辑

  • 在getReferenceKey方法中返回自定义名称函数

  • 如果函数有参数,在setParameters方法获取传递过来的参数

  • 如果函数有参数,在getArgumentDesc中描述接收的参数

public class IDNumber extends AbstractFunction {    //参数    private String area;
    /**     * 函数执行逻辑,自定义函数的核心逻辑,并返回经过处理后的内容     *     * @param sampleResult     * @param sampler     * @return     * @throws InvalidVariableException     */    public String execute(SampleResult sampleResult, Sampler sampler) {        //调用身份证生成逻辑,使用了第三方的业务逻辑        String idNumber = IdNumberGenerateUtil.generate(area);        return idNumber;    }
    /**     * 设置函数接收参数值,接收JMeter界面用户传递过来的参数     *     * @param parameters     * @throws InvalidVariableException     */    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {        //检查参数个数        checkParameterCount(parameters, 0, 1);        //获取参数        Object[] params = parameters.toArray();        //获取区域        if (params.length > 0) {            CompoundVariable cvArea = (CompoundVariable) params[0];            this.area = cvArea.execute();        }    }
    /**     * 函数名称,JMeter界面函数的名称     *     * @return     */    public String getReferenceKey() {        return "__IDNumber";    }
    /**     * 函数参数描述,JMeter界面显示的参数说明     *     * @return     */    public List<String> getArgumentDesc() {        List<String> desc = new ArrayList<String>();        desc.add("城市名");        return desc;    }}
3、将代码打包成jar文件

方式一:项目没有第三方依赖,直接使用右侧Maven菜单的Lifecyle->package打包,直接使用jar包

图片

方式二:项目有第三方依赖,需要按照如下步骤操作:

  • 在pom.xml文件的build->plugins配置节下添加如下内容

<build>    <plugins>        <!--将依赖打包到jar包-->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-assembly-plugin</artifactId>            <version>2.5.5</version>            <configuration>                <descriptorRefs>                    <descriptorRef>jar-with-dependencies</descriptorRef>                </descriptorRefs>            </configuration>        </plugin>        <plugin>            <artifactId>maven-compiler-plugin</artifactId>            <version>3.8.1</version>            <configuration>                <source>1.8</source>                <target>1.8</target>                <encoding>UTF-8</encoding>            </configuration>        </plugin>    </plugins></build>

  • 使用右侧Maven菜单的Plugins->assembly->assemble:assembly打包,会生成一个带-jar-with-dependencies后缀的jar包,直接使用此xxxx--jar-with-dependencies.jar包

图片

4、将jar文件部署到JMeter中

将上一步的xxx.jar文件拷贝到JMeter安装目录的lib/ext目录中

图片

重启JMeter,打开函数助手即可使用自定义的函数:

图片

 

 

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

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

相关文章

搭建vue3组件库(三): CSS架构之BEM

文章目录 1. 通过 JS 生成 BEM 规范名称1.1 初始化 hooks 目录1.2 创建 BEM 命名空间函数1.3 通过 SCSS 生成 BEM 规范样式 2. 测试 BEM 规范 BEM 是由 Yandex 团队提出的一种 CSS 命名方法论&#xff0c;即 Block&#xff08;块&#xff09;、Element&#xff08;元素&#xf…

WORD排版常见问题与解决方案

前言 近期使用word软件进行论文排版工作&#xff0c;遇到了一些常见的问题&#xff0c;记录一下&#xff0c;避免遗忘。 基本配置 系统环境&#xff1a;win10/win11 word版本&#xff1a;Microsoft Office LTSC 专业增强版 2021 问题与解决方案 问题1&#xff1a;页眉显示内…

C——双向链表

一.链表的概念及结构 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。什么意思呢&#xff1f;意思就是链表在物理结构上不一定是连续的&#xff0c;但在逻辑结构上一定是连续的。链表是由一个一个的节点连…

使用递归函数,将一串数字每位数相加求和

代码结果&#xff1a; #include<stdio.h> int DigitSum(unsigned int n) {if (n > 9)return DigitSum(n / 10) (n % 10);elsereturn n; } int main() {unsigned int n;scanf("%u", &n);int sum DigitSum(n);printf("%d\n", sum);return 0; …

持续更新|UNIAPP适配APP遇到的问题以及解决方案

在使用UNIAPP开发APP的时候遇到的一些奇奇怪怪问题记录 组件样式丢失 问题&#xff1a;组件引入界面中&#xff0c;在小程序和H5环境下样式正常&#xff0c;而在APP中却出现高度异常问题 解决&#xff1a;增加view标签将组件包裹起来即可正常显示 解决前&#xff1a; 解决后…

SCI一区 | MFO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测(Matlab)

SCI一区 | MFO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测&#xff08;Matlab&#xff09; 目录 SCI一区 | MFO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现MFO-CNN…

JAVA第二周学习笔记

文章目录 JAVA第二周学习笔记IDEA方法格式带参数及返回值的方法方法的重载方法的内存 二维数组静态初始化动态初始化 面向对象类和对象如何定义类如何得到对象注意 封装封装的优点private关键字成员变量和局部变量 this关键字构造方法作用类型特点执行时机定义重载 标准javabea…

Linux进程——进程的创建(fork的原理)

前言&#xff1a;在上一篇文章中&#xff0c;我们已经会使用getpid/getppid函数来查看pid和ppid,本篇文章会介绍第二种查看进程的方法&#xff0c;以及如何创建子进程&#xff01; 本篇主要内容&#xff1a; 查看进程的第二种方法创建子进程系统调用函数fork 在开始前&#xff…

什么是哈希表(HashTable)?

目录 一、概念 二、哈希冲突 减少哈希冲突的办法&#xff1a; 1、设计合理的哈希函数 哈希函数设计原则&#xff1a; 常用的哈希函数&#xff1a; 2、降低负载因子&#xff08;必须重点掌握&#xff09; 哈希冲突的解决 第一类&#xff1a;闭散列 第二类&…

实时监控RTSP视频流并通过YOLOv5-seg进行智能分析处理

在完成RTSP推流之后&#xff0c;尝试通过开发板接收的视频流数据进行目标检测&#xff0c;编写了一个shell脚本实现该功能&#xff0c;关于视频推流和rknn模型的部署请看之前的内容或者参考官方的文档。 #!/bin/bash # 设置脚本使用的shell解释器为bashSEGMENT_DIR"./seg…

【模板】前缀和

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和模板题。 前缀和中数组下标为1~n。 前缀和&#xff1a;pre[i]pre[i-1]a[i]; 某段区间 [l,r]的和&#xff1a;pre[r]-pre[l-1] 3.…

【数学建模】2024五一数学建模C题完整论文代码更新

最新更新&#xff1a;2024五一数学建模C题 煤矿深部开采冲击地压危险预测&#xff1a;建立基于多域特征融合与时间序列分解的信号检测与区间识别模型完整论文已更新 2024五一数学建模题完整代码和成品论文获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upv…

unity制作app(2)--主界面

1.先跳转过来&#xff0c;做一个空壳&#xff01;新增场景main为4号场景&#xff01; 2.登录成功跳转到四号场景&#xff01; 2.在main场景中新建canvas&#xff0c;不同的状态计划用不同的panel来设计&#xff01; 增加canvas和底图image 3.突然输不出来中文了&#xff0c;浪…

【19-文本数据处理:Scikit-learn中的自然语言处理技术】

文章目录 前言理解文本数据文本预处理文本清洗分词停用词去除向量化文本数据词袋模型TF-IDF变换构建文本分类模型模型评估与调优结论前言 欢迎回到我们的Scikit-learn系列,在这篇文章中,我们将探讨如何使用Scikit-learn来处理文本数据,这是自然语言处理(NLP)的基础。你将学…

为家庭公网IP配置DDNS域名

文章目录 域名配置域名更新frp配置修改 在成功完成frp改造Windows笔记本实现家庭版免费内网穿透之后&#xff0c;某天我突然发现内网穿透失效了&#xff0c;一番排查之后原来是路由器对应的公网IP更换了。果然我分到的并不是固定的公网IP&#xff0c;而是会定期变化的。为了免受…

中间件之异步通讯组件RabbitMQ入门

一、概述 微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff0c;目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中&#xff0c;调用者发起请求后需要等待服务提供者执行业务返回结果后&#xff0c;才能继续执行后面的业务。也就是说调用者在调用…

解决IDEA下springboot项目打包没有主清单属性

1.问题出现在SpringBoot学习中 , 运行maven打包后无法运行 报错为spring_boot01_Demo-0.0.1-SNAPSHOT.jar中没有主清单属性 SpringBoot版本为 2.6.13 Java 版本用的8 解决方法 1.执行clean 删除之前的打包 2.进行打包规范设置 2.1 3.进行问题解决 (借鉴了阿里开发社区) 使用…

OpenCV(二)—— 车牌定位

从本篇文章开始我们进入 OpenCV 的 Demo 实战。首先&#xff0c;我们会用接下来的三篇文章介绍车牌识别 Demo。 1、概述 识别图片中的车牌号码需要经过三步&#xff1a; 车牌定位&#xff1a;从整张图片中识别出牌照&#xff0c;主要操作包括对原图进行预处理、把车牌从整图…

碳纤维复合材料的纳米纤维膜

碳纤维复合材料的纳米纤维膜是一种具有良好性能和应用前景的新材料。以下是关于这种材料的详细介绍&#xff1a; 制备方法&#xff1a;碳纤维复合材料的纳米纤维膜可以通过多种方法制备&#xff0c;包括化学气相沉积法、固相合成法、模板法等。其中&#xff0c;化学气相沉积法是…

Docker——部署LNMP架构

目录 一、LNMP架构概述 1.项目环境 2.服务器环境 3.需求 二、搭建Linux系统基础镜像 三、部署Nginx 1.建立工作目录 2.编写Dockerfile脚本 3.准备Nginx.conf配置文件 4.生成镜像 5.创建自定义网络 6.启动镜像容器 7.验证Nginx 三、部署Mysql 1.建立工作目录 2.编…