性能工具之JMeter二次开发总结

文章目录

    • 一、前言
    • 二、自定义脚本
    • 三、自定义请求编写(Java Sampler)
    • 四、自定义函数
    • 五、小结

一、前言

掌握 JMeter 的脚本编写和执行,这基本已满足大部分的性能测试需求,但是面对各种各样的项目技术方案,有些需求是需要我们写代码实现的,那么性能测试工程师对 JMeter 二开就无法避免了,而 JMeter 作为 Apache 的开源性能测试工具允许使用者对其进行二次开发扩展,本文对常见的几种二开方法进行总结,方便大家学习查阅。

二、自定义脚本

JSR223 是一个用于将脚本嵌入 JMeter的Java源代码的框架。相当于一个小巧的 Java 源码解释器,简单来说就是可以在里面写代码,然后通过解释语言翻译成插件可以识别的指令去执行相关操作。

由于 JSR223 组件可用于增强对测试计划的控制,因此它们是使用 JMeter 进行性能测试的最有用工具之一。有一整套JMeter JSR223 组件:一个采样器,一个断言,前后之处理器,一个监听器和一个定时器。

在 JSR223 组件中使用一系列解释语言,常见的有 Groovy 和 BeanShell。

这里以 BeanShell 举例,其常被用于对请求或者返回内容进行获取或者加工,其中 prev 是对当前的取样进行访问,执行了对响应状态码、响应信息、请求头等的操作,

常见用法举例:

#获取响应的状态码
log.info("code is  "+prev.getResponseCode());

#获取响应信息
log.info("response is "+prev.getResponseDataAsString());

#获取头文件中ContentType类型
log.info("content_type  "+prev.getContentType());

#获取取样器请求首部字段
log.info("header "+prev.getRequestHeaders());

通过以上方式,基本实现了对请求的基本信息的获取,然后我们可以对这些信息做进一步的提取、判断等操作。

另外,我们可以使用 log 变量访问组件的 Logger 对象。Logger 类对于脚本编写非常重要,因为可以让我们更轻松地调试脚本,通过信息输出到 JMeter 日志,方便我们调试脚本。

BeanShell 日志打印示例如下:

#打印线程号
log.debug('Current thread number:'+ String.valueOf(ctx.getThreadNum()));

