JMeter

本文学习来源:https://blog.csdn.net/whxcmy?type=blog

一.JMeter基本概念

1.JMeter是什么

JMeter是一款开源的性能测试和负载测试工具,主要用于测试Web应用程序、API接口、数据库等各种服务的性能、稳定性和负载能力。简单来说,它的核心工作就是模拟大量用户同时访问你的系统,看看系统在压力下的表现如何。

2.JMeter 是怎么工作的

(1)建立测试计划,配置线程组模拟并发用户;
(2)向服务器发送模拟请求,记录请求发送的用户数量、时间等信息;
(3)接收服务器响应数据,JMeter对数据进行收集、整理和统计;
(4)生成测试结果报告,通过监听器可视化展示性能指标,分析系统性能

你可以把 JMeter 想象成一个导演,它指挥着一群演员(线程)​ 去执行一个剧本(测试计划)。
测试计划 :这是你的“总剧本”,包含所有测试步骤和设置。
线程组 :代表一群“演员”。你可以设置有多少个演员(线程数),以及他们多久上场一次(Ramp-Up Period)。
取样器 :演员要做的“具体动作”,比如发送一个 HTTP 请求、访问数据库等。
监听器 :负责“记录和汇报”。它会收集演员们的表现数据,比如谁演得快、谁演砸了,并生成图表或报告。

二.JMeter的安装和配置

1.进入官网下载https://jmeter.apache.org/download_jmeter.cgi,解压至本地目录。

2.启动JMeter:
(1)在bin目录下找到JMeter.bat双击
image
(2)也可以配置环境变量,在PATH中配置它的bin路径,再在命令行中输入jmeter也可以

3.中文界面配置:
(1)进入JMeter的bin目录,找到jmeter.properties配置文件
(2)用记事本或编辑器打开文件搜索language
(3)将其修改为language=zh_CN,删除前面的注释符#
image

三.JMeter的使用流程

1.启动后创建线程组
image
2.添加http请求并配置
image
3.添加结果树
image
4.运行查看结果(点击绿三角)
image

