JMeter原生支持多种不同的取样器(HTTP、TCP、JDBC、JMS等),每一种不同类型的取样器可以向服务器发送不同协议类型的请求。除了开箱即用的协议支持以外,JMeter还支持用户自己开发新协议的测试插件来进行扩展。

用户开发定制化的取样器插件,首先需要开发取样器的图形界面,扩展实现JMeter的AbstractSamplerGui类;然后开发取样器的处理逻辑类,扩展实现JMeter的AbstractSampler类,实现协议交互,发送请求报文并处理返回的响应结果;最后将开发调试好的代码编译,与描述了依赖关系的pom.xml一起打成JAR包,拷贝到JMeter的libext目录下,其它相关依赖JAR包拷贝到JMeter的lib目录下。

重启JMeter后,选择用户开发好的定制化取样器测试插件,输入相关参数发起请求,即可执行扩展后的定制化测试插件支持的测试。下面详细说明一些具体定制化测试插件的设计思路和实现过程。

1、定制化的TCP取样器定制化的TCP取样器(发送文本字符报文) 

JMeter原生支持基于TCP协议的性能测试,提供了TCP取样器,通常情况下可以满足大多数基于TCP协议的测试需求。但在有些TCP协议的特定测试场景中无法完全满足实际的测试需求,比如服务器端返回的报文并没有一个明确的终止符(在TCP取样器中设定的"End of line(EOL) byte value"),而是返回一个定长的字节流报文,再比如要求发送的请求报文中含有中文,需要对请求报文进行特定的编码,JMeter原生TCP取样器需要在jmeter.properties文件中的tcp.charset属性设置具体值重启JMeter后生效,并不十分便捷,没有提供图形界面的tcp.charset参数设置项。

通过研读分析JMeter的源代码,开发实现定制化的TCP取样器插件,主要需要扩展实现org.apache.jmeter.config.gui.AbstractConfigGui抽象类、org.apache.jmeter.samplers.gui.AbstractSamplerGui抽象类创建定制化的TCP取样器界面,并且扩展实现org.apache.jmeter.samplers.AbstractSampler抽象类完成定制化的TCP取样器发送请求和接收响应信息的处理逻辑,最后扩展org.apache.jmeter.protocol.tcp.sampler.AbstractTCPClient类实现读取定长返回报文的处理逻辑。

扩展了AbstractConfigGui抽象类的具体类实现了定制化的TCP取样器配置界面。扩展了AbstractSamplerGui抽象类的具体类实现了定制化的TCP取样器界面。这两个GUI类都重写了图1中的前三个方法,实现了图1中的后三个方法。所设计的定制化取样器GUI的init方法实现详见图2。扩展了AbstractTCPClient类的TCPClientImpl2类中实现读取定长返回报文处理逻辑的read方法详见图3。

图1 GUI类需要实现的方法名

图2 init方法的实现

图3 read方法的实现

定制化的TCP取样器界面(见图4)在"End of line(EOL) byte value"之后添加了"Length of Receive"和"Charset"2个参数设置项。

如果"End of line(EOL) byte value"和"Length of Receive"同时设置的话,定制化的TCP取样器会优先使用"End of line(EOL) byte value"的设置值进行判断,"Length of Receive"的设置值会忽略。

如果只设置了"Length of Receive",会返回指定长度的返回报文,如果指定的长度小于实际的字符流长度,超出指定长度的字符会被截掉。"Charset"设置值如果指定了具体的字符集,将按照指定的字符集编码发送请求报文,如果没有指定,按照操作系统默认字符集编码发送请求报文。

图4 定制化的TCP取样器界面(发送文本字符报文)

2、定制化的TCP取样器

定制化的TCP取样器(发送16进制字符报文)

在实际性能测试项目中,有时会遇到基于TCP协议的8583报文格式(银联基于ISO报文国际标准包格式的通讯协议,用于金融系统之间的报文交换,例如POS交易、ATM交易等)的测试场景。

在这样的测试场景下,JMeter的原生TCP取样器除了服务器返回报文长度判断问题以外,还存在由于返回的8583报文中可能存在多个3030,导致交易结果返回码(3030)校验判断不便的问题。

