为什么需要做二次开发?JMeter作为一款开源的性能、接口测试工具,有时候无法满足我们工作的需要,一般体现在:协议不支持、没有相应数据处理功能等。

一般这种情况下,我们可以做的选择有:

第一种找插件

第二种自定义实现

JMeter二次开发一般又分为三类情况:

自定义组件、依托于JMeter的core的jar实现。一般来说,代码量较大

依托于java请求实现自定义协议的扩展。推荐方式

自定义函数来实现特定的一些数据处理的功能。(和服务器没有交互),比如加密、签名的生成、编码处理,解密等等。

基于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目录中本身就存在。有可能会版本不一致,此时需要进行评估,一般保留高版本(前提是能够兼容低版本才行)。否则就可能需要进行代码层面的变更,使用统一的版本来实现。

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

现在就有这么一个机会,我邀请你进入我们的软件测试学习交流群:914172719,备注“csdn”大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

送给大家一句话,共勉:当我们能力不足的时候,首先要做的是内修!当我们能力足够强大的时候,就可以外寻了!

最后也为大家准备了一份配套的学习资源,你能在 公众号:【伤心的辣条】免费获取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

包装成1年工作经验的测试工程师,我给他的面试前的建议如下

“入职一年,那个被高薪挖来的自动化软件测试被劝退了。”

4个月自学软件测试面进阿里!如何从功能测试转成自动化…我经历了什么

6000元报了培训班,3个月后我成功“骗”进了腾讯大厂,月薪15000

测试开发必备技能-Jmeter二次开发相关推荐

  1. Spring+SpringMVC+Mybatis(开发必备技能)01、基础idea环境配置

    Spring+SpringMVC+Mybatis(开发必备技能) 01.基础idea环境配置 环境: 数据库:MySQL 开发工具:IntelliJ IDEA 2020.1.3 x64 框架:SSM( ...

  2. Jmeter二次开发准备-Jmeter插件开发

    Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,因为对java的良好支持,我们可以对其进行做二次的开发. Jmeter二次开发可以直接下载其源码,然 ...

  3. Mac开发必备工具(二)—— iTerm 2

    iTerm 2 简介 iTerm 2 is a terminal emulator for Mac OS X that does amazing things. iTerm 2 有很多能够提升效率的实 ...

  4. Spring+SpringMVC+Mybatis(开发必备技能)04、mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本、配套使用视频,100%运行成功

    Spring+SpringMVC+Mybatis(开发必备技能) 04.mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本.配套使用视频,100%运行成功 百度网 ...

  5. nx二次开发c语言,NX二次开发-UFUN API函数编程基础

    1.NXOpen C 的函数 函数名称的约定 NX Open C 共有2类名称约定:一个是标准的NX Open C 的函数名称约定:另一个是以前版本的原有的名称约定. 1.标准名称约定 [格式]UF_ ...

  6. 房地产—客户关系管理系统CRM|软件开发|软件外包|程序二次开发

    房地产-客户关系管理系统CRM|软件开发|软件外包|程序二次开发 主要:CRM管理,合同管理,绩效管理 1.CRM管理:新增客户,我的资源,公共资源,客户跟进,待审批客户,报备资源,审核释放,预约到访 ...

  7. JMeter二次开发(1)-eclipse环境配置及源码编译

    1.下载src并解压 http://jmeter.apache.org/download_jmeter.cgi 2.获取所需jar包,编译 ant download_jars ant install ...

  8. 一文快速掌握前端开发必备技能

    11 月 2 日,微信正式宣布「为便于开发者灵活配置小程序,小程序现开放内嵌网页能力」.此前,CSDN 也发表<微信小程序内嵌网页能力开放意味着什么?>一文,探索微信此举措的本质,进行一句 ...

  9. 如何学习嵌入式开发必备技能

    嵌入式是当下最流行的开发模式,从今天看,不管是从行业应用,还是智能硬件的爆发,物联网时代的来临,大数据等等嵌入式技术都得到了史无前例的发展.那要如何学习嵌入式开发呢?下面来简单来了解下嵌入式开发的一些 ...

最新文章

  1. Gstreamer中一些gst-launch常用命令
  2. 【HDU 5366】The mook jong 详解
  3. php第一行空白,网页头部多出一行空白问题的解决方法 (PHP文件头BOM问题)
  4. Hemberg-lab单细胞转录组数据分析(三)
  5. VS2010 字体和背景设置
  6. 如何通俗易懂地让女朋友明白什么是语言模型?
  7. ASP.NET MVC- UrlHelper的用法
  8. slick edit
  9. Java中unicode占几个,Java语言使用的是Unicode字符集,每个字符在内存中占8位。()...
  10. 「成人学习」掘金者,从教育走向生活方式
  11. 魏俊妮《如何成为支持业务的HR》课程大纲
  12. 高斯输出文件批量读取能量
  13. Altium Designer的PCB无法显示Designator
  14. [JsHtml]全面清除前端缓存
  15. 淘宝sdk,淘宝api接口
  16. 推荐6本豆瓣高分鸿蒙书,我通宵也要把它们看完
  17. 基于canvas的图片剪裁工具
  18. 第5章 以太网与FlexRay
  19. echarts迁徙效果
  20. mac浏览器打不开html,苹果电脑自带浏览器打不开百度

热门文章

  1. MapReduce过程卡在reduce处的67%
  2. 计算机毕业设计中民宿平台信息管理系统设计
  3. Python基础教程和入门教程
  4. keil5怎么接入汇编_keil中如何让汇编语言生成hex文件
  5. 高考分数出来了,计算机专业选择那个方向更香?
  6. android+ndk+libevent,android ndk 编译 libevent
  7. mysql 查询表的key_MySQL学习笔记-查看表,修改表,删除表
  8. 基于机器视觉技术的瓷砖分色检测系统解析
  9. 机器视觉使用光源的几个选择标准
  10. keepalived+lvs基于http检测