性能测试指标
并发数: web服务器在一段时间处理浏览器请求而建立的http请求数或线程数;
吞吐量: 单位时间内处理的并发数;
响应时间: 对web系统而言,客户端请求发出到服务器,处理请求返回返回到客户端,页面渲染出来的时间.
事务:事务代表一个完整的功能及流程,一个接口,或者多个接口都可以是事务,具体看测试时咋定义设置的.
TPS:每秒处理的事务数,用于衡量系统在一定时间内能够处理的事务数,
QPS:每秒查询数,若一个事务中只有一个接口且是查询接口,则QPS=TPS
Jmeter
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,基于Java多线程框架,模拟多用户
并发请求,并收集分析被测服务的 性能数据.对软件进行性能测试.
下载
官网Apache JMeter - Download Apache JMeter
环境配置
下载后打开Jmeter文件夹, 将文件bin路径复制,添加到环境变量的PATH中. 打开cmd,输入Jmeter
文本设置成中文
[你的JMeter安装目录]/bin/jmeter.properties
#language=en
-> language=zh_CN
配置页面的颜色: 点击选项 中的 外观
原理
一个 JMeter 测试计划就是在定义:有多少个用户(线程组),在什么环境下(配置元件),按照什么逻辑(逻辑控制器),执行哪些操作(采样器),并对结果做何处理(监听器)。
基本使用流程
1.右击测试计划,点击添加线程组;
2.在线程组下添加 HTTP 取样器
3.配置HTTP请求信息
4.添加查看结果树的监听器
5.点击启动,查看测试结果
组件
线程组
线程数:模拟用户数量,一个线程相当于一个用户;
Ramp-Up时间: 所有线程的启动时间,和线程数决定并发增长的速率;
循环次数: 线程启动后执行测试脚本的次数,与线程数共同决定了总迭代次数, 勾选永远的话需要搭配调度器使用,勾选调度器,设置持续时间(线程执行测试脚本的时间),启动延迟(延迟多长时间启动线程);如果没有配置循环次数则系统默认勾选永远.
调度器模式下的时间线: 启动延迟 - Ramp-Up(线程启动) - 持续时间 -测试结束
HTTP取样器
构造http请求
查看结果树
查看请求,响应的信息
HTTP Cookie管理器
跟Web浏览器的一样可以存储发送Cookie .如果http请求,响应中有Cookie,则HTTP Cookie管理器会自动该Cookie,用于将来对该特点网站的所以请求.每个Jmeter线程都有自己的Cookie存储区,都有自己的会话.可以通过查看结果树监听器查看.
缓存配置可以选择standard也可以选择compatibility(兼容的) ,也可以手动添加一些Cookie.
添加了Cookie管理器后,会自动存储和发送Cookie.
HTTP默认请求值
协议,ip,端口号等信息所有请求都一样,所以就单独配置,HTTP取样器就不用配置了
HTTP信息头管理器
给HTTP请求头配置默认的数据
作用域:
JMeter元件遵循层级关系,信息头管理器会对其所在层级及以下的所有子元件生效;
放在线程组级别:对该线程组下的所有HTTP请求生效;
放在某个HTTP请求采样器级别:只对该特定请求生效;
放在测试计划级别:对整个测试计划中的所有HTTP请求生效;
如果存在多个信息头管理器,JMeter会合并它们的内容。如果定义了相同的头(如两个Content-Type
),则离采样器更近的那个会覆盖上层的.
常见请求头:
指定内容类型(Content-Type):极其重要的一个头。它告诉服务器请求体的格式是什么。如:
如果
Content-Type
设置错误,服务器将无法正确解析你提交的数据,导致请求失败。Content-Type: application/json
-> 请求体是JSON格式。Content-Type: application/x-www-form-urlencoded
-> 请求体是表单格式(key1=value1&key2=value2)。Content-Type: multipart/form-data
-> 用于文件上传。
处理会话(Session)和Cookie:虽然Cookie通常由 HTTP Cookie 管理器 自动处理,但有时也需要手动设置某些头。如:
Cookie: JSESSIONID=ABCDEF123456789;
。控制缓存行为:可以模拟浏览器缓存行为,例如
Cache-Control: no-cache
告诉服务器不要返回缓存的资源。
JSON提取器
接口响应成功后,对接口返回值的对应字段进行提取保存,用于其他接口的参数配置
针对某个http请求接口添加JSON提取器
博客首页的响应数据: 要获取第二条数据的blogId
[
{
"postTime": "2024-04-18 05:20:16",
"title": "ddddd",
"blogId": 13,
"userId": 3,
"content": "# 在这⾥写下⼀篇博客\r\nd },
{
"postTime": "2022-10-22 02:38:21",
"title": "同学,请问你今天学习了吗",
"blogId": 12,
"userId": 3,
"content": "今天是2022年10⽉22⽇17:42分,为了能够早⽇将最新版本的测试课件呈现
给同学们,我已经开始奋..."
}
]
2.添加JSON配置
从JSON提取数据,构造JSON Path的语法
参考文档:
3.给HTTP请求配置JSON提取的参数: 用${ 参数名}
用户定义的变量
自己定义一些变量,可以在多个脚本中引用.在这里进行统一管理修改.
在HTTP请求里配置自定义变量 用${ 变量名}
JSON断言
当发送http请求过多,每个http请求返回的响应结果是否符合预期,我们不能全部打开查看结果树进行检查,效率太低. 可以配置JSON断言,让系统进行判断响应结果是否正确.
CSV 数据文件设置
1.添加CSV Data Set Config
2.编辑Excel表,里面添加需要的数据,保存在测试脚本同一个文件夹里(方便找到)
3.配置请求接口的参数: ${参数名}
4.配置CSV
5.查看结果树
同步定时器
Jmeter同步定时器的作用是模拟多用户并发访问的场景,确保多个线程同时执行某个操作,达到真正的并发效果 .
当多个线程同时启动,不一定是同时发送请求,执行任务,因为有的线程启动得快有的启动得慢, 这样无法达到真正的并发效果,定时器的作用可以理解为一个集合点,当指定数量线程都准备好后,再一起释放,瞬间对 服务器产生很大的压力,模拟秒杀,抢购这种场景. 虽然请求同时发送,但不能确保请求同时到达服务器,所以只是尽量真实的模拟并发场景.
1.模拟用户组数量必须要小于总线程数,总线程数最好是模拟数的整数倍;
2.如果剩下的总线程数达不到模拟组的数量,则等待超时时间过了,就将剩下的全部释放;
3.如果总线程数小于模拟线程数,也可以设置循环次数为永远,用调度器配置循环时间,这样已经被释放的线程不会休眠,会继续充当模拟线程被集中释放.
事务控制器
如果不添加事务控制器,那一个接口为一个事务,添加了的话,可以将多个请求看做一个事务.
在进行页面性能测试或API性能测试时,如提交订单的过程中,将调用的多个接口视为同一个事务进行性能测试,能得到更接近真实场景的性能测试结果.


安装插件
在实际压测过程中,线程数通常是逐步增加,而不是一上来就配置让程序到达极限的线程数. 为了模拟这个线程数逐步增加的过程,需要安装新的插件来实现.
点击下载,并将文件移到lib/ext文件目录下,重启Jmeter
点击插件管理的小蝴蝶
安装监听器插件,线程组插件
搜索这两个安装
安装好后,点击Stepping Thread Group可以实现梯度压测
自定义数据
生成报告
查看结果树只是测试人员调试的时候查看的,让开发人员看性能测试的结果还是要更全面详细的性能报告.
在cmd中生成性能测试报告的命令:
Jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
-n: 无图形化运行
-t: 被运行的脚本
脚本文件 :测试脚本的名字,点击 文件-打开 可以查看
-l :将运行的信息写入日志文件,后缀为jtl 的文件
日志文件: 指定日志文件名
-e :生成测试报告
-o :指定报告输出目录
目录: 指定报告目录. 日志文件和目录可以不存在,如果存在要保证里面为空,不然会出错.
输入命令:
双击index.html文件查看性能报告