Jmeter自定义函数二次开发

news2025/2/9 11:18:37

目录

前言:

开发步骤:


前言:

JMeter自定义函数是一种使用Java编写的函数,它可以与JMeter脚本一起使用。如果JMeter原始函数不满足您的需求,您可以使用Java编写自定义函数来扩展其功能。

需求:读取本地存放图片的地址,实现随机选取图片转化为base64图片流

问题出现的环境背景:工作中模型接口的传入为图片base64,在使用jmeter进行相关接口测试时需要有该功能函数。

开发步骤:

1、创建java项目,新建的包名称必须时org.apache.jmeter.functions,在该包下创建名为ImageToBase64的class

2、导入jmeter安装目录下的lib\ext下的ApacheJMeter_functions.jar包

3、继承AbstractFunction类,并重写其中的方法

package org.apache.jmeter.functions;

import java.util.Collection;
import java.util.List;

import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;

public class ImageToBase64 extends AbstractFunction{

    @Override
    public List<String> getArgumentDesc() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getReferenceKey() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void setParameters(Collection<CompoundVariable> arg0) throws InvalidVariableException {
        // TODO Auto-generated method stub
       
    }
   
}

可以看到的是,我们需要重写的方法有四个:

    1、getArgumentDesc():函数参数描述,如果自定义函数有参数,用于返回函数参数说明

    2、execute():函数的主要执行逻辑,返回经过处理后的内容,此次返回的就是图片的base64

    3、getReferenceKey():返回自定义的函数名称。如:"__ImageToBase64"。一般的我们在创建自定义函数名称的时候以双下划线开头

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

4、开发过程

1、首先第一步是确定在Jmeter函数助手中显示的名字以及所需要的参数。

public class ImageToBase64 extends AbstractFunction {
    private static final List<String> dese = new LinkedList<>();
    private static final String KET = "__ImageToBase64";    // 函数界面显示

    static {
        dese.add("文件路径:");   // jmeter界面参数说明
    }
    
    private CompoundVariable File_path;
    public ImageToBase64(){
    }
    private Object[] values;
    
    ///
    ...
    ///
     @Override
    public String getReferenceKey() {
        return KET;
    }

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

2、添加图片转base64方法

public static String imageToBase64Str(String imgFile) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 加密
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);
    }

3、重写execute,实现执行逻辑

@Override
    public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {

        File_path = (CompoundVariable) values[0];
        String filepath = File_path.execute().trim();
        File dir = new File(filepath);
        String[] fileList = dir.list(); // 获取指定文件夹下文件的名字
        List<String> base64List = new ArrayList<String>();  // 可能存在bug,目前以列表存放图片地址然后随机选取列表,如果图片数量过多可能导致list过长
        for (int i = 0; i < fileList.length; i++) {
            String pic1 = filepath + "\\" + fileList[i];
            base64List.add(pic1);
        }
        int index = (int)(Math.random()*base64List.size());
        String img_path = base64List.get(index);
        System.out.println(img_path);
        String base64Str = imageToBase64Str(img_path);
        return base64Str;
    }

4、设置函数接收参数值,接收JMeter界面用户传递过来的参数

 @Override
    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
        checkParameterCount(parameters,1);   //  检查参数个数。因为本次传入参数就一个(文件地址)
        values = parameters.toArray();   // 获取参数
    }

5、打包成jar后放入jmeter安装目录下的lib\ext下,重启jmete后就能在函数助手中看到了。

6、基本思路就是这样,主要就是重写execute()这个方法。

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Yg3Y37fdTkAHAEyqD-gLuGbCI8UEiRA1&authKey=wJQ7hIhE9p%2FQDdwXXPjwolJnDMyBoIU%2FtVbTLbNFIvzIWoA7LZfVmSNccWx15jwG&noverify=0&group_code=574737577

 

 

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

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

相关文章

android 如何分析应用的内存(七)

