当前位置:网站首页>测试开发必备技能-Jmeter二次开发
测试开发必备技能-Jmeter二次开发
2022-08-04 16:01:00 【小梧敲代码】
01 概述
为什么需要做二次开发?JMeter作为一款开源的性能、接口测试工具,有时候无法满足我们工作的需要,一般体现在:协议不支持、没有相应数据处理功能等。
一般这种情况下,我们可以做的选择有:
第一种找插件
第二种自定义实现
JMeter二次开发一般又分为三类情况:
自定义组件、依托于JMeter的core的jar实现。一般来说,代码量较大
依托于java请求实现自定义协议的扩展。推荐方式
自定义函数来实现特定的一些数据处理的功能。(和服务器没有交互),比如加密、签名的生成、编码处理,解密等等。
02 基于java请求的二次开发
首先,我们依赖的jar包分为两种:
JMeter框架层面的:实现的是性能层面的统计相关工作。需要的jar包有ApacheJMeter_core.jar,是JMeter的核心jar包 ,所有基于JMeter的二次开发基本上都需要用到该jar包。
基于jave请求所以还需要ApacheJMeter_java.jar
扩展的协议本身所需要的:取决于协议本身
接下来打开eclipes,导入需要的jar包,自定义的java请求要继承Jmeter所提供的.AbstractJavaSamplerClient类。可以看到这里需要重写的方法是runTest方法。
我们先写一个简单的例子,认识一下常见的方法:
将该项目导成jar包,放到JMeter lib目录下,ext文件中
如何设置传入参数?
重写getDefaultParameters()方法,在runtest方法中,使用arg0. getParameter(“参数名”)调用
代码:
效果:

到这里的话,我们就把JMeter层面的东西搞定了,那么我们怎么让他实现我们想要的功能?
这个时候就要用到扩展协议所需要的jar包了,我们把这个jar也导入到eclipse中,在runTest方法中调用,设置其返回结果,这样就可以在这里面应用了,因本人实力有限,这个地方举一个简单的例子。假设我们的业务(和服务器交互)是一个计算器,代码如下:
在JMeter框架中我们实现的操作就是设置传入的参数,一般和业务有关,方法就用getDefaultParameters:
其次是runTest方法,我们要做的第一步就是获取传到的参数,使用arg0. getIntParamete方法,实例化业务对象,实例化SampleResult对象,开始计时,业务处理,设置结果,设置状态,结束计时,返回SampleResult对象即可。

有需要时,可在语句中使用try catch抛出异常,对异常状态进行处理
最后导出jar包即可,运行效果:
这里需要注意的是业务类:
业务类所依赖的类都必须以jar包的形式存在于Jmeter的lib目录下,以及业务类所以依赖的类,有可能在Jmeter的lib目录中本身就存在。有可能会版本不一致,此时需要进行评估,一般保留高版本(前提是能够兼容低版本才行)。否则就可能需要进行代码层面的变更,使用统一的版本来实现。
03 JMeter自定义函数
在使用JMeter的过程中,我们经常会需要进行各种各样的数据处理,比如说编码、解码、加密、解密、特定的值生成,如果JMeter本身没有提供,我们则可以通过自定义函数的方式,实现扩展。
我们依赖的jar包有哪些呢?
首先JMeter层面,依赖的jar包主要有两个ApacheJMeter_core.jar以及ApacheJMeter_functions.jar两个包,功能本身所依赖的包就是功能实现的jar包,功能本身是脱离JMeter存在的。
首先我们还是导入JMeter的jar包,创建javaproject项目,创建包,注意package中必须包含关键字functions,创建类,继承自AbstractFunction。
这里需要重写的方法有四个:

该方法就是返回Hello World,如果在使用时,在execute中调用功能包并返回结果,我们看一下怎么传递参数
导出jar包做法和基于java请求一样,测试结果如下:
我们会发现一个问题,就是当使用参数调用函数不能被调用,如图,那么要怎么处理呢?
函数的入参本身是Jmeter的一个参数(类似于${xxx}),则需要进行二次转化,操作方法如下:
导出jra包,运行脚本结果为:
这里就不在说如何调用功能jar包,处理方法和基于java请求二次开发一样,在execute方法中进行调用,返回结果即可,这里也要把功能的jar包也要放到lib目录下。
小技巧:
如果希望将依赖包放在lib以外的目录,则建议修改Jmeter的配置文件jmeter.properties. 中 user.classpath
自定义函数,其package中必须包含关键字functions具体以Jmeter.properties文件中的配置项为准。
classfinder.functions.contain=.functions
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!
边栏推荐
- It took half a month to finally make a collection of high-frequency interview questions of first-tier manufacturers
- C# 写系统日志
- 【TA-霜狼_may-《百人计划》】美术2.7 Metallic 与 Speculer流程
- 现代 ABAP 编程语言中的正则表达式
- H5 开发内嵌页面跨域问题
- Xi'an Zongheng Information × JNPF: Adapt to the characteristics of Chinese enterprises, fully integrate the cost management and control system
- 分支控制if-else
- 7 月浏览器市场份额:Edge 全球第二、360 安全浏览器中国第二
- C#命令行解析工具
- 为什么Redis默认序列化器处理之后的key会带有乱码?
猜你喜欢

西安纵横资讯×JNPF:适配中国企业特色,全面集成费用管控体系
![吴恩达机器学习[13]-支持向量机](/img/8c/87f1dd825bb998008d1532ff2899e2.png)
吴恩达机器学习[13]-支持向量机

Xi'an Zongheng Information × JNPF: Adapt to the characteristics of Chinese enterprises, fully integrate the cost management and control system

LeetCode·84.柱状图中最大的矩形·单调递增栈

SAP ABAP SteamPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克

#夏日挑战赛# HarmonyOS 实现一个滑块验证

把boot和APP一起烧录进MCU

在Markdown文件中快速插入本地图片

For循环控制

贝叶斯优化核极限学习机KELM用于回归预测
随机推荐
皕杰报表配置文件report_config.xml里都配置了什么?
成员变量与局部变量的区别有哪些
吴恩达机器学习[11]-机器学习性能评估、机器学习诊断
Does DMS have an interface to get the list of databases under each instance?
What are the useful IT asset management platforms?
进程间通信方式
荐书 | 《大脑的奥秘:人人要懂的脑科学》:大脑里面有什么
It took half a month to finally make a collection of high-frequency interview questions of first-tier manufacturers
多商户商城系统功能拆解24讲-平台端分销会员
云存储硬核技术内幕——(13) 抓手,组合拳与闭环
字节API鉴权方法
DocuWare平台——用于文档管理的内容服务和工作流自动化的平台(上)
Check which user permissions are assigned to each database, is there an interface for this?
JVM Tuning-GC Fundamentals and Tuning Key Analysis
LeetCode·85.最大矩形·单调栈
吴恩达机器学习[9]-神经网络学习
寻找消失的类名
软件性能测试包括哪些内容?国内权威软件检测机构排名
H5 开发内嵌页面跨域问题
项目里的各种配置,你都了解吗?
