测试开发必备技能-Jmeter二次开发
为什么需要做二次开发?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二次开发相关推荐
- Spring+SpringMVC+Mybatis(开发必备技能)01、基础idea环境配置
Spring+SpringMVC+Mybatis(开发必备技能) 01.基础idea环境配置 环境: 数据库:MySQL 开发工具:IntelliJ IDEA 2020.1.3 x64 框架:SSM( ...
- Jmeter二次开发准备-Jmeter插件开发
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,因为对java的良好支持,我们可以对其进行做二次的开发. Jmeter二次开发可以直接下载其源码,然 ...
- Mac开发必备工具(二)—— iTerm 2
iTerm 2 简介 iTerm 2 is a terminal emulator for Mac OS X that does amazing things. iTerm 2 有很多能够提升效率的实 ...
- Spring+SpringMVC+Mybatis(开发必备技能)04、mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本、配套使用视频,100%运行成功
Spring+SpringMVC+Mybatis(开发必备技能) 04.mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本.配套使用视频,100%运行成功 百度网 ...
- nx二次开发c语言,NX二次开发-UFUN API函数编程基础
1.NXOpen C 的函数 函数名称的约定 NX Open C 共有2类名称约定:一个是标准的NX Open C 的函数名称约定:另一个是以前版本的原有的名称约定. 1.标准名称约定 [格式]UF_ ...
- 房地产—客户关系管理系统CRM|软件开发|软件外包|程序二次开发
房地产-客户关系管理系统CRM|软件开发|软件外包|程序二次开发 主要:CRM管理,合同管理,绩效管理 1.CRM管理:新增客户,我的资源,公共资源,客户跟进,待审批客户,报备资源,审核释放,预约到访 ...
- JMeter二次开发(1)-eclipse环境配置及源码编译
1.下载src并解压 http://jmeter.apache.org/download_jmeter.cgi 2.获取所需jar包,编译 ant download_jars ant install ...
- 一文快速掌握前端开发必备技能
11 月 2 日,微信正式宣布「为便于开发者灵活配置小程序,小程序现开放内嵌网页能力」.此前,CSDN 也发表<微信小程序内嵌网页能力开放意味着什么?>一文,探索微信此举措的本质,进行一句 ...
- 如何学习嵌入式开发必备技能
嵌入式是当下最流行的开发模式,从今天看,不管是从行业应用,还是智能硬件的爆发,物联网时代的来临,大数据等等嵌入式技术都得到了史无前例的发展.那要如何学习嵌入式开发呢?下面来简单来了解下嵌入式开发的一些 ...
最新文章
- Gstreamer中一些gst-launch常用命令
- 【HDU 5366】The mook jong 详解
- php第一行空白,网页头部多出一行空白问题的解决方法 (PHP文件头BOM问题)
- Hemberg-lab单细胞转录组数据分析(三)
- VS2010 字体和背景设置
- 如何通俗易懂地让女朋友明白什么是语言模型?
- ASP.NET MVC- UrlHelper的用法
- slick edit
- Java中unicode占几个,Java语言使用的是Unicode字符集,每个字符在内存中占8位。()...
- 「成人学习」掘金者,从教育走向生活方式
- 魏俊妮《如何成为支持业务的HR》课程大纲
- 高斯输出文件批量读取能量
- Altium Designer的PCB无法显示Designator
- [JsHtml]全面清除前端缓存
- 淘宝sdk,淘宝api接口
- 推荐6本豆瓣高分鸿蒙书,我通宵也要把它们看完
- 基于canvas的图片剪裁工具
- 第5章 以太网与FlexRay
- echarts迁徙效果
- mac浏览器打不开html,苹果电脑自带浏览器打不开百度