通过分析,开发实现定制化的TCP取样器(发送16进制字符报文)插件,除了实现AbstractConfigGui抽象类和AbstractSamplerGui抽象类创建定制化的TCP取样器(发送16进制字符报文)界面之外,还需要在扩展实现AbstractSampler抽象类中实现自动校验指定位返回报文内容判断的处理逻辑(见图5)。

图5 setupSampleResult2方法的实现

定制化的TCP取样器(发送16进制字符报文)界面(见图6)在"End of line(EOL) byte value"之后除了添加"Length of Receive"参数设置项以外,增加了"Auto Assertion"勾选项、"StartPosition"和"FindValue"参数设置项。

如果勾选了"Auto Assertion"自动校验选项,并设置了"StartPosition"和"FindValue"参数,不用手工添加新的响应断言就可以自动对返回报文指定起始位的返回码进行校验判断,判断返回码是否与预期一致,一致的话交易成功,否则交易失败。

图6 定制化的TCP取样器界面(发送16进制字符报文)

3、定制化的SSH取样器和SFTP取样器

测试人员在实际性能测试过程中,经常会登录到远程Linux服务器上进行一系列的操作(例如执行nmon命令,下载nmon监控结果文件等)。有些nmon操作命令基本上是固定的,但每次登录到服务器上重复操作会显得较为繁琐。尤其是当监控的服务器数量较多时,这些重复操作就显得十分费时。

开发定制化的SSH取样器插件和SFTP取样器插件,利用JMeter支持并发发送请求,编写一个JMeter自动化监控脚本,用来代替手工执行nmon命令可以很大程度上提高监控操作效率。

开发实现定制化的SSH取样器插件和SFTP取样器插件,除了实现AbstractConfigGui抽象类和AbstractSamplerGui抽象类创建定制化的SSH取样器界面和SFTP取样器界面之外,还需要扩展实现AbstractSampler抽象类负责命令执行的处理逻辑,而处理逻辑的实现依赖于Jsch。

Jsch是一种支持SSH2协议的纯Java实现,可以满足通过SSH2协议连接到服务器并执行命令,进而执行文件传输和文件下载。实现了SSH取样器处理逻辑的类中编写了doCommand方法(见图7)负责处理命令操作。实现了SFTP取样器处理逻辑的类中编写了doFileTransfer方法(见图8)负责处理文件上传下载操作。

图7 doCommand方法的实现

图8 doFileTransfer方法的实现

开发实现了定制化的SSH取样器和SFTP取样器之后,可以编写一个JMeter自动化监控脚本来代替手工执行nmon命令操作。执行JMeter脚本就可以自动实现在设置的监控时段一次性的将多个服务器的nmon监控结果文件下载到本地。

在这个JMeter脚本中,配置项在用户定义变量中设置(见图9),将监控的服务器地址、操作系统用户、密码,以及nmon文件目录等参数值放到参数文件中,通过CSV数据文件设置定义变量(见图10),将对应的nmon命令通过SSH取样器(见图11)执行,对应的下载操作通过SFTP取样器(见图11)执行。

图9 用户定义变量的设置

图10 CSV数据文件设置

图11 SSH取样器界面和SFTP取样器界面

4、总结

当前,上述基于JMeter开发的定制化测试插件已经在实际性能测试项目中实践应用,解决了一些特定场景下的测试需求。随着JMeter在性能测试工作中的广泛应用,针对一些特色测试场景和特定测试需求,测试人员可以扩展开发自己的测试插件并在一定范围内共享使用,更好的提高性能测试工作效率。

请关注+私信回复:“学习”就可以免费拿到软件测试学习资料

nmon结果分析工具_Jmeter测试工具实践:如何为Jmeter开发测试插件定制专属取样器?...相关推荐

  1. 一款很好用的,免费的外网映射工具Ngrok 国内版,可以满足基本的开发测试需求

    ●windows用户: 1,下载windows版本的客户端,解压到你喜欢的目录 2,在命令行下进入到path/to/windows_386/下 3,执行 ngrok -config=ngrok.cfg ...

  2. android 蓝牙速率测试软件,安卓蓝牙4.0开发测试 一个测试 APP - 下载 - 搜珍网

    压缩包 : MyBleTestDemo.rar 列表 MyBleTestDemo/.classpath MyBleTestDemo/.project MyBleTestDemo/.settings/o ...

  3. python接口压测1000并发_测试工具:黑羽压测

    前言 很多朋友对性能测试有种深深的误解:认为 只要学会 使用一款 性能测试工具,点点界面,配配数据,就能做好性能测试了. 不是这样的!! 性能测试 通常 要真正做好 很不容易. 它需要测试人员: 有产 ...

  4. Parasoft软件测试实践:什么是左移测试?

    Parasoft是一家专门提供软件测试解决方案的公司,解决方案几乎涵盖了软件开发周期从开始到结束所有的阶段.在工作中,您越早发现代码中的问题,他们的影响就越小,处理的成本也越低.在本文中,我们将探讨左 ...

  5. 使用badboy录制脚本 结合Jmeter一起测试。

    1.badboy介绍 Badboy是一款不错的Web自动化测试工具,如果你将它用于非商业用途,或者用于商业用途安装Badboy 的机器数量不超过5台,你是不需要为它支付任何费用的.Badboy提供了将 ...

  6. Jmeter压力测试 Web网页数据抓取-【教学篇】

    Jmeter快速使用 特此郑重声明!该文章是原创作品,小编编写实属不易 ,转载小伙伴请注明出处!谢谢 概述 Apache JMeter Apache组织开发的压力测试工具.目前通过HTTP和FTP服务 ...

  7. Jmeter远程测试

    11.3 详解JMeter远程测试(1) 2012-04-09 09:14 温素剑 电子工业出版社 字号:T | T 综合评级: 想读(7)  在读(2)  已读(0)   品书斋鉴(0)   已有9 ...

  8. CIO访谈实录丨渤海人寿携手SmartX超融合大幅提升开发测试效率

    客户访谈:金融/保险业 新金融科技时代,数据的可靠性及平台计算性能是核心要义:新业务上线拓展的迅捷性,更是激烈竞争中重要的取胜之匙.在创新技术驱动业务发展理念的指引下,保险行业新兴寿险企业渤海人寿选择 ...

  9. nmon结果分析工具_使用nmon analyzer 分析指标

    监控结果分析 使用nmon analyser对nmon文件进行解析,生成带图表信息的xlsx格式文件. 下载地址:http://nmon.sourceforge.net/pmwiki.php?n=Si ...

最新文章

  1. MySQL查看所有视图的命令
  2. ant design select 坑总结
  3. System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
  4. 对于并列的TextField实现同步控制
  5. Activity的launchMode启动模式 day7
  6. python按照区间长度给定不同数量的随机数
  7. arm 饱和指令_ARM aarch64汇编学习笔记(九):使用Neon指令(一)
  8. 我又发现一个直接就能安装中文小红帽的方法
  9. 获得N^2个往返接力数字表格的算法
  10. tomcat8开启远程debug
  11. [转载]如何破解Excel VBA密码
  12. html5播放flv
  13. color ui的使用
  14. 软件开发常用英语单词 - 中、英、英文缩写对照
  15. latex中页眉怎么去掉_latex 页眉页脚设置
  16. 【渝粤教育】电大中专中药调剂作业 题库
  17. 大数据就业前景分析-好程序员
  18. SharePoint 2010管理中心创建网站集
  19. 云南2018年GDP增长8.9% 较2017年增长速度有所下降
  20. 一次网络请求是如何实现的

热门文章

  1. threejs 热力图做成材质_冷轧钢与热轧钢有什么区别?
  2. rpa打开浏览器_rpa.ie
  3. linux和windows图形运算效率,linux和windows下UDP发送效率的有趣比较
  4. 深入理解空指针(C++)
  5. Qt connect()的第五种重载[=](){}
  6. 一起来梳理JVM知识点
  7. HDU 1874 畅通工程续 最短路
  8. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
  9. hdu2847(2009多校第四场) 01串添加最少01使被k整除(暴力)
  10. linux下更新JDK版本