https 地址压力测试: 在启动JMeter时添加参数:
cd d:
cd D:\压力测试\apache-jmeter-5.4.3\bin
jmeter -Dhttps.protocols=TLSv1.2 -Dcom.sun.net.ssl.checkRevocation=false
纸上得来终觉浅,绝知此事要躬行。
一、前言
JMeter 作为浏览器与web服务器之间的代理,可以捕获浏览器的请求和 web 服务器的响应,通过线程来模拟真实用户对 web 服务器的访问压力。基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果。
JMeter 的概念
JMeter 是一款由 Apache 组织开发的开源负载测试工具,主要用于性能测试和功能测试。它基于 Java 平台,支持多协议(如 HTTP、HTTPS、FTP、JDBC 等),能够模拟高并发用户请求,测试系统的性能、稳定性和负载能力。
JMeter 的主要作用
性能测试:通过模拟大量用户并发请求,测试系统在高负载下的响应时间、吞吐量、资源占用等性能指标。
负载测试:逐步增加用户负载,观察系统在不同压力下的表现,确定性能瓶颈。
压力测试:通过极端负载条件测试系统的极限能力,验证系统在崩溃前的最大承载量。
功能测试:支持对 Web 应用、API、数据库等进行功能验证,检查请求和响应的正确性。
分布式测试:支持多台机器协同生成负载,模拟更大规模的并发用户。
JMeter 的核心特点
跨平台:基于 Java,可在 Windows、Linux、macOS 等系统运行。
多协议支持:支持 HTTP、HTTPS、SOAP、REST、FTP、JDBC 等协议。
可视化结果分析:提供图表和报告生成功能,便于分析测试结果。
可扩展性:通过插件支持更多功能(如 Kafka、MQTT 等协议测试)。
脚本录制:可通过代理录制用户操作,自动生成测试脚本。
JMeter 的典型应用场景
Web 应用性能测试(如电商网站秒杀活动模拟)。
API 接口性能验证(如微服务架构下的接口压测)。
数据库性能测试(如 SQL 查询效率分析)。
消息中间件测试(如 Kafka 或 RabbitMQ 的吞吐量测试)。
二、下载安装
下载window版本,需要安装JDK1.8
下载地址:http://jmeter.apache.org/download_jmeter.cgi

三、目录介绍

四、快速使用
运行
进入 安装目录/bin下, 双击运行jmeter.bat

GUI 启动点击:
~/bin/jmeter.bat
后台启动进程,并且提示通过命令执行方式:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
GUI 显示:

JMeter主界面区域概览
JMeter的图形用户界面(GUI)分为多个功能区域,每个区域负责不同的任务管理。以下是核心区域的说明:
菜单栏
位于窗口顶部,包含文件操作(新建、打开、保存)、测试计划配置、运行控制(启动、停止)、选项设置及帮助文档入口。
工具栏
提供常用操作的快捷按钮,如运行测试、停止测试、清除结果等。支持快速访问测试元件添加功能。
树状测试计划面板
左侧以树形结构显示测试计划的完整层次,包含线程组、逻辑控制器、采样器、监听器等元件。可通过右键菜单添加或删除组件。
元件配置面板
当选中树状面板中的某个元件时,右侧会显示该元件的详细配置选项,例如HTTP请求的路径、参数、头部信息等。
日志/结果面板
底部区域显示系统日志(如错误信息)和测试结果。通过"View Results Tree"等监听器可查看请求响应详情。
五、创建线程组
在 TestPlan 位置点击右键选择新建线程组如图:
线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 JMeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。在 JMeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。

成功显示:

