JMeter性能测试工具核心面试复习指南
一、JMeter 简介与环境搭建
1. 是什么?
Apache JMeter 是一个基于 Java 的开源压力测试工具,主要用于对软件进行性能测试。
2. 环境要求
- Java 8 或更高版本。
3. 安装与启动
-
安装:直接下载压缩包(tar/zip),解压即可。
-
启动(两种方式):
-
直接运行 :双击
bin目录下的jmeter.bat(Windows) 或jmeter(Unix/Linux)。 -
命令行启动(推荐) :将 JMeter 的
bin目录添加到系统环境变量PATH中,然后在命令行直接输入jmeter。
-
4. 中文配置
- 修改
bin/jmeter.properties文件,找到language配置项,改为language=zh_CN,重启 JMeter。
二、JMeter 核心概念与基本使用流程
1. 核心元件作用域与执行顺序
-
核心原则 :元件对其子节点生效。
-
执行顺序:
-
配置元件(Configuration Elements)
-
前置处理器(Pre-Processors)
-
定时器(Timers)
-
取样器(Sampler)
-
后置处理器(Post-Processors)
-
断言(Assertions)
-
监听器(Listeners)
-
-
注意:同一层级元件的执行顺序按其在测试计划中的先后顺序执行。
2. 基本测试流程
-
创建测试计划。
-
添加线程组:定义并发用户数、启动时间、循环次数等。
-
添加取样器(如 HTTP 请求):配置接口的协议、地址、端口、路径、参数等。
-
添加监听器(如查看结果树):用于查看请求和响应的详细信息,调试用。
-
点击运行。
三、重点组件详解(面试高频考点)
1. 线程组
-
作用:模拟并发用户。
-
关键参数:
-
线程数(用户数):模拟的虚拟用户数量。
-
Ramp-Up 时间(秒):所有线程启动完毕所需的时间。例如,线程数=10,Ramp-Up=5,表示在5秒内启动10个线程,每秒启动2个。
-
循环次数:每个线程执行测试脚本的次数。
-
调度器:可设置测试的持续时间和延迟启动时间。
-
2. HTTP 请求取样器
- 核心配置:协议、服务器名称/IP、端口号、HTTP 方法(GET/POST等)、路径、参数(Parameters 或 Body Data)。
3. 逻辑控制器与配置元件
-
HTTP 请求默认值:
-
作用:将多个 HTTP 请求共有的部分(如协议、服务器、端口)提取出来,避免重复配置。
-
面试点:提高脚本的可维护性。
-
-
用户定义的变量:
-
作用 :定义全局变量,可在多个线程组和请求中通过
${变量名}引用。 -
面试点:适用于需要统一管理和修改的常量。
-
-
CSV 数据文件设置:
-
作用 :实现参数化。从外部文件(如 CSV)中读取数据,分配给不同的虚拟用户。
-
关键配置:
-
文件名:文件路径。
-
变量名称:定义变量名(多个用逗号分隔)。
-
分隔符:与文件中的分隔符一致。
-
遇到文件结束符再次循环?:数据用完是否从头开始。
-
-
面试点:用于模拟真实场景下的不同用户登录、不同数据查询等。
-
-
同步定时器:
-
作用 :实现集合点。阻塞线程,直到达到指定的线程数量,然后同时释放,模拟瞬间高并发。
-
面试点:用于测试系统在突发流量下的表现。类比:红灯时行人聚集,绿灯时同时过马路。
-
-
事务控制器:
-
作用 :将其下的多个取样器(接口请求)合并为一个事务,统计其整体的响应时间。
-
面试点:用于衡量一个完整业务流程(如:登录->浏览商品->下单)的性能。
-
4. 后处理与断言
-
JSON 提取器:
-
作用:从 JSON 格式的响应中提取数据,并存入变量供后续请求使用。
-
面试点 :常用于处理接口依赖,如从登录接口响应中提取
token,用于后续接口的认证。 -
JSONPath 语法示例 :
$..blogId(提取所有blogId)。
-
-
JSON 断言:
-
作用:验证接口响应内容是否符合预期。
-
面试点 :判断接口是否真正成功,而不仅仅是返回 HTTP 200。
-
5. 监听器与性能指标
-
聚合报告:
-
核心指标(必须掌握):
-
Samples:总请求数。
-
Average:平均响应时间。
-
Median:响应时间中位数(50% Line)。
-
90% Line / 95% Line / 99% Line :90%/95%/99%的请求响应时间小于等于这个值。(重要)
-
Min/Max:最小/最大响应时间。
-
Error %:错误率。
-
Throughput :吞吐量(TPS/QPS)。(核心指标)
-
Received KB/sec:网络吞吐量。
-
-
-
jp@gc - Response Times Over Time:
- 作用 :以曲线图展示响应时间随时间的变化趋势。
-
jp@gc - Transactions per Second:
- 作用 :以曲线图展示TPS(每秒事务数)随时间的变化趋势。
四、高级功能与测试报告
1. JMeter 插件
-
Plugins Manager:用于安装和管理插件。
-
常用插件线程组 :如 Stepping Thread Group ,可以更灵活地设置梯度加压场景(如:每隔30秒增加10个用户)。
2. 生成 HTML 测试报告
-
命令行命令:
jmeter -n -t <脚本文件名.jmx> -l <结果日志文件.jtl> -e -o <报告输出目录>-
-n:非GUI模式运行。 -
-t:指定测试脚本。 -
-l:指定结果日志文件。 -
-e:生成报告。 -
-o:指定报告输出目录。
-
-
注意:输出目录必须为空。
五、性能结果分析思路(面试核心)
分析性能测试结果,主要关注三大指标的关系和变化:
-
响应时间
-
问题:响应时间是否超过预期/阈值?
-
分析:是在多少并发用户下超标的?是突然变长还是随并发增加逐渐变长?
-
-
错误率/可靠性
-
问题:错误率是否过高?
-
可能原因:
-
接口本身有Bug。
-
系统达到性能瓶颈(代码问题、内存泄漏、资源耗尽)。
-
触发了系统的限流、熔断、降级机制。
-
熔断:防止故障扩散,暂时停止调用问题服务。(如:支付渠道不可用)
-
降级:保障核心功能,暂时关闭非核心功能。(如:评论功能不可用,显示默认头像)
-
-
-
-
吞吐量
-
黄金标准:吞吐量越高,系统性能越好。
-
变化规律分析:
-
吞吐量随并发增加而增加,最终趋于平稳 :这是正常现象,平稳点即性能拐点。
-
吞吐量达到拐点后开始下降:系统已过载,处理能力下降。
-
吞吐量波动很大:系统性能不稳定。
-
-
总结:一个健康的系统,在并发增加时,响应时间应缓慢上升,错误率保持极低,吞吐量逐渐增加并最终稳定。当响应时间急剧增加或错误率飙升时,对应的并发用户数和吞吐量就是系统的性能极限。