Jmeter压力测试
目录
一、创建测试计划
目标机器:127.0.0.1
, 压测接口:
http://127.0.0.1:32063/v1/auth/captcha?uuid=${uuid}
编写jmeter
测试脚本,设置压力测试的标准为20
个并发线程,在10
秒内全部启动,持续压测时间1
分钟,接着开始启动jemeter
脚本进行测试。
1.1 前置
1.1.1 User Defined Variables
选中Test Plan
,点击Add
—>Config Element
—> User Defined Variables
;
Name value
BASE_URL_0 127.0.0.1
threadNum ${__P(loopNum,1)}
loopNum ${__P(rampupTime,1)}
duration ${__P(duration,60)}
1.1.2 Thread Group
这个就是我们通常使用的线程,一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户,多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。
选中Test Plan
,点击Add
—>Thread
(Users
)—> Thread Group
;

采样器失败后处理:
continue
(继续):继续执行接下来的操作;Start Next Thread Loop
(启动下一进程循环):开始下一次循环;stop Thread
(停止线程):停止线程,退出该线程(不再执行此线程的操作);stop Test
(停止测试):等待当前执行的采样器结束后,结束整个测试;Stop Test Now
(立即停止测试):马上停止测试;
线程属性:
Number of Threads(users)
(线程数):相当于模拟的用户数量;Ramp-up Period(in seconds)
:达到指定线程需要的时间,例如线程数为20
,时间设定为10s
,那么就是10s
加载20
个线程,每秒启动的线程数=20/10=2
;Loop Count
(循环次数):如果填具体的数值,就是循环对应的次数;如果选择Forever
,则一直执行下去,直到手动停止;Delay Thread creation until needed
:延迟线程创建,直到需要才创建。
调度器配置:
Duration
(持续时间):设置测试计划的执行时间,单位是秒;Startup delay
(启动延迟):设置测试计划的启动延迟时间,以确保测试计划在指定的开始时间开始执行;
注意:
- 注意:调度器一般在循环次数为
Forever
时配合使用,否则会按照具体的循环次数执行; jmeter
调度器只适用于jmeter
的GUI
模式(即通过jmeter
界面直接执行脚本),不适用于cli
模式(即进入到jmeter
的目录
下通过命令执行测试脚本);- 在
CLI
模式下,需要使用其他的方式来控制测试计划的执行时间和频率,例如使用脚本语言编写定时执行脚本来实现。
1.2 token
处理
在某些情况下,我们压测的接口是需要进行身份认证的,这种情况下我们需要先登录。
1.2.1 Once Only Controller
即先选中Thread Group
,点击Add
—>Logic Controller
—>Once Only Controller
;
(1) 选中Once Only Controller
,点击Add
—>Config Element
—> Http Header Manager
,并参考下文进行配置。
(2) 选中Once Only Controller
,点击Add
—>Sampler
—> Http Request
,并参考下文配置登录接口;
选中登录接口Http Request
,点击Add
—>Post Processors
—>JSON Extractor
;配置
Names of created variables
:reponsetoken
;JSON Path Expressions
:$.data.token
;
选中登录接口Http Request
,点击Add
—>Assertions
—> Response Assertion
;配置:
Field To Test
:选择Text Response;
Pattern Matching Rules
:配置成Contains
;Patterns to Test
:配置成响应成功的业务状态码,比如00000
。
如果登录用户名想从配置文件读取,可以选中登录接口Http Request
,点击Add
—>Config Element
—> CSV Data SetConfig
。
1.2.2 Loop Controller
即先选中Thread Group
,点击Add
—>Logic Controller
—>Loop Controller
;
接着将 Http Header Manager
、 Http Request
各种Listener
等添加到Loop Controller
下。
1.3 Config Element
配置
1.3.1 Http Header Manager
选中Thread Group
,点击Add
—>Config Element
—> Http Header Manager
;
设置请求头参数,比如:
Name value
Content-Type application/json
Authorization ${reponsetoken}
1.4 Sampler
配置
1.4.1 Http Request
选中Thread Group
,点击Add
—>Sampler
—> Http Request
;
进行如下设置:
-
Name
:接口名称; -
Web Server
配置:-
Protocol[http]
:http
; -
Server Name or IP
:${BASE_URL_0}
; -
Port Number
:32063
;
-
-
Http Request
配置:配置请求接口,比如GET /v1/auth/captcha?uuid=${__UUID}
;
1.4.2 Response Assertion
选中Http Request
,点击Add
—>Assertions
—> Response Assertion
;
配置:
- `Field To Test`:选择`Text Response;`
- `Pattern Matching Rules`:配置成`Contains`;
- `Patterns to Test`:配置成响应成功的业务状态码,比如`00000`。
1.5 Listener
配置
1.5.1 View Results Tree
选中Thread Group
,点击Add
—>Listener
—> View Results Tree
。
View Result Tree
可以查看Http Request
结果。
1.5.2 Aggragate Report
选中Thread Group
,点击Add
—>Listener
—> Aggragate Report
。
对于每个请求,Aggragate Report
统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/s
为单位的吞吐量;
在这里我们主要解释每一个表项是什么意思。
Label
:请求的名称,就是我们在进行测试的Http Request Sampler
的名称;Samples
:总共发给服务器的请求数量,如果模拟20
个用户,每个用户迭代60
次,那么总的请求数为:20*60 =1200
次;Average
:所有样本的平均响应时间;Median
:所有样本响应时间的中间值;90%Line
:请求响应时间在97 ms
的请求占比为90%
;95%Line
:请求响应时间在115 ms
的请求占比为95%
;99%Line
:请求响应时间在180 ms
的请求占比为99%
;Min
:最小的响应时间;Max
:最大的响应时间;需要注意留言一下是否存在Error
,可能是jmeter
连接重置错误导致这个值很大;Error%
:错误率=错误的请求的数量/请求的总数;Throughput
: 吞吐量即表示每秒完成的请求数;KB/sec
: 每秒从服务器端接收到的数据量。
1.5.3 Transactions per Second
选中Thread Group
,点击Add
—>Listener
—> jp@gc - Transactions per Second
。
每秒事务数。性能测试中,最重要的2个指标之一。该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS
表现,比如整体趋势、实时平均值走向、稳定性等。

