JMeter 性能测试
jmeter;负载与压测。
35 分钟
JMeter 性能测试
功能测试绿不等于上线安全。Apache JMeter 模拟多线程并发访问 HTTP/JDBC 接口,输出吞吐量、延迟分位与错误率——本课教你为 jev-javalin 或 spring-boot-essentials 的 API 做 baseline 压测,并与 java-core-essentials 的并发概念呼应。
学习目标
- 搭建 Thread Group + HTTP Request 的最小压测计划
- 读取 Summary Report 与 Aggregate Report 的核心指标
- 区分负载测试、压力测试与 soak 测试的目标
测试计划结构
Test Plan
└── Thread Group(100 线程,Ramp-Up 10s,循环 50 次)
├── HTTP Request Defaults(Server: localhost, Port: 7000)
├── HTTP GET /api/books/{isbn}
├── CSV Data Set Config(isbn 列表)
├── Summary Report
└── Aggregate Report
Thread Group = 虚拟用户;Ramp-Up = 多少秒内全部启动,避免瞬时打满。
关键指标解读
| 指标 | 含义 | 健康信号 |
|---|---|---|
| Samples | 总请求数 | 与 线程×循环 一致 |
| Average / 90% Line | 平均 / P90 延迟 | 业务 SLA 内(如 P90 < 200ms) |
| Throughput | 每秒完成请求数 | 随线程增加应近似线性,直到瓶颈 |
| Error % | 失败比例 | 生产前必须 ≈ 0% |
若 Throughput 不再随线程上升而 延迟陡增,常见瓶颈:连接池过小、DB 锁、GC 停顿——回到 jev-db 调 HikariCP、jev-hibernate 查 N+1。
CLI 非 GUI 运行
jmeter -n -t book-api.jmx -l results.jtl -e -o report/
-n 无界面;-l 原始结果;-e -o 生成 HTML 报告。CI 可设阈值脚本:
# 伪代码:解析 results.jtl,Error % > 1 则 exit 1
GUI 仅用于 调试脚本;正式压测用 CLI,避免界面消耗本机资源。
三种测试类型
- Load(负载):预期峰值并发,验证 SLA
- Stress(压力):超过设计容量,找 breaking point
- Soak(浸泡):中等负载跑数小时,查内存泄漏、连接泄漏
与 jev-rest-assured 分工:前者 正确性,JMeter 容量与稳定性。
练习
- 为
GET /api/books/{isbn}建 JMX:50 线程、Ramp-Up 5s,记录 Throughput - 把 HikariCP 从 10 改为 2,对比 Error % 与 Average