android 如何分析应用的内存&#xff08;七&#xff09; 接上文&#xff0c;介绍六大板块中的第二个————malloc hook 上一篇的自定义分配函数&#xff0c;常常只能解决当前库中的分配&#xff0c;而不能跟踪整个app中的分配。 为此&#xff0c;android的libc库&#xff…

软件测试工程师的核心价值是什么?23年“我“要进阶高级测试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 与产品、研发相比…

面向制造业的IT管理

制造业的数字化和工业4.0技术的应用&#xff0c;使制造商能够优化生产&#xff0c;转变价值链&#xff0c;创造卓越的客户体验。随着行业采用新的技术&#xff0c;如人工智能(AI)、工业物联网(IIOT)和其他策略&#xff0c;制造商需要找到有效的方法来监控和管理他们的生产环境、…

一文彻底搞懂 Softmax 函数,数学原理分析和 PyTorch 验证

文章目录 1. Softmax 的定义2. Softmax 使用 e 的幂次的作用2.1 代码验证2.2 数学原理分析 3. 解决 Softmax 的数值溢出问题3.1 什么是数值溢出&#xff1f;3.2 解决数值上溢问题&#xff1a; x i − m a x ( x ) x_i-max(x) xi​−max(x)3.3 解决数值下溢问题&#xff1a;log_…

Python篇——数据结构与算法(第六部分:哈希表)

目录 1、直接寻址表 2、直接寻址表缺点 3、哈希 4、哈希表 5、解决哈希冲突 6、拉链法 7、常见哈希函数 8、哈希表的实现 8.1迭代器iter&#xff08;&#xff09;和__iter__ 8.2str&#xff08;&#xff09;和repr&#xff08;&#xff09; 8.3代码实现哈希表 8.4哈…

【数据库】Mysql数据库管理

文章目录 引言一、Mysql数据库管理1. 库和表2. 常用的数据类型3. char和varchar区别 二、SQL语句1. SQL语句分类2. 查看数据库结构3. DDL数据定义语言3.1 创建新的数据库3.2 创建新的表3.3 删除指定数据表3.4 删除指定数据库 4. DML数据操控语言4.1 向数据表中插入新的内容4.2 …

连以太网接口和串口傻傻分不清?看完本文就懂了

概要 路由器是一种网络设备&#xff0c;它的主要功能是在不同的网络之间转发数据包&#xff0c;实现网络互联。路由器根据数据包的目的地址&#xff0c;选择最佳的路径&#xff0c;将数据包发送到下一跳。路由器可以连接不同的网络类型&#xff0c;如以太网、帧中继、PPP等。 …

ChatGPT读PDF、生成思维导图的几种方案

大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、读书和自媒体。 日常办公&#xff0c;我们离不开pdf文档读取&#xff0c;思维导图制作&#xff0c;那么ChatGPT能够给我们什么帮助呢&#xff1f; 通常的方法是&#xff1a;我们…

14、Nginx---缓存服务

一、缓存类型 1、服务器端缓存 2、代理缓存 3、客户端缓存 代理缓存的原理&#xff1a; 二、代理缓存配置语法 2.1、代理缓存路径 proxy_cache_path path [levelslevels] [use_temp_pathon|off] keys_zonename:size [inactivetime] [max_sizesize] [manager_filesnumber] [mana…

如何让你的allure报告测试步骤更清晰,更具吸引力?

引言 在软件测试中&#xff0c;清晰的测试步骤对于团队的协作和问题跟踪至关重要&#xff0c;Allure报告是一种强大的工具&#xff0c;能够将测试结果以直观和易于理解的方式呈现给您的团队和客户。 想要让Allure报告更具吸引力和可读性吗&#xff1f;那就不要错过我的精彩建…

MIT6.024学习笔记(三)——图论(2)

科学是使人变得勇敢的最好途径。——布鲁诺 文章目录 通信网络问题二叉树型直径路由器规模路由器数量拥挤程度 二维数组型直径路由器规模路由器数量拥挤程度 蝴蝶型直径路由器规模路由器数量拥挤程度 benes型直径路由器规模路由器数量拥挤 通信网络问题 在通信网络中&#xff…

