本文目录导读:

- 第一步:明确要测的“并发”是什么
- 第二步:选择并发检测工具
- 第三步:核心操作步骤(以最常用的 JMeter 为例)
- 第四步:另一种流行工具 Locust(基于Python,更灵活)
- 第五步:关键注意事项(避免测不准)
- 并发测试的实战步骤
模拟多个用户/请求同时访问目标系统,然后观察系统在压力下的表现(如响应时间、吞吐量、错误率)。
具体怎么测,取决于你选择的工具和场景,下面以最主流的几类工具为例,说明操作步骤和关键参数。
第一步:明确要测的“并发”是什么
在开始测试前,先理清你的目标,否则数据没有意义。
- 并发用户数:系统同一时刻需要处理多少活跃用户(1000人同时在线玩网游)。
- 并发请求数(QPS/TPS):系统每秒能处理多少请求或事务(每秒处理1万次支付)。
- 并发连接数:数据库或服务器端口同时维持多少TCP连接。
大多数工具测的是“并发请求”的模拟能力。
第二步:选择并发检测工具
| 工具 | 特点 | 适用场景 |
|---|---|---|
| JMeter | 老牌、免费、功能全面、支持插件、GUI和命令行。 | Web应用、API、数据库、FTP等几乎所有后端服务。 |
| Locust | 基于Python,用代码写测试场景,更灵活,能模拟复杂用户行为。 | Web应用、API,需要自定义用户行为(如浏览、下单、支付)。 |
| wrk / wrk2 | 极轻量、高性能、命令行工具,用Lua脚本扩展。 | 纯HTTP接口性能测试,追求高并发压力和低资源消耗。 |
| Postman / 新版本Postman | 易用,可转为集合测试。 | 快速验证单个或少量API接口在并发下的表现。 |
| 阿里云PTS / LoadRunner | 商业或云原生服务,自动生成报告,支持大规模分布式压测。 | 企业级全链路压测,需要精确到代码级性能分析。 |
第三步:核心操作步骤(以最常用的 JMeter 为例)
假设你要测试一个登录接口 /api/login,模拟 100 个用户同时登录。
-
创建测试计划
- 打开 JMeter。
- 右键点击“测试计划” -> 添加 -> 线程(用户) -> 线程组。
-
配置线程组(模拟并发)
- 线程数:填写 100(模拟的并发用户数)。
- Ramp-Up 时间 (秒):填写 10(在10秒内均匀启动这100个用户,如果填0,则100个用户瞬间全部启动,产生冲击波效应)。
- 循环次数:填写 1(每个用户只发送1次请求,如果需要持续施压,勾选“永远”,并设置持续时间)。
-
添加请求(模拟用户操作)
- 右键点击“线程组” -> 添加 -> 取样器 -> HTTP 请求。
- 填写接口信息:协议(http/https)、服务器IP、端口、路径 (
/api/login)、方法(POST)、参数或Body(用户名和密码)。
-
添加监听器(看结果)
- 右键点击“线程组” -> 添加 -> 监听器 -> 汇总报告 (看吞吐量、平均响应时间、错误率)。
- 右键点击“线程组” -> 添加 -> 监听器 -> 图形结果 (看响应时间变化趋势)。
- 右键点击“线程组” -> 添加 -> 监听器 -> 察看结果树 (看具体请求和响应内容,用于调试)。
-
运行测试
- 点击绿色三角形按钮运行。
- 观察“汇总报告”中的关键指标:
- #样本:总请求数。
- 平均:平均响应时间(ms)。
- 中位数:50%的请求在这个时间内完成。
- 90% 百分位:90%的请求在这个时间内完成。
- 错误%:关键指标,超过0%说明系统有异常。
- 吞吐量:每秒处理的请求数 (req/s 或 TPS)。
第四步:另一种流行工具 Locust(基于Python,更灵活)
如果你更习惯用代码控制,Locust 更直观。
-
安装:
pip install locust -
编写测试脚本 (locustfile.py):
from locust import HttpUser, task, between class MyUser(HttpUser): # 每个用户模拟操作之间的等待时间 (1-5秒) wait_time = between(1, 5) @task def login(self): # 模拟100个用户同时调用登录接口 self.client.post("/api/login", json={"username": "test", "password": "123"}) -
运行测试:
# --users=100 模拟100个并发用户 # --spawn-rate=10 每秒启动10个用户(即10秒内达到100并发) # --run-time=5m 持续运行5分钟 locust -f locustfile.py --host=http://your-server-ip:port --users=100 --spawn-rate=10 --run-time=5m
-
查看结果:
- 通过 Web 界面 (默认
http://localhost:8089) 实时查看 RPS、响应时间、错误率。 - 或者运行
locust -f locustfile.py --headless -u 100 -r 10 --run-time 5m --csv=result生成 CSV 报告。
- 通过 Web 界面 (默认
第五步:关键注意事项(避免测不准)
-
并发模型理解:
- 工具发起的并发 = 客户端的并发线程数,比如你只开了一台电脑用JMeter跑100个线程,但你的电脑CPU只有4核,工具本身可能成为瓶颈,无法真正“发出100个请求。
- 正确做法:让工具“发出请求,对于JMeter,将线程组中的“调度器”设为无,并且Ramp-Up时间设为0(瞬间并发),对于Locust,将
spawn-rate设得非常高(如1000),模拟瞬间爆发。
-
工具本身是瓶颈:
- 如果使用单台机器压测,确保工具所在机器的资源(CPU、内存、网络连接数)足够,否则你测的是“工具的并发能力”。
- 需要大规模并发(如上万QPS)时,要用分布式压测(多台机器同时施压)。
-
预热与稳态:
- 不要只看第一个10秒的数据,系统有缓存、连接池、JIT优化,通常需要运行一段时间(如5-10分钟)进入稳态后,再记录数据。
-
观察目标系统:
- 压测时必须同时监控目标服务器(CPU、内存、磁盘IO、网络带宽、数据库慢查询)。
- 现象:如果CPU没满但响应变慢,可能是数据库或磁盘IO瓶颈,如果CPU打满,则是计算能力瓶颈。
-
不要只测平均响应时间:
- 关注 P99(99%的请求) 和 P999,很多系统平均响应时间1秒,但P99是10秒,这对用户体验是灾难。
- 关注 错误率,错误率一旦超过1%或5%,系统通常认为不可用。
并发测试的实战步骤
- 单接口压测:先压测最核心的接口(如登录、商品列表、下单)。
- 混合场景压测:按真实用户比例混合压测多个接口(如70%浏览、20%搜索、10%下单)。
- 找拐点:逐步增加并发用户数(如从10 -> 50 -> 100 -> 500 -> 1000),找到系统吞吐量开始不升反降的那个点(拐点),那才是系统的真实容量。
- 稳定性测试:在80%拐点压力下,持续运行30分钟或更久,观察内存泄漏、连接超时、响应时间缓慢增长等问题。
一句话记住:并发测试不是“看软件能不能跑”,而是通过持续加压,系统性地找到它在何种压力下开始崩溃或变慢。
标签: 压力检测
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。