性能测试——Jmeter基本用法概述
Jmeter基本用法概述
Jmeter:Apache组织开发的基于Java的性能测试工具
一、Jmeter安装与配置
1、下载
官方下载地址:https://jmeter.apache.org/download_jmeter.cgi
下载完解压即可
2、环境变量
配置完JDK无需额外配置
3、启动验证
进入bin目录,找到jmeter.bat并运行
能正常显示以下软件界面即安装成功
注意:关闭弹出的命令行界面同时会关闭jmeter
二、Jmeter文件目录介绍(*表示常用)
1、/bin目录——常用文件介绍;包含启动、配置等相关命令
examples:目录下包含Jmeter使用实例
ApacheJMeter.jar:Jmeter源码包
jmeter.bat:windows下启动文件*
jmeter.sh:Linux下启动文件*
jmeter.log:Jmeter运行日志文件*
log4j.conf:Jmeter日志配置管理
jmeter.properties:Jmeter配置文件*
jmeter-server.bat:windows下启动负载生成器服务文件*
jmeter-server:Linux下启动负载生成器服务文件*
shutdown.cmd:windows下jmeter关闭文件
stoptest.cmd:windows下jmeter测试停止文件
2、/docs目录——Jmeter帮助文档(官方本地文档目录;包含有框架类、无框架类、常量值、不建议使用列表、帮助文档、索引、框架综述等等)
/api/index.html:api接口文档*
3、/extras目录——辅助库;提供了对Ant的支持文件,可也用于持续集成
4、/lib目录——核心库;存放Jmeter依赖的jar包,同时安装插件也放于此目录
5、/licenses目录——软件许可文件,不用管
6、/printable_docs目录——可打印版本文档目录
/usermanual/get-started.html:Jmeter入门文档
/usermanual/index.html:Jmeter用户手册,非常详细*
/usermanual/component_reference.html:常用到的核心元件帮助文档*
7、LICENSE——许可说明
8、NOTICE——简单信息说明
9、README.md——官方基本介绍
三、Jmeter元件
组件:实现某个功能的基本单位(类似于方法)
元件:多个类似功能组件的容器(类似于类)
1、常见类型
- 取样器:作用于线程组,用于发送请求
- 逻辑控制器:控制语句执行顺序,类似python中的逻辑控制语句
- 前置处理器:请求发送前执行,类似于setup
- 后置处理器:请求后执行,类似于teardown
- 断言:对响应结果进行匹配,类似于assert
- 定时器:等待一定时间,类似于sleep()
- 测试片段:封装的一段代码,供脚本调用,类似于工具类
- 配置元件:对参数进行赋值,类似于参数化
- 监听器:查看脚本运行结果,类似于python调试窗口的结果打印
2、作用域
根据测试计划中的树形结构确定,子节点作用于父节点,核心元件是取样器,对于父节点非取样器的组件,对父节点下的取样器都起作用
3、线程组
模拟多人操作,相当于test suite,线程数表示模拟的用户数
在测试计划下勾选独立运行每个线程组后将串行执行,否则默认并行执行
分类:
- 线程组
- setup线程组:在所有线程组之前执行
- teardown线程组:在所有线程组之后执行
属性:
- 线程数:模拟用户数量进行操作
- ramp-up time:模拟操作全部执行耗费的时间
- 循环次数:操作重复执行的次数,其中永远选择框通常与调度器和延迟创建线程知道需要配合使用
- 调度器:对循环进行控制,其中持续时间通常与永远循环配合使用,延迟时间表示延后指定时间再执行
- 延迟创建线程直到需要:默认一次性为线程组分配资源,勾选后仅在创建线程时分配资源
4、添加自定义变量
- 通过线程组-添加-配置元件-用户定义的变量(作用域:线程组)
- 通过测试计划添加(作用域:全局)
5、为不同用户添加不同参数
- 方式一:线程组-添加-前置处理器-用户参数
其中:变量表示参数的个数,用户表示参数组的个数
- 方式二:线程组-添加-配置元件-csv数据文件设置
其中:除忽略首行改为True外其余保持默认
变量名称设置后可以在测试计划的各种节点进行引用
- 方式三:工具栏函数助手对话框-counter-生成
其中:生成函数后直接将函数做为变量值赋给请求参数
四、Jmeter断言
1、响应断言
方式:测试计划-线程组-HTTP请求-添加-响应断言
2、json断言
方式:测试计划-线程组-HTTP请求-添加-JSON断言
3、断言持续时间
对从发出请求到接受响应所需要的时间进行断言
方式:测试计划-线程组-HTTP请求-添加-断言持续时间
五、Jmeter关联
当请求之间存在依赖关系,如一个请求的入参是另一个请求的响应,这时候就需要用到关联处理。
常用的关联方法:
- 正则表达式提取器
- XPath提取器
- JSON提取器
1、正则表达式提取器
看个例子:
<title>.*?<title>
其中:
- .:是通配符,代表任何字符(除换行回车)
- *:代表前面的字符出现一次或多次
- ?:非贪婪匹配,找到左边界后,只要有匹配的右边界就停止继续查找;再次查找左右边界
- .*:从左边界开始到最后一个右边界为止,中间的所有字符都会被匹配
Jmeter中的正则表达式提取器:
方式:测试计划-线程组-HTTP请求-添加-后置处理器-正则表达式处理器
2、XPath提取器
适用于响应体格式为HTML的请求
方式:测试计划-线程组-HTTP请求-添加-后置处理器-XPath提取器
3、Json提取器
适用于响应体格式为Json的请求
方式:测试计划-线程组-HTTP请求-添加-后置处理器-Json提取器
4、跨线程组关联
当有依赖关系的不同请求分别位于不同线程组时,不能用提取器来传递参数,而要通过Jmeter属性来传递
六、Jmeter脚本录制
方式:
- 测试计划-添加-线程组
- 测试计划-添加-非测试元件-HTTP代理服务器,更改目标控制器的值为测试计划>线程组
- 测试计划-添加-配置元件-HTTP Cookie管理器(无需设置)
- 调整本机的代理服务器地址和端口为接口地址
- 开始录制
七、Jmeter逻辑控制器
用于控制脚本执行逻辑
1、IF逻辑控制器
方式:测试计划-线程组-添加-逻辑控制器-如果(if)控制器
2、循环控制器
方式:测试计划-线程组-添加-逻辑控制器-循环控制器
3、ForEach控制器
方式:
- 新建线程组并添加HTTP请求
- 测试计划-线程组-HTTP请求-添加-后置处理器-正则表达式处理器(任意处理器均可)
- 再次新建线程组并添加HTTP请求(用于调用ForEach控制器返回的参数)
- 添加ForEach控制器,方式:测试计划-线程组-添加-逻辑控制器-ForEach控制器(用于接收上一个请求后置处理器返回的参数)
八、Jmeter定时器
1、同步定时器(Synchronizing Timer)
SyncTimer的作用是阻塞线程,直到阻塞到指定的N个线程后再释放它们,用于执行大数据量的并发请求
方式:测试计划-线程组-HTTP请求-添加-定时器-Synchronizing Timer
2、常数吞吐定时器(Constant Throughput Timer)
作用:让Jmeter按指定的吞吐量(以每分钟样本数为单位)执行。吞吐量的计算范围可指定为当前线程、线程组和整个测试计划
九、Jmeter分布式测试
当性能测试需要模拟的负载规模过大,超出了单台测试机的硬件性能时,使用多台测试机联合模拟负载,这就是分布式测试。
主机(Master)——代理机(Slave,可以有多个)——被测系统(Target)
其中主机负责分发任务并汇总响应结果,代理机负责执行主机分发的任务并对响应进行处理
注意事项:
- 关闭测试机上的防火墙
- 所有主机、测试机和被测系统应当位于同一局域网内
- 主机和测试机上Jmeter和JDK的版本保持一致
- 关闭Jmeter中的RMI SSL开关
十、Jmeter监听器——报告
1、聚合报告
重点关心的性能指标
- 响应时间:观察最大最小值的波动范围
- 波动大:以90%的响应时间做为最终性能响应时间结果
- 波动小:以平均响应时间作为最终性能响应时间结果
- 错误率
- 吞吐量
2、HTML报告
生成HTML格式的Jmeter报告
方式:
- 进入Jmeter的/bin目录
- 执行命令:
jmeter -n -t [jmx file] -l [result file] -e -o [html report folder]