Jmeter压测实战:Jmeter二次开发之自定义函数详解
点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具具备轻量、高扩展性、分布式等特性。Jmeter已支持实现随机数、计数器、时间戳、大小写转换、属性校验等多种函数方便使用人员使用。如果在使用过程中存在和业务强耦合的常用功能函数在Jmeter不支持的情况下那就需要单独开发自定义函数实现特定功能。本文介绍如何开发Jmeter自定义函数实现快速生成京东宙斯下单标准sign同时深刻理解Jmeter的插件化机制及高扩展性特性。1、开发准备Java基础开发Maven基本使用开发依赖版本JDK 1.8.0Maven 3.6.3Jmeter 5.4.32、自定义函数核心实现2.1 新建项目pom.xml文件核心配置如下新建maven项目这里项目名为JSF_Sampler因为是基于Jmeter的扩展需要依赖包Jmeter两个核心包分别是ApacheJMeter_coreApacheJMeter_javaApacehJMeter_functionspom.xml文件核心配置如下groupIdcom.jd.jmeter.jsf/groupId artifactIdJSF_Sampler/artifactId version1.0-SNAPSHOT/version properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding jmeter-version5.4.3/jmeter-version /properties dependencies dependency groupIdorg.apache.jmeter/groupId artifactIdApacheJMeter_core/artifactId version${jmeter-version}/version /dependency dependency groupIdorg.apache.jmeter/groupId artifactIdApacheJMeter_java/artifactId version${jmeter-version}/version /dependency dependency groupIdorg.apache.jmeter/groupId artifactIdApacheJMeter_functions/artifactId version${jmeter-version}/version /dependency /dependencies2.2 继承实现AbstractFunction类实现类依次实现以下几个步骤1新建实现类并继承 AbstractFunction注意实现类的包名必须包含xxx.functions.xxxJmeter使用命名规则实现实现类的加载。2重写以下方法每个方法的用途见下方代码注释execute()setParameters()getReferenceKey()getArgumentDesc()/** * 京东宙斯 下单标准字段常量 */ private static final String APP_KEY app_key; private static final String APP_SECRET app_secret; private static final String ACCESS_TOKEN access_token; private static final String TIMESTAMP timestamp; private static final String V v; private static final String METHOD method; private static final String BUY_PARAM_JSON 360buy_param_json; /** * Jmeter中自定义的函数名在Jmeter的函数助手中可以看到 */ private static final String FUNC_NAME __GenSignFunction; /** * 自定义函数的描述入参出参方便使用人员参考使用 */ private static final ListString desc new ArrayList(); static { desc.add(This function is used to generate the JDs JOS sign value); } /** * 此为自定义函数核心实现类其中入参SampleResult为上次运行的结果Sampler为当前的采集器 * 返回值为该函数的返回值 * param sampleResult * param sampler * return * throws InvalidVariableException */ Override public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException { // 入参处理 String param String.valueOf((CompoundVariable)paramValues[0]); String signResult paramHandler(param); return signResult; } /** * 按京东宙斯sign加密规则生成标准sign * param param * return */ public String paramHandler(String param){ MapString,String valueMap new HashMap(); // 按符号分割 String[] paramArray param.split(); for (int i 0; i paramArray.length-1; i) { String key paramArray[i].split()[0]; String value paramArray[i].split()[1]; valueMap.put(key,value); }; // 京东宙斯标准sign String josGign EncryptUtil.getSignature(valueMap.get(app_secret)BUY_PARAM_JSONvalueMap.get(360buy_param_json) ACCESS_TOKENvalueMap.get(access_token) APP_KEYvalueMap.get(app_key) METHODvalueMap.get(method) TIMESTAMPvalueMap.get(timestamp) VvalueMap.get(v) valueMap.get(app_secret)); return josGign; } /** * 配置入参jmeter函数助手入参 */ Override public void setParameters(CollectionCompoundVariable collection) throws InvalidVariableException { paramValues collection.toArray(); } /** * 此方法返回自定义的函数名称 */ Override public String getReferenceKey() { return FUNC_NAME; } /** * 此方法返回函数描述信息 */ Override public ListString getArgumentDesc() { return desc; }2.3 最终项目结构3、Jmeter加载扩展包以上开发完成打包此项目注意这里的打包要包含依赖包。3.1 maven构建配置build finalName${project.artifactId}/finalName defaultGoalinstall/defaultGoal plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId configuration source1.8/source target1.8/target /configuration /plugin plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-assembly-plugin/artifactId configuration descriptorRefs descriptorRefjar-with-dependencies/descriptorRef /descriptorRefs /configuration executions execution idassemble-all/id phasepackage/phase goals goalsingle/goal /goals /execution /executions /plugin /plugins /build3.2 项目打包打包指令如下mvn package -Dmaven.test.skiptrue3.3 Jmeter加载扩展包将打包后的扩展包放置到Jmeter的ext目录apache-jmeter-5.4.3/lib/ext/启动Jmeter后Jmeter会自动加载ext目录中的扩展包打开Jmeter函数助手后可以看到本次实现类中打印的相关日志4、自定义函数调用调试4.1 打开Jmeter函数助手选择自定义函数4.2 京东宙斯接口验证这里使用京东快递获取预制运单号接口输入GET请求后直接点击运行函数【Generate Copy to clipboard】出参返回32位sign值。GET请求入参 methodjingdong.etms.waybillcode.getapp_key349559FAE87E66826499890862E40A44access_tokenc8c2bdc8d1684630bb771a503d5b5a7fkyzh×tamp2022-01-28 15:10:00360buy_param_json{preNum:1,customerCode:10K43816,orderType:0}v2.0signEBB52C6CEDA34703ADE72D4AA4D8F316app_secret29959e4cadc14ff4998d4fc26d1e50635、总结本文通过自定义函数实现了京东宙斯下单标准sign的生成希望通过本项目大家可以学习到如何二次开发Jmeter实现自己特有的自定义函数。理解为何官方介绍Jmeter是插件化的高扩展性特性。更好的理解Jmeter内部处理机制。最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你凡事要趁早特别是技术行业一定要提升技术功底。

相关新闻

Unity WebGL AvproVideo视频卡顿:从编码到播放的全链路解决方案

Unity WebGL AvproVideo视频卡顿:从编码到播放的全链路解决方案

1. 问题现象与背景剖析最近在折腾一个Unity网页端项目,用AvproVideo插件(版本2.6.3)来播放首页的背景视频,结果遇到了一个挺典型的坑:视频文件明明已经加载完成了,进度条也走满了,但画面就是卡在…

2026/8/4 16:36:32 阅读更多 →
微信小程序健身房预约系统开发全解析

微信小程序健身房预约系统开发全解析

1. 项目概述:微信小程序健身房预约系统全解析 这套健身房预约系统是我为本地连锁健身中心开发的线上解决方案,上线三个月内帮助客户将预约率提升47%,会员留存率提高32%。系统采用微信小程序作为前端入口,后端基于Node.jsMySQL架构…

2026/8/4 16:35:32 阅读更多 →
让经典游戏重获新生:用IPXWrapper在现代Windows上重温局域网联机乐趣

让经典游戏重获新生:用IPXWrapper在现代Windows上重温局域网联机乐趣

让经典游戏重获新生:用IPXWrapper在现代Windows上重温局域网联机乐趣 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还记得那些在网吧里和朋友一起玩《红色警戒2》、《魔兽争霸2》、《暗黑破坏神》的美好时光吗&…

2026/8/4 16:35:32 阅读更多 →

最新新闻

【AI安全防御红皮书】:20年攻防专家首次公开3大致命薄弱点与72小时应急响应清单

【AI安全防御红皮书】:20年攻防专家首次公开3大致命薄弱点与72小时应急响应清单

更多请点击: https://codechina.net 第一章:AI安全防御红皮书导论 人工智能系统正以前所未有的深度与广度融入关键基础设施、金融决策、医疗诊断与内容生成等高风险场景,其安全脆弱性已不再仅是技术议题,而是关乎社会信任与公共安…

2026/8/4 17:18:50 阅读更多 →
PX4多旋翼无人机智能避障实战:从传感器融合到神经网络控制的完整解决方案

PX4多旋翼无人机智能避障实战:从传感器融合到神经网络控制的完整解决方案

PX4多旋翼无人机智能避障实战:从传感器融合到神经网络控制的完整解决方案 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 在复杂动态环境中实现安全自主飞行是多旋翼无人机面临的核心挑…

2026/8/4 17:18:50 阅读更多 →
如何构建高性能网盘API适配器:模块化架构的5大设计原则

如何构建高性能网盘API适配器:模块化架构的5大设计原则

如何构建高性能网盘API适配器:模块化架构的5大设计原则 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

2026/8/4 17:18:50 阅读更多 →
2026门店智能讲解屏怎么选?AI数字店员导购促销一体方案TOP5

2026门店智能讲解屏怎么选?AI数字店员导购促销一体方案TOP5

结论先行门店导购最难的是"每个顾客都讲解一遍,一天讲100遍,到第50遍就没力气了"。2026年解决这个问题的最佳方案是AI智能讲解屏——一台设备同时具备迎宾、推荐、促销、讲解、互动5大能力,724小时不知疲倦。本文实测对比了5款门店…

2026/8/4 17:18:50 阅读更多 →
FinOps实践指南:如何优化云成本与资源管理

FinOps实践指南:如何优化云成本与资源管理

1. 当云账单变成恐怖故事:我们为什么需要FinOps去年双十一大促后,我收到了一份来自云服务商的账单——比去年同期暴涨了47%。更可怕的是,当我把账单拆解到具体业务线时,发现有个测试环境的GPU集群已经连续三个月24小时满载运行&am…

2026/8/4 17:18:49 阅读更多 →
考研备考十大误区解析与高效学习策略

考研备考十大误区解析与高效学习策略

1. 考研备考的致命误区解析 作为经历过考研洗礼的过来人,看到每年都有大量一战考生因为同样的错误而折戟沉沙,实在感到惋惜。2027届考研的同学们,你们现在正站在起跑线上,有些坑一旦踩进去,可能要用一整年的时间来买单…

2026/8/4 17:17:49 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →