Jmeter作为一款开源的轻量级应用,常被用于性能、接口、自动化等测试中。
它具有安装方便、功能强大、界面操作简单、测试结果可视化、测试脚本无需编程、高扩展等优点,是测试童鞋工作中的常用工具。
本文将梳理Jmeter的原理和结构体系,介绍Jmeter八大元件及其用法。通过理论知识和实际应用举例相结合,带领新手快速入门Jmeter。
Jmeter原理
Jmeter不仅可以作为性能测试工具,还可以作为接口测试工具。作为不同类型的工具,Jmeter的原理也有所不同,具体如下:
作为性能测试工具
Jmeter通过线程组驱动多个线程的方式运行,来模拟真实用户对Web服务器的访问压力。实现过程如下图所示
Jmeter作为Web服务器和浏览器之间的代理网关,能够录制浏览器的请求、响应Web服务器和生成测试脚本。在测试脚本的基础上,Jmeter通过线程组模拟真实用户的访问。
作为接口测试工
Jmeter向服务器提交请求,从服务器取回请求返回的响应结果,实现过程如下图所示:
作为发起请求的客户端,Jmeter是组装请求报文结构的容器,例如:请求行、请求头、请求数据等,并可将响应结果进行可视化展示。
对于接口的复杂逻辑,Jmeter有丰富的元件进行支持,如前/后置处理、响应断言、也可以自行开发插件。
组装请求报文要求对各种协议有一定的了解,例如HTTP(S)、TCP、SOAP、DUBBO等常见协议。
Jmeter结构体系与元件
Jmeter结构体系
把Jmeter的结构体系拆分为三维空间,无论是性能测试还是接口测试,都会按图中的体系结构运行,部分细节有所不同,结构图如下:
各个步骤的具体含义如下:
-
X1~X5:是模拟负载的一个过程,使用这些组件来完成负载的模拟;
-
X1:根据协议,通过“采样器”模拟用户请求(如采样器:HTTP请求),“断言”检查服务器响应是否正确,随后“监听器”收集结果信息;
-
X2:“前置处理器”、“配置元件”和“后置处理器”会完善测试脚本部分,包括参数化、关联等,都是为取样器提供数据支持;
-
X3:“控制器”控制测试脚本业务逻辑,多种控制器组合可灵活控制执行顺序;
-
X4:性能测试中常用“定时器”制作集合点,模拟用户并发;
-
X5:一个“线程组”代表一个用户;性能测试中要模拟负载场景,某些情况下要测试同时提交时是否会出现数据丢失的问题,也需要多个线程同时运行;
-
Y1:此部分负责模拟用户请求;
-
Y2:可以理解为检查点,负责验证结果正确性;
-
Z:负责结果的收集,“监听器”不仅可以放在线程组之内,而且还可以放在线程组之外。
Jmeter八大元件说明
八大元件名称
1、取样器:模拟用户的请求操作,如HTTP请求、WebService请求、Java请求等,添加路径为:【测试计划】→【线程组】→【取样器】。
2、断言:验证结果的正确性,如响应断言,添加路径为:【测试计划】→【断言】。
3、监听器:收集测试结果信息,如查看结果树、聚合报告,添加路径为:【测试计划】→【监听器】。
4、前置处理器:为请求发送前的环境及参数做准备,添加路径为:【测试计划】→【前置处理器】。
5、配置元件:为取样器提供预备数据。由取样器发出请求,如CSV(文件中读取测试数据)、函数助手(提供了众多的函数动态生成数据)、HTTP请求默认值(为影响范围内的元件提供默认值)。
另外,配置元件可以影响其范围内的所有元件,添加路径为:【测试计划】→【配置元件】。
6、后置处理器:处理服务器的返回结果,比较常用的是正则表达式提取器(用于从response中获取pageId),添加路径为:【测试计划】→【后置处理器】。
注:上述【前置处理器】、【配置元件】、【后置处理器】都是为取样器提供数据支持的。
(7)逻辑控制器:控制多个请求发送的循环次数及顺序等,仅对其子节点中的取样器生效。登录一次邮箱,即可查看多封邮件,仅一次控制器即可实现一次登录的场景;多次提交单据,可用循环控制器实现该场景。
逻辑控制器可以任意组合来实现不同需求,添加路径为:【测试计划】→【线程组】→【逻辑控制器】。
(8)定时器:Jmeter的请求是无延时的,加入定时器可控制多个请求发送的时间频次,常用于模拟用户思考、模拟请求同一时刻发送的场景。
需要注意的是,定时器对其作用范围内的每一个取样器有效,在作用范围内的每一个取样器之前执行,添加路径为:【测试计划】→【线程组】→【定时器】。
Jmeter测试计划要素
如果想要实施一个测试计划,需要注意以下要素:
要素一:脚本中只能存在一个测试计划。
要素二:测试计划中至少有一个线程组。线程组是任何测试计划的起点,所有控制器和取样器必须在线程组下。
要素三:至少有一个取样器(测试目的就是要模拟用户请求,没有取样脚本则毫无意义)。
要素四:至少有一个监听器(收集测试结果信息,从中分析执行结果和性能)。
注:其它元件都是为要素服务的。线程组中的取样器的执行顺序默认是从上到下执行。交替控制器、随机控制器、随机顺序控制器和循环控制器等可以改变取样器的执行顺序。
应用举例
此处以利用Jmeter实现【登录】和【提交单据】两个目的为例,为大家简单介绍Jmeter的应用方法,具体步骤如下图:
1、登录环节运用到"JSR233 PreProcessor"对登录密码处理,"正则表达式提取器"对取样器返回的值做处理,把取到的值作为下一个请求的参数;
2、提交单据环节运用到“简单控制器”和“循环控制器",循环提单次数由“用户定义的变量number控制”,提单的单据编码由“随机变量”控制;
3、配置元件中的“HTTP Cookie管理器”、“HTTP信息头管理器”、“HTTP请求默认值”定义了线程中所有HTTP请求(取样器的一种)的通用配置,用以减少重复工作;
4、监听器中的“断言结果”、“查看结果树”、“聚合报告”可以查看脚本执行结果,并根据结果进行数据分析。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!