当前位置: 首页 > article >正文

Jmeter压测实战—Jmeter二次开发之自定义函数

点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快1、前言Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具具备轻量、高扩展性、分布式等特性。Jmeter已支持实现随机数、计数器、时间戳、大小写转换、属性校验等多种函数方便使用人员使用。如果在使用过程中存在和业务强耦合的常用功能函数在Jmeter不支持的情况下那就需要单独开发自定义函数实现特定功能。本文介绍如何开发Jmeter自定义函数实现快速生成京东宙斯下单标准sign同时深刻理解Jmeter的插件化机制及高扩展性特性。2、开发准备Java基础开发Maven基本使用开发依赖版本JDK 1.8.0Maven 3.6.3Jmeter 5.4.33、自定义函数核心实现3.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 /dependencies3.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; }3.3 最终项目结构4、Jmeter加载扩展包以上开发完成打包此项目注意这里的打包要包含依赖包。4.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 /build4.2 项目打包打包指令如下mvn package -Dmaven.test.skiptrue4.3 Jmeter加载扩展包将打包后的扩展包放置到Jmeter的ext目录apache-jmeter-5.4.3/lib/ext/启动Jmeter后Jmeter会自动加载ext目录中的扩展包打开Jmeter函数助手后可以看到本次实现类中打印的相关日志5、自定义函数调用调试5.1 打开Jmeter函数助手选择自定义函数5.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_secret29959e4cadc14ff4998d4fc26d1e50636、总结本文通过自定义函数实现了京东宙斯下单标准sign的生成希望通过本项目大家可以学习到如何二次开发Jmeter实现自己特有的自定义函数。理解为何官方介绍Jmeter是插件化的高扩展性特性。更好的理解Jmeter内部处理机制。最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

相关文章:

Jmeter压测实战—Jmeter二次开发之自定义函数

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、前言 Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具,具备轻量、高扩展性、分布式等特性。Jmeter已支持实现随机数、计数器、时间戳…...

从脚本NPC到自主决策体,SITS2026实测对比:AIAgent使玩家沉浸时长提升217%,你还在用状态机?

第一章:SITS2026分享:AIAgent游戏NPC应用 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026大会上,AIAgent技术首次系统性地应用于开放世界游戏NPC行为建模,突破了传统状态机与行为树的响应边界。通过将LLM推理能力、记…...

AIAgent强化学习实战跃迁:从OpenAI Gym到工业级决策系统,3周完成Agent训练闭环