解释说明:
作用:是一个测试计划执行的开始点,里面包含 sampler,controller 等等。
参数:
- Name:线程组的名称,可以随意修改
- Comments:备注信息,记录一些参数设置的原因和策略可填可不填
- Action to be taken after a Sampler error:
线程内的采样器失败后,接下来采取的动作:
- Continue:继续执行接下来的操作
Start Next Thread Loop:执行下一个线程循环Stop Thread:退出该线程,不在执行该线程的任何操作Stop Test:等待该线程的采样结束后,结束整个测试,不会立即停止Stop Test Now:立即停止整个测试
Thread Properites:线程属性
Number of Threads(users):线程数,也就是一共要启动多少线程用来并发执行Ramp-uo Period(in seconds):多长时间将上一步设置的线程数启动完毕。设置不同的值可以验证在不同并发的情况下验证系统的性能Loop Count:设置 sampler 循环的次数,勾上 Forever 后就会死循环一直执行- Scheduler:调度器,日程表。选上之后才能设置执行时间
Number of Threads * Loop Count就是 Sampler 执行的次数,可以在View Results Tree中看到。
Scheduler Configuration:
- Duration(seconnds):请求的执行时间(Loop Count 的 Forever 必须勾上才有效)
- Startup delay(seconds):延迟时间,一般不用。但是如果想在指定的时间执行测试,可以用此配置。
- setUp Thread Group、Thread Group 和 tearDown Thread Group3 种线程组都可以设置。
Thread Group中的执行规则
- setUp、Thread Group 和 tearDown 串行执行
六、编写 http 请求

成功显示:

解释:用来向服务器发送 HTTP(S) 请求
参数说明:
- Name:组件名,可以修改
- Comment:注释信息,可写可不写
Web Server:
- Protocol[http]:不写就是默认的 HTTP,可以根据实际情况指定
- Server Name or IP:IP 或者域名,比如
cn.bing.com(不要加 http:// ,默认就带;不能有路径)
HTTP Request:
Port Number:HTTP 默认为 80,https 为 443- Path:/ 表示根目录
Content encoding:内容编码,如果请求有乱码的话可以将其配置为 UTF-8 或者 ANSI- 配置项:默认值即可
- Paramters:配置请求参数,比如添加
key--àvalue、编码格式(url encode)、文件类型 - Body data:当选择 body Data 时候并且输入 Json 请求体后 Parameters 选项不能点击。【parameters and Body Data and Files Upload】不能同时选择。
- Files upload:上传文件,一般不用。

七、添加查看结果树

八、点击运行

九、显示结果

说明:
查看结果的常用方式
- Text:默认的显示方式,原始的 HTML 文本
- HTML:以类似浏览器的格式查看响应数据
- RegExp Tester:支持正则用来做检查点或者关联使用;(在做关联的时候可以在这里做调试是否写得是否正确)
- XPath Tester:xpath 方式提取内容;(在做关联的时候可以在这里做调试是否写得是否正确)
- Scroll automatically:请求很多时可以自动滚屏
显示信息:
- Sampler Result:本次请求的汇总信息
- 请求信息:分为请求数据和请求头
- 响应信息:分为响应数据和响应头
- Filename:可以将执行结果保存到 Filename 指定的文件中,注意:默认保存在 JMeter 的 bin 目录下。如果勾选了后面的 Errors,那么只保存错误信息;如果勾选了 Success,那么只保存执行成功的信息;都不勾选的话保存所有的信息
- Browser:可以打开之前保存过的测试文件,将测试信息显示到下面的 result 栏中。如果勾选了后面的 Errors,那么只显示错误信息;如果勾选了 Success,那么只显示执行成功的信息;都不勾选的话显示所有的信息
Sampler result 结果说明:

十、Summary RePort 展示

解释聚合报告标签的含义:
- Label:每个 JMeter 的 element 都有一个那么属性,这个显示 name 属性的值
-
sampler:表示在本次测试中一共发出请求数,11 个用户,循环 1 次就是1
- Average:平均响应时间,,默认情况下是单个 request 的平均响应时间,当使用了
transaction controller时,也可以以transaction 为单位显示平均响应时间 - Median:中位数,50 %用户的访问时间在这个时间以下
- 90% line:90%用户的访问时间在这个时间以下
- min:最小响应时间
- max:最大响应时间
- error%:本次测试出现的错误数/总的请求数
- Throughput:吞吐量,默认情况下表示每秒完成的请求数(Request per second)
- KB/sec:每秒从服务器接受到的数据量,相当于 LR 中 Throughput/sec 单位毫秒。
如果想生成 html 报告可以参考,如下命令生成即可:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder
十一、参数化小试
Jmeter 参数 CSV Data Set Config 用文件做参数化
选择配置原件中的 CSV Data Set Config

显示:

参数说明:
- Filename:文件路径。可以是相对路径也可以是绝对路径。可以是.txt文件也可以是.csv文件
File encoding:文件编码,默认问 ANSI,其它编码根据实际情况配置Variables Names(comma-delimited):变量名,表示将每一列赋值给一个变量,有多个列时同逗号分隔,后续通过${}引用Ignore first line:忽略首行Delimiter(use "\t" for tab):分隔符,默认为逗号Allow quoted data?:数据是否带引号,默认为false,如果数据中有引号的话就会把数据连同引号一起赋值给变量;如果为Flase的话就会把引号去掉Recycle on EOF?:遇到文件结束符是否再次循环,默认为True,也就是继续从文件开头取值Stop thread on EOF?:遇到文件结束符是否结束线程,默认为False也就是不停止。注意:当【Recycle on EOF?】设置为True时,此项设置无效;当【Recycle on EOF?】设置为False,此项也设置为False,那么到达文件最后在引用变量就会变为 < EOF >Sharing mode:共享模式。默认为all threads,还支持current thread group/current thread/ edit
共享模式小结:
all treatds:csv文件中的数据是共享的,不管是线程数还是循环次数,都会触发接口请求参数来使用 csv 文件中不同行的变量数据current thread group:在线程组内,线程数和循环次数都会触发接口请求参数变化current thread:循环了数据就会变化,线程数不能决定更新csv文件中的数据,循环次数才可以

参数文件使用:
- 编写内容

获取结果

显示结果:

十二、BeanShell
在造数据时候,需要获取结果到保存到本地,有两种方式:
- 第一种直接通过获取结果保存到本地
- 第二种通过数据库导出
今天介绍第一种,通过 JMeter 中正则表达式获取:
步骤一:

第二步:

第三步:

参考代码:
FileOutputStream fps=new FileOutputStream("${outfile_online}",true);
OutputStreamWriter osw=new OutputStreamWriter(fps);
BufferedWriter bw=new BufferedWriter(osw);
bw.append("${mobile}\t${User}\t${User}\t${fd}\n");
if(bw!=null){bw.close();}
if(osw!=null){osw.close();}
if(fps!=null){fps.close();}
第四步:

获取结果:

十三、正则表达式 Regular Expression Extractor

简单写法:

正则表达式提取器说明:
Apply to:应用范围- 要检查的响应字段:样本数据源。
- 引用名称:其他地方引用时的变量名称,我这里写的 phone,可自定义设置,引用方法:
${引用名称} - 正则表达式:数据提取器,() 括号里为你要获取的的值。"phone":"( 相当于 LR 左边界,)","name" 相当于 LR 右边界。而括号里
\d+为正则表达式,用来匹配所需要获取的数据,何谓正则表达式文章末尾会附上说明 - 模板:
$$对应正则表达式提取器类型。-1 全部,0 随机,1第一个2第二个,以此类推,若只有一个正则一般就填写$1$ - 匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1 表示全部,0 随机,1 第一个,2 第二个,以此类推。若只要获取到匹配的第一个值,则填写1
- 缺省值:匹配失败时的默认值。可以不写。若需用于后续逻辑判断,可简单写为 ERROR。
十四、JMeter 常用快捷键参考
| 快捷键 | 功能 | 备注 |
|---|---|---|
| Ctrl + C | 复制 | 可复制组件 |
| Ctrl + V | 粘贴 | 可粘贴组件 |
| Ctrl + Shift + C | 复制粘贴当前组件到下一行 | |
| Ctrl + R | 运行测试计划 | |
| Ctrl + E | 清空运行结果 | |
| Ctrl + T | 启用/禁用当前组件 | 可以多选 |
| Ctrl + F | 全文搜索 | 一般用来搜索组件, 搜索完成后可点击Search -> Reset Search恢复 |
| Ctrl + - | 全部收起 | “-“为主键盘的减号 |
| Ctrl + Shift + - | 全部展开 | “-“为主键盘的减号 |
| Ctrl + 0 | 创建线程组 | |
| Ctrl + 1 | 新增HTTP请求 | |
| Ctrl + 2 | 正则表达式提取器 | |
| Ctrl + 3 | 响应断言 | |
| Ctrl + 4 | 固定定时器 | |
| Ctrl + 5 | Test Action 5.0更改为Flow Control Action | JMeter流量控制动作 |
| Ctrl + 6 | JSR223 PostProcessor(后处理程序) | |
| Ctrl + 7 | JSR223 PreProcessor(预处理器)vars.put("key",value):将value存到jmeter变量key中,在后续请求中使用${“key”}进行引用。 | |
| Ctrl + 8 | Debug Sampler | |
| Ctrl + 9 | 查看结果树 |
查看结果树
JMeter查看结果树参数介绍
JMeter的查看结果树(View Results Tree)是一个监听器组件,用于可视化显示请求和响应的详细信息。以下是其主要参数和功能:
取样器结果(Sampler Result)
线程名:显示执行请求的线程名称。
样本开始时间:记录请求的启动时间戳。
加载时间:请求从发送到接收完成的总耗时(毫秒)。
连接时间:建立连接所花费的时间(毫秒)。
Latency:请求发送到接收到第一个响应字节的时间差。
大小(Bytes):响应数据的字节数。
响应头:显示服务器返回的HTTP头部信息。
请求数据:显示发送的请求内容(如POST数据、URL参数等)。
响应数据(Response Data)
格式选项:支持以文本、HTML、XML或JSON格式查看响应内容。
渲染HTML:若响应为HTML,可勾选此选项直接渲染页面效果。
编码设置:手动指定响应内容的字符编码(如UTF-8)。
配置选项(Configuration)
仅日志错误:勾选后仅显示失败的请求日志。
保存响应到文件:将响应数据保存到指定路径的文件中。
显示主样本和子样本:若启用事务控制器,可选择显示主/子样本的详细信息。
高级设置(Advanced)
持续时间断言:可配置断言规则,验证响应时间是否符合预期。
正则表达式提取器:直接从响应中提取数据并存储为变量供后续使用。
注意事项
性能测试时建议禁用查看结果树,因为记录详细数据会显著增加内存消耗。
调试阶段可结合“仅日志错误”功能快速定位问题请求。
对于大型响应数据,优先使用“保存到文件”避免JMeter界面卡顿。
示例:查看JSON响应
选择目标取样器,在结果树中切换格式为“JSON”。
展开JSON结构树,直接点击节点查看嵌套数据。
使用正则表达式提取器或JSON提取器获取特定字段值。
聚合报告
JMeter聚合报告主要参数
JMeter聚合报告(Aggregate Report)是性能测试结果分析的核心组件之一,提供以下关键指标:
样本数(Samples)
表示测试期间执行的请求总数。例如100次HTTP请求对应样本数为100。
平均响应时间(Average)
所有请求响应时间的算术平均值,单位为毫秒。计算公式为:
Average = ∑ 响应时间 Samples \text{Average} = \frac{\sum \text{响应时间}}{\text{Samples}} Average=Samples∑响应时间
中位数(Median)
将响应时间按大小排序后处于中间位置的值,反映50%用户的体验。
90%百分位(90% Line)
90%请求的响应时间低于此值,用于评估大多数用户的体验。
最小/最大响应时间(Min/Max)
最短和最长单次请求响应时间,帮助识别极端情况。
异常率(Error %)
失败请求占总请求数的百分比。计算公式:
KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: …es}} \times 100
吞吐量(Throughput)
单位时间内处理的请求数(请求/秒),计算公式:
Throughput = Samples 总测试时间 \text{Throughput} = \frac{\text{Samples}}{\text{总测试时间}} Throughput=总测试时间Samples
接收/发送数据量(KB/sec)
网络带宽使用情况的指标,反映数据传输效率。
关键参数解读方法
响应时间分析
平均响应时间与90%百分位差距过大时,可能存在部分请求性能瓶颈。
中位数若显著低于平均值,说明存在少量高延迟请求拉高整体数据。
异常率阈值
通常要求≤1%,超过5%需重点排查服务端错误或测试脚本问题。
吞吐量优化
与并发用户数、服务器资源消耗联动分析,寻找最优并发平衡点。
实际应用建议
性能基准测试
通过对比不同版本的平均响应时间和吞吐量,验证优化效果。
容量规划
结合90%百分位和吞吐量数据,预估系统在目标负载下的资源配置需求。
问题诊断
高异常率时检查服务器日志;最大响应时间突增需排查网络或数据库瓶颈。
效果:

浙公网安备 33010602011771号