Redis基础知识(安装基础指令等)

Redis 基础知识 相关资料 官网: https://redis.io/中文地址: http://redis.cn/下载地址: https://redis.io/download 为什么需要Redis 企业需求 高并发 高可用 高性能 海量用户 关系型数据库(如MySQL)-问题 性能瓶颈&#xff1a;磁盘IO 性能低下 扩展瓶颈&#xff1a…

Java基础小项目——【源码】控制台的类似BOSS招聘的一个应聘者用户和公司用户的就业项目【应聘+招聘】

目录 引出题目要求--云就业平台相关的java基础知识项目分层设计 核心业务图解源码总结 引出 类似BOSS招聘的一个应聘者用户和公司用户的就业项目&#xff0c;控制台项目 题目要求–云就业平台 类似BOSS招聘的一个应聘者用户和公司用户的就业项目 第3章 应用系统功能介绍 3…

【Jetpack】使用 Room Migration 升级数据库并导出 Schema 文件 ( Schema 文件简介 | 生成 Schema 文件配置 | 生成 Schema 文件过程 )

文章目录 一、Schema 文件简介二、生成 Schema 文件配置三、生成 Schema 文件过程1、数据库版本 1 - 首次运行应用2、数据库版本 1 升级至 数据库版本 2 - 第二次运行应用3、数据库版本 2 升级至 数据库版本 3 - 第三次运行应用 一、Schema 文件简介 使用 Room Migration 升级数…

Windows Subsystem for Android (WSA) 下载:在 Windows 11 上运行 Android 应用 (June 2023)

适用于 Android™️ 的 Windows 子系统&#xff0c;2023 年 6 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/wsa/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 适用于 Android™️ 的 Windows 子系统使你的 Wi…

Linux系统之ifconfig命令的基本使用

Linux系统之ifconfig命令的基本使用 一、ifconfig命令介绍1. ifconfig简介2. ifconfig注意事项3. ifconfig命令特点 二、ifconfig命令的使用方法1. 查看ifconfig的帮助信息2. ifconfig的使用帮助 三、安装ifconfig命令工具1. 安装net-tools软件包2. 查看ifconfig工具的版本 四、…

至暗时刻,显卡销量腰斩,NVIDIA提前掏出2000元档4060救场

不知道大家有没有感觉&#xff0c;自从 RTX 40 系显卡面世后&#xff0c;玩家们对于装机热情却是反常理的不增反降。 以往每代新显卡出来&#xff0c;哪次不是掀起一阵装机热潮。 然而这次小忆听到最多的声音就是&#xff1a;手里 750Ti 还能再战、GTX 1060 永远滴神等。 当然…

pandas链式操作与SettingWithCopyWarning详解

1.SettingWithCopyWarning问题 SettingWithCopyWarning是pandas中一个经典问题&#xff0c;也是pandas库中位数不多的坑之一。关于这个问题&#xff0c;我们先看下面的一个例子。 import pandas as pddef t1():data {name: [a, b, c, d, e, f],num: [1, 2, 3, 4, 5, 6],ss: …

Linux系统命令与网络、磁盘参数和日志监控

文章目录 1、grep搜索命令2、wc命令3、 uptime机器启动时间负载4、ulimit用户资源5、scp远程拷贝6、dos2unix和unix2dos7、sed 1、grep搜索命令 grep命令用于在文件中搜索&#xff0c;并显示匹配效果 # 1、在指定文件查找&#xff0c;查找int main grep int main server.c# 2…

接口自动化测试丨如何处理 Header cookie

Cookie&#xff08;复数形态&#xff1a;Cookies&#xff09;是某些网站为了辨别用户身份而储存在用户本地终端上的数据。在接口测试过程中&#xff0c;如果网站采取了 Cookie 认证的方式&#xff0c;那么发送的请求需要附带 Cookie&#xff0c;才会得到正常的响应的结果。接口…