概述
作为一名后端开发人员,熟练掌握一款性能测试工具非常有必要,这样有利于在技术选型时做一些参考。
常见的性能测试工具有:ab,JMeter,LoadRunner,他们都有各自的特点和应用场景:
ab是Apache的一个工具组件,专门用于HTTP服务器测试。
JMeter是一款遵循Apache开源协议的性能测试工具,除了可以用于HTTP服务器性能测试之外,还可以用于FTP,JDBC,LDAP测试等。
LoadRunner是一款商业化性能测试工具,使用相对复杂一些,但是功能非常强大。
下载&安装JMeter是基于Java开发的跨平台性能测试工具,官方提供了2种压缩格式的二进制包(zip和tgz),根据实际情况下载对应文件即可。
安装也非常简单,直接将压缩包解压到指定目录即可,如下示例:
添加JMeter到环境变量PATH中,如下示例:
$ export JMETER_HOME=~/opt/apache-jmeter-5.2.1 $ export PATH=$PATH:$JMETER_HOME/bin配置好JMeter环境变量之后,在命令行终端中执行命令jmeter即可启动JMeter图形化界面。
实战JMetetr使用JMeter分为3个步骤:
准备测试计划
执行性能测试
分析测试报告
测试计划简述所谓测试计划就是一系列测试配置信息的集合,在JMeter中可以将这些配置信息保存为一个脚本文件(后缀名为“.jmx”)。
测试计划中涉及许多配置对象,详见:Elements of a Test Plan,理解这些配置对象是编写JMeter测试计划的前提,各个配置对象的名称及含义解释如下:
Test Plan:测试计划,组织所有配置信息,是其他配置对象的根
Thread Group:线程组,用于并发参数设置
Controller:控制器,驱动着整个测试计划的执行
Sampler:采样器,用于配置指定类型的请求
Assertion:断言,用于对请求结果进行验证
Timer:定时器,可用于对并发进行控制(例如:设置请求结束后是否延迟再次发送请求)
Configuration Element:配置元素,如:HTTP请求默认值(HTTP Request Defaults),随机变量(Random Variable)等等
Pre-Processor Element:请求执行前置处理器
Post-Processor Element:请求执行后置处理器
Listener:监听器,通常用于展示测试结果,也可以用于对响应数据进行处理(比如:将响应结果写入到文件)
Test Fragment:这个元素目前没有实际用途
Non-Test Element:非测试元素,用于设置一些其他参数,不常用
一般来讲,上述对象之间具备嵌套关系,描述如下:
(1)一个测试脚本中只有一个Test Plan对象,并且作为其他对象的根。
(2)在Test Plan下可以有一个或者多个Thread Group(通常只需要有一个即可),可以有一个或者多个Listener,如:View Results Tree(以树型结构展示),还可以配置Assertion,Timer,Configuration Element,Pre Processor,Post Processor,Test Fragment,Non-Test Element。
(3)在Thread Group下可以配置Controller,Sampler,Assertion,Timer,Configuration Element,Pre-Processor,Post-Processor,Test Fragment,Listener。
(4)Controller下可以配置Controller,Sampler,Assertion,Timer,Configuration Element,Pre-Processor,Post-Processor,Listener。
(5)在Sampler下可以配置Assertion,Timer,Configuration Element,Pre-Processor,Post-Processor,Listener。
用一个树型结构来描述各对象之间的嵌套关系如下:
Test Plan
Thread Group
Controller
Controller
Sampler
Assertion
Timer
Configuration Element
Pre-Processor
Post-Processor
Listener
Assertion
Timer
Configuration Element
Pre-Processor
Post-Processor
Listener
Sampler
Assertion
Timer
Configuration Element
Pre-Processor
Post-Processor
Test Fragment
Listener
Assertion
Timer
Configuration Element
Pre Processor
Post Processor
Listener
Test Fragment
Non-Test Element
如上所述,只有Test Plan,Thread Group,Controller和Sampler可以嵌套其他对象,而Assertion,Timer,Configuration Element,Pre-Processor,Post-Processor,Listener,Test Fragment和Non-Test Element不能再嵌套子对象。
实际上,在JMeter图形化界面中编辑测试计划时,指定对象下是否可以再嵌套子对象在操作菜单中就做了限制。
如下图所示是一个在实际应用中可能会涉及到的对象嵌套关系配置示例:
并且对象在运行时的执行顺序如下:
Configuration elements
Pre-Processors
Timers
Sampler
Post-Processors (unless SampleResult is null)
Assertions (unless SampleResult is null)
Listeners (unless SampleResult is null)