测试开发必备技能-Jmeter二次开发

news2024/11/17 23:34:22

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

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

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

相关文章

4.Java基本数据类型

Java 的两大数据类型: 基本数据类型引用数据类型 1. 八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型 byte: byte 数据类型是8位、有符号的,以二进制补码表…

Python 列表 extend()函数使用详解

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 extend函数使用详解 1、可以接收的参数1.1、添加字符串1.2、添加元组1.3、添加字…

ts学习(一):基础篇1

旨在记录! 这篇人都学废了,本想记录常用类型,越学越多,每一个都很重要… 一、string: 字符串类型二、number: 数字类型三、boolean: 布尔值四、array:数组五、tuple: 元组六、字面量七、object:对象八、any: 任意类型九、unknown:…

Nacos知识掌握【快速入门】

通过上面的调用图会发现,除了微服务,还有一个组件是服务注册中心,它是微服务架构非常重要 的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能: \1. 服务发现: 服务注…

第十章:PSPNet——金字塔场景解析网络

0.摘要 场景解析对于无限制的开放词汇和多样化的场景是具有挑战性的。在本文中,我们通过金字塔池化模块和提出的金字塔场景解析网络(PSPNet),利用全局上下文信息的能力,通过基于不同区域的上下文聚合,来处理…

五种最新优化算法(SWO、ZOA、EVO、KOA、GRO)求解23个基准测试函数(含参考文献及MATLAB代码)

一、五种算法简介 (1)蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快&a…

Leetcode 43 字符串相乘

Leetcode43字符串相乘 题解1(按位计算) 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整…

Ansible 自动化运维工具(完善版)

目录 Ansible概述 Ansible特点 Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 Ansible的搭建 环境 ansible主机 1、ansible 2、Ansible-doc Ansible模块 1.command模块 2.shell模块 3.raw模块 Ansible概述 Ansible是最近非常火的一款开源运维自动化工具…

Verdi分析有限状态机

Verdi平台包括最先进的结构可视化和分析工具,其中,nTrace用于源代码,nWave用于波形,nSchema用于原理图/逻辑图,nState用于有限状态机(FSM)。本节将对nState的使用进行介绍。 为了简单起见&#…

软件测试(测试用例 )—— 写用例无压力

软件测试——用例篇 一、概念 测试用例的基本概念: 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素 。 主要步骤: 测试…

企业数字化营销怎么做?企业数字化营销系统怎么选择?

数字化营销是在不改变原有营销本质的前提下,借助数字化平台,把营销集成在系统或者说平台,通过平台的整合发力,改变传统营销压力及规避一些营销困难,实现数据留痕平台,用数据反哺运营与营销,让营…

jdk动态代理案例和实现原理

📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…

visio插入mathtype保存时报错“DOS共享冲突”解决方案

软件版本 软件版本VisioMicrosoft Visio 专业版2019WordMicrosoft Office LTSC 专业增强版 2021MathType7.4.10.53WindowsWindows 10 家庭中文版 22H2 19045.3208 现象 无论是从Word直接“粘贴”到Visio或从Visio“插入→对象”插入“MathType 7.0 Equation”,在…

如何为SoC做ARM CPU适配——以裸核使用malloc为例

本文任务:为陌生的SoC平台编写基础软件,适配 malloc() 函数 0 如何为SoC做ARM CPU适配 今时不同往日,我们平时开发/娱乐接触到的消费级MCU/MPU基本山都是包含处理核与一系列外设的SoC。如果熟悉裸片开发,一定会在厂家提供的标准…

运营工具篇

既然要做点事,至少要先做到万事俱备只欠东风。 我们也不用把研发产品看得太神圣,比如拿一张纸做出来一个会旋转的纸杯,碰巧有一群人喜欢它并且愿意为它付费,那么剩下要做的是什么?把这个纸杯量产并送到目标用户面前。…

Baklib团队拜访深证通,加强与合作企业沟通

2023年7月11日,Baklib商务经理、运营经理拜访了深圳证券通信有限公司(以下简称为:深证通)。 2023年7月11日,Baklib商务经理、运营经理拜访了深圳证券通信有限公司(以下简称为:深证通&#xff09…

Java程序员需要掌握的前端知识(一)

对于前端知识,需要进一步巩固和加强,进入企业之后,要具备一定的接口调试,参数接收的能力,以及单体页面的开发,这里我学习一下前端知识巩固一下自身的技术栈和水平。本次笔记是跟学黑马的同名课程&#xff0…

2-5 构建聚合工程

父项目 新建 子模块 创建 父项目的pom文件 自动添加了模块引用 1. 聚合工程里可以分为顶级项目(顶级工程、父工程)与子工程,这两者的关系其实就是父子继承的关系 子工程在maven里称之为模块(module),模…

redis和mongodb数据库的基本操作

目录 一、redis基本操作 1、 string类型数据的命令操作: 2、 list类型数据的命令操作: 3、 hash类型数据的命令操作 4、Keys相关的命令操作 二、MongoDB 基本操作作业 1. 查找练习 2.增加、更新、删除作业 : 3.使用之前的grade数据库…

【开发者指南】MyEclipse是如何支持AngularJS的?

MyEclipse在2015 CI 7版本中就引入了对AngularJS的支持,接着往下看,本文将介绍它包含的功能特性。 MyEclipse v2023.1.1离线版下载 1. 支持AngularJS MyEclipse对AngularJS的初始支持在MyEclipse 2015 CI 7中可用,后续版本将提供更多的Ang…