第一章:AIAgent强化学习实战跃迁:从OpenAI Gym到工业级决策系统,3周完成Agent训练闭环 2026奇点智能技术大会(https://ml-summit.org) 本章聚焦真实工业场景下的Agent训练闭环构建——以电力调度优化任务为载体,将经典CartPole环…...

告别重复造轮子:OpenAI Codex高效生成脚本实战指南

告别重复造轮子:OpenAI Codex高效生成脚本实战指南 在开发者的日常工作中,“重复造轮子”是一个高频痛点——无论是简单的自动化部署脚本、繁琐的数据处理逻辑,还是基础的测试用例生成,往往需要花费大量时间编写重复代码,不仅降低开发效率,还容易因手动编码出现疏漏。而…...

C#.NET IL 中间码 深入解析:从 C# 编译结果到 CLR 执行链路

简介 很多人第一次认真看 IL,通常不是因为“想学一门汇编”,而是因为碰到了这些问题: 同一段 C#,编译之后到底变成了什么async/await、yield、lock 这些语法糖到底被编译成了什么样为什么有些代码看着简单,运行时却没你…...

AGENTS.md的最佳实践

如果把 AI 编程助手比作一台超跑,那么 AGENTS.md就是它的方向盘和导航仪。它是位于项目根目录的特定配置文件(目前已被 Cursor、Windsurf、Claude Code 等主流 AI 编辑器广泛支持),本质上相当于给 AI 注入的“系统级提示词”。 为了让 AI 从“听话的执行者”进阶为“懂你的…...

使用C#代码在 Excel 中创建数据透视图

数据透视图是数据透视表的图形化展示形式。数据透视表用于对数据进行汇总并支持灵活分析,而数据透视图则将这些汇总结果以可视化图表的方式呈现出来。随着数据透视表内容的变化,数据透视图也会自动更新,因此在数据分析与报表展示中具有重要作…...

赋能智能车与机器人技术转型:大联大世平集团携手AutoSys举办线上研讨会

大联大控股旗下世平集团宣布,于4月1日携手AutoSys(先进智能系统)成功举办“Edge AI赋能智能车与机器人产业的感知技术转型路径”线上研讨会。 当前,智能车与机器人技术正加速融合,AI大模型深度赋能感知与决策&#xff…...

碧蓝航线Live2D提取完全指南:5分钟掌握角色动画资源获取

碧蓝航线Live2D提取完全指南:5分钟掌握角色动画资源获取 【免费下载链接】AzurLaneLive2DExtract OBSOLETE - see readme / 碧蓝航线Live2D提取 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneLive2DExtract 想要提取碧蓝航线中精美的Live2D角色动画…...

落子珠江,新址启航|安托广州子公司盛大开业

4月10日,安托广州子公司正式揭牌。与其说是一场开业仪式,不如说是安托在华南地区的一次技术扎根。广东地区作为我国制造大省和国家数字经济创新发展试验区,正加速向“数智化韧性”跃迁。在此背景下,安托选择落子广州,不…...

安科瑞AIM-T系列工业IT绝缘监测及故障定位解决方案为关键供电场所筑牢安全防线

在工业生产与特殊场所供电系统中,供电的连续性、可靠性和安全性至关重要。为了应对复杂环境下的接地故障风险,IT系统(不接地供电系统) 逐渐成为矿井、矿山、冶金、化工、船舶、玻璃厂、爆炸危险场所等领域的优选方案。安科瑞电气股…...

RobotStudio多版本共存避坑指南:5.0/6.0/2019版如何和平共处?

RobotStudio多版本共存实战指南:从兼容性到高效工作流 在工业机器人开发领域,ABB的RobotStudio是工程师们不可或缺的工具。随着项目需求的多样化,许多开发者发现单一版本的RobotStudio已经无法满足日常工作需要——旧项目维护需要5.0版本&…...

国企行政筹办正式会议,标准国企会议纪要撰写权威指南

2026年国企筹办正式会议,写标准会议纪要是最容易踩坑的环节:表述不准、漏记待办分工都得返工,好多新人熬三个小时写的稿都过不了审。今天就把我摸了大半年的标准撰写方法,还有能省80%时间的工具技巧讲明白。去年我在集团行政部轮岗…...

(二十二)32天GPU测试从入门到精通-DeepSeek 模型测试day20

目录 引言DeepSeek 模型介绍架构特点推理性能测试中文场景优化与其他模型对比实战部署选型建议 引言 DeepSeek 是中国深度求索公司开发的大语言模型系列,以出色的中文能力和高性价比著称,是国产大模型的代表之一。从 2023 年的第一代 DeepSeek LLM&…...

AI 驱动与 Wi-Fi 7 双剑合璧,全屋智能家居迎来“认知革命”

如果你觉得智能家居不过是“用手机开关灯”或者“对着音箱问问天气”,那么 2026 年的今天,这个定义已经被彻底颠覆。在 AI 大模型与 Wi-Fi 7 下一代无线网络技术的深度加持下,家庭空间正从“联网的房屋”进化为拥有感知、决策与执行能力的“智…...

ROS小车换雷达后建图重影?别急着调TF,先检查这个关键参数(附完整排查清单)

ROS小车换雷达后建图重影?别急着调TF,先检查这个关键参数(附完整排查清单) 刚给ROS导航小车换上新的激光雷达,满心期待地启动gmapping建图,结果地图上却出现了令人头疼的重影现象。作为经历过多次类似问题的…...

C++代码静态检查脚本工具(指针判空越界访问除0风险)

做了个小项目需要进行代码规范检查,但试了两个CPP静态检查工具,效果都不太好。为了快速迭代维护,直接用pyAI写了个常规代码规范校验脚本工具。目前实现三个功能并封了界面:空指针访问、数组越界访问、除0风险排查。用sample文件夹…...

Halcon实战:光源不均场景下的平场矫正优化策略

1. 光源不均问题的工业视觉挑战 在工业视觉检测中,光源分布不均是最常见的干扰因素之一。想象一下用手机在逆光环境下拍照——画面中某些区域会过曝,而另一些区域又太暗。工业场景中的情况更为复杂:环形光源老化导致的亮度衰减、多角度照射产…...

CV算法工程师求职全攻略:25个知识点帮你通关面试

CV算法工程师求职全攻略:25个知识点帮你通关面试很多同学让我写面试指南,我一直没动笔。因为面试这事儿没有标准答案,说多了容易让人焦虑。 但今天还是聊聊,毕竟有些经验可以分享。 面试官到底看什么 招一个CV算法工程师&#xff…...

2026 年 Intel 酷睿 Ultra 平台装机:华硕主板全系列专业主板测评与精准选购指南

进入 2026 年,Intel 酷睿 Ultra 200S Plus新品的到来,完成消费级市场的全面落地,新一代硬件架构为游戏、内容创作、AI 应用带来了全新的性能体验。在整机搭建过程中,主板怎么选成为多数用户的核心疑问,华硕主板作为 Intel 平台的核心合作产品,覆盖了从旗舰到入门的全价位段需求…...

AI Agent求职被拒最常见的原因是什么

这些实际上更像工程问题,公司愿意给30k月薪的原因就在这里,Agent开发不是玩具技术人,是能把玩具变成生产力的人。这环节最直接有效的方法就是跟着项目完整走一遍,如果你无从下手,趁着有大佬带队,你直接跟着…...

45、如何理解和实现递归?数组扁平化里递归有什么缺陷?

目录 一、先给面试里的标准定义 什么是递归? 二、递归的核心组成 1. 终止条件 2. 当前层逻辑 3. 递归子问题 三、如何写递归?一个通用思路 例子:求 1 到 n 的和 拆解: 四、递归的执行过程怎么理解? 1. 递进…...

昇腾ATC工具实战:如何为PP-OCRv4文本检测模型设置动态输入(Batch/分辨率/Shape)

昇腾ATC工具深度实战:PP-OCRv4文本检测模型动态输入配置全解析 当工业级OCR系统遇到尺寸各异的身份证、发票或模糊的街景文字时,固定输入尺寸的模型往往成为性能瓶颈。某物流公司曾因无法处理不同规格的运单图片,导致识别准确率骤降30%。这正…...

Java 高级特性” 体系(反射 + 枚举 + Lambda)

1.反射 1.1 定义 Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 不用 new,不用知道类名,也能操作类。 1.2 用途 框架底层核心(S…...

手把手教你用F1C200s驱动正点原子7寸LCD屏:完整配置流程与LVGL测试

从零构建F1C200s嵌入式GUI系统:正点原子7寸屏驱动与LVGL实战指南 在嵌入式开发领域,显示界面的人机交互体验越来越受到重视。F1C200s作为一款性价比极高的国产ARM9芯片,搭配正点原子7寸LCD屏,能够构建出性能稳定、成本可控的嵌入式…...

2026届最火的降重复率方案推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术研究范畴之内,论文AI网站已然成了提升写作效率的关键工具,这种…...

主流Attention Backend技术选型与实战场景剖析

1. Attention Backend技术全景解析 当你用ChatGPT生成一段文字,或者让Stable Diffusion画一幅画时,背后都有一个关键组件在默默工作——Attention Backend。这就像汽车发动机里的涡轮增压器,虽然用户看不见,却直接决定了AI模型的&…...

亲测口碑好的物联网开发生产厂家分享

亲测口碑好的物联网开发生产厂家分享行业痛点分析在当前物联网开发领域,存在着诸多技术挑战。首先,设备兼容性难题突出,不同品牌、型号的物联网设备通信协议和接口各异,导致系统集成困难。数据表明,约 60%的物联网项目…...

革命性智能交互助手:Live2D AI如何重塑用户体验边界

革命性智能交互助手:Live2D AI如何重塑用户体验边界 【免费下载链接】live2d_ai 基于live2d.js实现的动画小人ai,拥有聊天功能,还有图片识别功能,可以嵌入到网页里 项目地址: https://gitcode.com/gh_mirrors/li/live2d_ai …...

**大模型Agent面试全解析:手把手带你拿下高薪Offer,小白也能收藏学!**

大模型Agent面试全解析:手把手带你拿下高薪Offer,小白也能收藏学! 本文分享了作者在阿里大模型Agent应用算法岗的三轮面试经历,涵盖Agent核心技术模块(规划、感知、工具、记忆)、微调、提示工程、算法设计、…...