四.JMeter核心组件详情(这一模块直接抄博主的https://blog.csdn.net/whxcmy?type=blog

4.1 线程组
线程组是JMeter模拟并发用户的核心,一个线程代表一个模拟用户,主要配置项如下:

线程数:模拟的并发用户数,即同时发送请求的数量;
Ramp-Up时间(秒):所有线程启动完成的耗时,例如线程数100、Ramp-Up时间10,表示10秒内启动100个线程,平均每秒启动10个;
循环次数:每个线程执行请求的次数,可设置固定次数或「永远」(需配合调度器使用);
调度器:勾选后可设置「持续时间」(脚本运行总时长)和「启动延迟」(脚本等待指定时间后执行)。
image

4.2 HTTP取样器
HTTP取样器是配置接口请求的核心组件,需根据实际接口信息填写,关键配置项:

Web服务器:协议(http/https)、服务器名称或IP、端口号(http默认80,https默认443);
HTTP请求:请求方法(GET/POST/PUT/DELETE等)、请求路径(接口的URL路径,不含域名和端口);
内容编码:建议设置为UTF-8,解决中文参数乱码问题;
参数配置:GET请求的参数可直接填写在「参数」栏;POST请求的JSON参数需填写在「消息体数据」栏,同时需在「信息头管理器」中添加Content-Type: application/json。
image

4.3 查看结果树
查看结果树是最常用的监听器,用于调试脚本和查看单次请求结果,核心功能:

取样器结果:展示请求的线程名称、发送时间、响应时间(Load time)、响应码、是否成功等基础信息;
请求数据:展示发送的请求头、请求体、参数等详细信息,便于排查请求配置错误;
响应数据:展示服务器返回的响应头、响应体,支持Text、JSON、HTML等多种格式查看。
image

4.4 HTTP Cookie 管理器
右键线程组→添加→配置元件→HTTP Cookie管理器,作用是模拟浏览器的Cookie存储和发送机制:

自动存储服务器响应的Cookie,并在后续对该域名的请求中自动携带;
每个JMeter线程拥有独立的Cookie存储区,模拟不同用户的会话隔离;
无需手动配置,默认选择「standard」标准模式即可,如需自定义Cookie可手动添加。
image

4.5 HTTP请求默认值
当测试计划中有多个接口,且所有接口的协议、服务器IP、端口号相同时,可使用HTTP请求默认值统一配置,减少重复操作:

右键线程组→添加→配置元件→HTTP请求默认值;
填写公共的协议、IP、端口号;
后续的HTTP取样器可省略上述配置,自动继承默认值,仅需填写请求路径和参数即可。
image

4.6 用户定义的变量
用于配置测试脚本中的公共变量,实现参数的统一管理和修改,操作步骤:

右键线程组→添加→配置元件→用户定义的变量;
填写「变量名」和「变量值」,多个变量可添加多行;
在HTTP取样器中通过${变量名} 引用变量,例如将接口的公共参数配置为变量,后续修改仅需调整变量值。
适用场景:多个接口共用同一参数(如token、用户ID),便于脚本维护。
image

4.7 CSV数据文件设置
用于实现参数化,模拟多组不同的请求参数(如多用户登录的用户名和密码),让脚本更贴近真实业务场景,操作步骤:

创建CSV文件:用Excel/记事本创建csv文件,填写参数数据,例如用户名和密码,每行一组数据,列之间用逗号分隔;
添加CSV配置:右键线程组→添加→配置元件→CSV数据文件设置;
配置CSV参数:填写文件路径(建议绝对路径)、文件编码(UTF-8)、变量名称(与CSV文件的列对应,多个用逗号分隔)、分隔符(默认逗号),勾选「遇到文件结束符再次循环」;
引用变量:在HTTP取样器中通过变量名 ∗ ∗ 引用 C S V 中的数据,例如 {变量名} 引用CSV中的数据,例如变量名∗∗引用CSV中的数据,例如{username}、${password};
调整线程数:将线程数设置为CSV文件中的数据行数,确保每个线程获取一组唯一的参数。
image

4.8 JSON提取器
接口测试中,常需要将一个接口的响应结果作为另一个接口的请求参数(如登录接口返回的token作为查询接口的请求头),JSON提取器可实现该需求,操作步骤:

添加JSON提取器:右键需要提取数据的HTTP取样器→添加→后置处理器→JSON提取器;
配置提取规则:
「创建的变量名称」:提取的数据存储的变量名,例如token;
「JSON路径表达式」:用于定位响应体中的目标数据,核心表达式参考:
表达式 说明
$ 根元素
.name 取根元素下的name字段
$…id 取所有层级的id字段
$[0].id 取数组第一个元素的id字段
「匹配编号」:0为随机取值,1为取第一个值,-1为取所有值;
引用提取的变量:在后续接口的请求头/参数中通过${变量名} 引用,例如在信息头管理器中添加token: ${token}。
提示:可通过「查看结果树」的「JSON Path Tester」调试表达式,确保能正确提取数据。

4.9 JSON断言
接口响应码为200并不代表请求业务成功,需对响应体的内容进行断言,验证数据是否符合预期,JSON断言专用于JSON格式的响应体断言,操作步骤:

添加JSON断言:右键需要断言的HTTP取样器→添加→断言→JSON断言;
配置断言规则:
「Assert JSON Path exists」:填写JSON路径表达式,验证目标字段是否存在;
「Additionally assert value」:勾选后需填写「Expected Value」,验证目标字段的值是否符合预期;
「Match as regular expression」:勾选后支持正则表达式匹配,例如用.success.匹配包含success的内容;
断言结果:若断言失败,请求在「查看结果树」中会标红,可查看失败原因,便于排查问题。
image

4.10 同步定时器(集合点)
用于模拟真实的并发场景,让多个线程同时发送请求,避免线程启动时间差导致的并发不真实问题,核心作用:

将多个线程阻塞,直到达到指定的线程数量,再一起释放,瞬间产生并发压力;
右键线程组→添加→定时器→同步定时器,配置「模拟用户组的数量」,建议与线程数一致;
类比:红绿灯口的集合点,所有行人(线程)需等绿灯(达到集合点数量)后一起过马路(发送请求)。

同步定时器设置模拟用户数量最好是和线程组里的线程数量相同,或者线程数量是模拟用户数量的整数倍(但线程循环要设为永远,指定时间循环),这样才不会导致有剩余的请求发送不出去(因为要等到达集合点的数量,才能把这些请求一起发送出去)。

4.11 事务控制器
用于将多个接口合并为一个事务,统计整个事务的总响应时间,更贴合真实的用户操作流程(如用户下单包含「查询商品」「提交订单」「支付」多个接口),操作步骤:

右键线程组→添加→逻辑控制器→事务控制器;
将需要合并的HTTP取样器拖拽到事务控制器下;
运行脚本后,监听器会统计事务的总响应时间、吞吐量等指标,便于评估整个业务流程的性能。
提示:若不添加事务控制器,JMeter会将每个接口视为一个独立事务。

五.插件https://blog.csdn.net/whxcmy?type=blog

  1. 去官网下载插件管理器:https://jmeter-plugins.org/install/Install/,找到plugins-manager.jar 并点击,下载后将文件复制到JMeter的lib/ext目录下然后重启,右上角就是
    image

  2. 必装核心插件
    Custom Thread Groups:自定义线程组,包含梯度线程组、并发线程组等;
    Basic Graphs:基础图形监听器,包含响应时间趋势、TPS趋势等;
    PerfMon (Servers Performance Monitoring):服务器性能监控,可监控CPU、内存、磁盘等指标。

  3. 常用扩展线程组:Stepping Thread Group(梯度压测线程组)
    原生线程组仅支持固定并发,梯度线程组可实现逐步加压,模拟系统在不同并发量下的性能表现,核心配置项:

This group will start:总线程数(最大并发量);
First, wait for:压测启动延迟时间,默认0;
Then start:初始启动线程数,默认0;
Next, add:每次增加的线程数;
threads every:每次增加线程的时间间隔;
using ramp-up:每次启动线程的需要时间;
then hold load for:达到最大并发后,持续压测的时间;
finally, stop:每次减少的线程数;
threads every:每次减少线程的时间间隔。
适用场景:测试系统的性能拐点,找到系统能承受的最大并发量。

image

  1. 常用扩展监听器
    安装插件后,可添加更多可视化监听器,核心监听器如下:

Active Threads Over Time:实时展示运行的线程数,查看梯度加压的效果;

Response Times Over Time:响应时间趋势图,横坐标为时间,纵坐标为响应时间,查看响应时间随并发量的变化;

Transactions per Second(TPS):每秒事务数趋势图,核心性能指标,反映系统的处理能力,TPS越高性能越好;

聚合报告:最核心的统计监听器,汇总所有请求的性能指标,包含样本数、平均响应时间、90%Line、95%Line、错误率、吞吐量等。

image

聚合报告核心指标说明
指标 说明
Samples 总请求数,即发送的HTTP请求次数
Average 平均响应时间,单位毫秒
Median 中位数响应时间,即50%的请求响应时间≤该值
90%Line 90%的请求响应时间≤该值,性能测试核心指标,反映绝大多数用户的体验
95%Line 95%的请求响应时间≤该值,更严格的性能指标
99%Line 99%的请求响应时间≤该值,适用于对性能要求极高的场景(如金融、电商)
Min/Max 最小/最大响应时间,单位毫秒
Error% 错误率,失败请求数/总请求数,理想值为0%
Throughput 吞吐量,单位req/sec,即每秒处理的请求数,反映系统的处理能力
KB/sec 每秒网络传输流量,单位KB,反映网络带宽的使用情况

六. JMeter命令行压测和测试报告生成
JMeter 命令行压测是性能测试的核心环节,它能绕过图形界面(GUI)的资源消耗,直接调用 Java 引擎进行高并发测试,从而获得更准确的性能数据。以下是详细的命令行压测与报告生成流程。

一、核心命令详解

  1. 基础压测命令
    在 Windows 的 CMD 或 Linux/Mac 的 Terminal 中,进入 JMeter 的 bin目录执行命令。
    基础格式
    jmeter -n -t <测试计划.jmx> -l <结果文件.jtl> -e -o <报告输出目录>

实际示例(假设脚本在桌面)
jmeter -n -t C:\Users\11516\Desktop\test.jmx -l C:\Users\11516\Desktop\result.jtl -e -o C:\Users\11516\Desktop\report
-n:非 GUI 模式(No GUI),必须加。
-t:指定要运行的 JMX 脚本文件路径。
-l:指定结果日志文件路径(.jtl 或 .csv)。
-e:测试结束后生成 HTML 报告。
-o:指定 HTML 报告的生成目录(目录必须为空或不存在)。

  1. 高级参数调优
    如果压测时遇到内存溢出或性能瓶颈,可以调整 JVM 参数。
    设置 JVM 堆内存(在 jmeter 命令前加 JVM_ARGS)
    set JVM_ARGS=-Xms512m -Xmx2048m
    jmeter -n -t test.jmx -l result.jtl
    -Xms:初始堆内存大小(如 512m)。
    -Xmx:最大堆内存大小(如 2048m),建议设置为物理内存的 1/2 到 2/3。
    二、测试报告生成
  2. 实时生成 HTML 报告(推荐)
    使用 -e -o参数可以在压测结束后自动生成一个美观的 HTML 仪表盘报告。
    查看报告:打开生成的 report目录下的 index.html文件。
    报告内容:包含 APDEX(满意度指数)、响应时间、吞吐量、错误率等关键图表。
  3. 事后生成报告(从 .jtl 文件生成)
    如果你之前已经运行过压测并保存了 .jtl 文件,可以单独生成报告。
    从已有的结果文件生成报告
    jmeter -g result.jtl -o report
    -g:指定已有的结果文件。
    -o:输出目录。

七.性能结果分析

性能结果分析是压测的核心环节,目的是定位瓶颈、评估系统健康度。三大核心指标:响应时间、错误率、吞吐量

1.吞吐量:系统每秒处理的事务数越高越好,且曲线平稳,
2.响应时间:请求从发出到收到响应的时间,越低越好
3.错误率:失败请求占总请求的比例,趋近于 0%

综合分析思路
检查错误率:若错误率>0,先排查接口代码、服务器资源、限流配置等问题,确保系统能稳定处理请求;
再看吞吐量:若吞吐量随并发量增加无明显提升,说明系统存在瓶颈(如CPU、内存、数据库慢查询);
最后看响应时间:结合吞吐量分析响应时间变化,若吞吐量稳定但响应时间升高,需优化接口代码或服务器配置;

posted @ 2026-03-15 11:53  mwhB  阅读(2)  评论(0)    收藏  举报