1.5.4 Response Times Over Time
选中Thread Group
,点击Add
—>Listener
—> jp@gc - Response Times Over Time
。
事务响应时间。性能测试中,最重要的两个指标的另外一个。该插件的主要作用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。

1.5.5 Active Threads Over Time
选中Thread Group
,点击Add
—>Listener
—> Active Threads Over Time
。
统计每秒活动的线程总数;

1.5.6 Response Times Percentiles
选中Thread Group
,点击Add
—>Listener
—> Response Times Percentiles
。
统计响应时间百分比;

比如响应时间在200ms
内的百分比为100%
。
1.6 Timer
配置
1.6.1 Constant Throughput Timer
选中Thread Group
,点击Add
—>Timer
—> Constant Throughput Timer
。
在测试环境进行压力测试时,我们可以把并发量设置的比较高,可以得出最大并发量。但是在生产环境下,有时候我们会根据客户的要求,可能只要求应用能满足用户使用就可以,且压测时要保证不系统正常、不崩溃。这时我们用到jmeter
的限频。
Constant Throughput Timer
(常数吞吐量定时器):常数吞吐量定时器可以让jmeter
以指定数字的吞吐量(即指定TPS
,只是这里要求指定每分钟的执行数,而不是每秒)执行。
吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组,并且计算吞吐量的依据可以是最近一次线程的执行时延。
假设目标TPS
为20
,则设置Target Throughput (in samples per minute)
参数为20*60=1200
。
二、服务器压测
2.1 安装jmeter
在安装jmter
之前默认你已经安装了jdk8
。将jmeter
上传到服务器/home/jmeter
目录,将编写好的测试计划上传到的/home/jmeter/apache-jmeter-5.4.3/testplan
目录。
配置Jmeter
环境变量;
vi /etc/profile
export JMETER_HOME=/home/jmeter/apache-jmeter-5.4.3
exportCLASSPATH=${JMETER_HOME}/lib/ext/ApacheJMeter_core.jar:${JMETER_HOME}/lib/jorphan.jar:${CLASSPATH}
export PATH=${JMETER_HOME}/bin:$PATH
让配置文件立马生效:
source /etc/profile
查看是否安装成功,执行命令:
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了