明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

性能工具之 JMeter 快速入门

Posted on 2025-10-16 09:59  且行且思  阅读(310)  评论(0)    收藏  举报

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文件中的数据,循环次数才可以

 

图片

 

 

参数文件使用:

  1. 编写内容

 

图片

 

    获取结果

图片

 

    显示结果:

图片

 

 

十二、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%百分位和吞吐量数据,预估系统在目标负载下的资源配置需求。

问题诊断
    高异常率时检查服务器日志;最大响应时间突增需排查网络或数据库瓶颈。

 效果:

图片