#打印启动采样器名称
log.info('Sampler '+ sampler.getName()+' started’);

#自定义告警
log.warn('Could not convert string, using default encoding');

#打印错误信息
log.error("Malformed URL detected:", e);

#打印响应数据
log.error("Response data:"+ prev.getResponseDataAsString());

其它使用方式可以参考本文:性能工具之 JMeter 快速入门

注意在 JMeter 高并发时不建议使用 BeanShell ,因为其消耗资源较多,相比 Groovy 要更高效。

三、自定义请求编写(Java Sampler)

实现 Java Sampler 自定义请求的两种方式

  • 继承 AbstractJavaSamplerClient 抽象类;
  • 实现 JavaSamplerClient 接口。

通过阅读源码可以发现 AbstractJavaSamplerClient 抽象类是 JavaSamplerClient 接口的子类,所以,我们可以新建一个 JavaClass,并继承 AbstractJavaSamplerClient。

AbstractJavaSamplerClient中 默认实现了四个可以覆盖的方法,分别是 getDefaultParameters(), setupTest(), runTest()和 teardownTest()方法。

  • getDefaultParameters 方法:主要用于设置传入界面的参数,这个方法由 JMeter 在进行添加 JavaRequest 时第一个运行,它决定了你要在 GUI 中默认显示哪些属性。当每次在 GUI 里点击建立 java requst sampler 的时候会调用该方法。该方法设置了 parameters 的初始值,也可以在 sampler 的 GUI 界面做进一步的修改;
  • setupTest方法:初始化方法,用于初始化性能测试时的每个线程,用于初始化测试脚本里面用到的变量,这些变量会在后续执行中使用。
  • runTest方法:性能测试时的线程运行体,实现功能逻辑的主方法,每个线程会循环执行这个方法。
  • teardownTest:方法为测试结束方法,用于结束性能测试中的每个线程,在每个线程执行完所有的测试工作之后执行,有点像 finally 的功能,比如,我开了一个数据库的连接,那么我要在所有的线程完成工作后关闭。

使用案例:

  • 性能工具之Jmeter压测Thrift RPC服务
  • 性能工具之Jmeter压测Hprose RPC服务

四、自定义函数

要实现二次扩展函数,主要有两点:
1、定义function 的类的 package 声明必须包含 .functions(新建的包需要特别注意,名字只能是 functions 结尾,否则打包放到 JMeter 中是没有办法识别这个插件)

2、需要继承实现 AbstractFunction 四个方法

  • execute方法用于接收Jmeter传入的参数值并执行工作
  • setParameters方法用于传递执行过程中的实际参数值
  • getReferenceKey方法用于定义函数名字
  • getArgumentDesc方法用于描述函数参数

在这里插入图片描述
使用案例:

  • 性能工具之Jmeter扩展函数及压测ActiveMQ实践

五、小结

通过本文学习,我们知道了如何使用代码方式扩展实现自己需要的工具,使用解释语言脚本和 jar 包插件引入都是工作中常见的,这也是 JMeter 的特色功能,希望大家日常工作中有所说帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

缺少代码签名证书会怎么样?

在当下恶意软件攻击频发的情形下,使用代码签名证书来保护代码安全已经成为每个软件开发商的基本认知。代码签名证书将保护软件代码的完整性,避免软件被非法篡改或植入恶意代码病毒,从而使得软件可以正常运行。那么如果软件缺少代码签名证书会…

基于springboot + vue大学生竞赛管理系统

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

利用ElementUI配置商品的规格参数

需求&#xff1a;商品可以设置多个规格&#xff0c;需要自动生成对应规格的所有组合&#xff0c;并设置该规格商品的图片、价格、库存等数据。 <template><div class"sku-list"><template v-if"!disabled"><div class"sku-list-…

UDP数据报套接字

文章目录 DatagramSocket APIDatagramPacket API示例一: 请求响应UDP服务端UDP客户端 DatagramSocket API Socket是操作系统中的一个概念&#xff0c;本质上是一种特殊的文件&#xff0c;Socket就属于把“网卡”这个设备给抽象成了文件。往 Socket 文件中写数据&#xff0c;就…

外包干了2个月,技术倒退2年。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

maven环境搭建

maven历史版本下载&#xff1a;https://archive.apache.org/dist/maven/ 新建系统变量编辑Path&#xff0c;添加bin目录mvn -v测试查看版本号conf目录下新建repository文件夹&#xff0c;作为本地仓库 settings.xml <?xml version"1.0" encoding"UTF-8&q…

JAVAEE初阶相关内容第十八弹--网络原理之TCP_IP【续集】

写在前 上一篇博客的重点内容主要讲了关于传输层的TCP协议、UDP协议。 点击跳转上一篇博客 重点介绍了协议的特点、协议端格式、需要重点理解并掌握TCP的工作机制&#xff08;十条&#xff09;。 TCP与UDP对比&#xff1f; TCP用于可靠传输的情况&#xff0c;应用于文件传输&am…

【优选算法】202.快乐数

一&#xff0c;题目解析 图形结合&#xff1a; 二&#xff0c;算法原理 快慢双指针 1&#xff0c;定义快慢指针 2&#xff0c;慢指针每次移动一步&#xff0c;快指针一次移动两步 3&#xff0c;判断相遇时的值为1即为快乐数 三&#xff0c;编写代码 class Solution {publ…

Leetcode.2477 到达首都的最少油耗

题目链接 Leetcode.2477 到达首都的最少油耗 rating : 2012 题目描述 给你一棵 n n n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 0 0 到 n − 1 n - 1 n−1 &#xff0c;且恰好有 n − 1 n - 1 n−…

微信小程序pc端样式调试:默认宽高为1024*812,全屏宽高为1920*1032

最近开发调试pc端小程序&#xff0c;想知道默认打开和全屏这两种情况下的小程序宽高&#xff0c;发现了一种方法&#xff1a; 真机运行pc端小程序&#xff0c;点击devTools 在控制台直接打印window对象&#xff0c;可以获取到pc端默认屏幕宽高为1024812&#xff0c;全屏pc端小…

【实用+干货】如何使用Clickhouse搭建百亿级用户画像平台看这一篇就够了

背景 如果你是用户&#xff0c;当你使用抖音、小红书的时候&#xff0c;假如平台能根据你的属性、偏好、行为推荐给你感兴趣的内容&#xff0c;那就能够为你节省大量获取内容的时间。 如果你是商家&#xff0c;当你要进行广告投放的时候&#xff0c;假如平台推送的用户都是你潜…

【无标题】什么是UL9540测试,UL9540:2023版本增加哪些测试项目

什么是UL9540测试&#xff0c;UL9540:2023版本增加哪些测试项目 UL 9540是美国安全实验室&#xff08;Underwriters Laboratories&#xff09;发布的标准&#xff0c;名称为"UL 9540: Energy Storage Systems and Equipment"&#xff0c;翻译为中文为"能量存储…

Vue Computed

小满&#xff0c;我的神&#xff01; 视频链接 // 只读 const plusOne computed(() > count.value 1) // 可读可写 const plusOne computed({get: () > count.value 1,set: (val) > {count.value val - 1} }, { // 用于调试onTrack(e) {debugger},onTrigger(e) …

坚鹏:中国工商银行内蒙古分行数字化转型发展现状与成功案例培训

中国工商银行围绕“数字生态、数字资产、数字技术、数字基建、数字基因”五维布局&#xff0c;深入推进数字化转型&#xff0c;加快形成体系化、生态化实施路径&#xff0c;促进科技与业务加速融合&#xff0c;以“数字工行”建设推动“GBC”&#xff08;政务、企业、个人&…

5.2k Star!一个可视化全球实时天气开源项目!

大家好&#xff0c;本文给大家推荐一款全球实时天气开源项目&#xff1a;Earth。 项目简介 Earth 是一个可视化全球天气实况的项目。该项目以可视化的方式展示了全球的天气情况&#xff0c;提供了风、温度、相对湿度等多种天气数据&#xff0c;以及风、洋流和波浪的动画效果…

openlayers地图使用---跟随地图比例尺动态标绘大小的一种方式

openlayers地图使用—跟随地图比例尺动态标绘大小的一种方式 预期&#xff1a;随着地图比例尺放大缩小&#xff0c;地图上的标绘随着变化尺寸 结果图 页面元素 <script src"https://cdn.bootcdn.net/ajax/libs/openlayers/8.1.0/dist/ol.min.js"></script…

Python标准库:time模块【侯小啾Python基础领航计划 系列(十八)】

Python标准库:time模块【侯小啾Python基础领航计划 系列(十八)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

Linux下的java环境搭建

1&#xff0c;安装jdk 上传linux使用的jdk到/opt目录下 解压tar -zxvf文件 配置环境变量 vim /etc/profile 在文件中添加 export JAVA_HOME/opt/jdk8 export PATH$PATH:$JAVA_HOME/bin 使文件生效 source /etc/profile 2,安装tomcat 将tomcat包解压&#xff0c;进入bi…

深度学习在图像识别中的应用

深度学习在图像识别中的应用 摘要&#xff1a;本文介绍了深度学习在图像识别领域的应用&#xff0c;包括卷积神经网络&#xff08;CNN&#xff09;的基本原理、常见模型以及在图像识别中的优势。并通过实验展示了深度学习在图像识别中的实际应用和效果。 一、引言 随着数字化…

新华三数字大赛复赛知识点 VLAN基本技术

VLAN IEEE 802.1Q 交换机端口类型 MVRP协议 VLAN Virtual LAN虚拟局域网。LAN可以是由几台少数家用计算机构成的网络&#xff0c;也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络–也就是广播域。将一个物理的局域网在逻辑上划分成多个广播域…