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

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

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值