ab可压测动态接口,只需目标url返回200且支持http协议;get需带参数双引号,post需配合-p和-t;重点观察failed requests、time per request和requests per second;复杂场景建议用jmeter。

Apache 自带的 ab(Apache Bench)工具可以对动态内容进行压力测试,但需注意:它本身不解析后端逻辑,只按 HTTP 协议发起请求——只要目标 URL 返回的是动态页面(如 /user/profile?id=123、/api/login 或 PHP/Java/Python 后端接口),ab 就能真实压测其响应能力。
确保被测动态接口可直接访问
ab 不走浏览器渲染,只发原始 HTTP 请求。所以必须确认:
- 目标 URL 能被
curl或浏览器直接打开,且返回状态码为 200(或预期的成功码) - 若接口需要登录态(如 Cookie 或 Token),需用
-C或-H参数携带,例如:ab -n 500 -c 50 -C "JSESSIONID=abc123" http://localhost:8080/order/list - POST 类动态接口(如表单提交、JSON API)需配合
-p和-T,例如:ab -n 200 -c 20 -p post-data.json -T "application/json" http://localhost:8080/api/v1/user
区分 GET 与 POST 动态请求的写法
动态内容常依赖参数或请求体,不能简单测静态路径:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
带查询参数的 GET:URL 中含
?是完全支持的,如ab -n 1000 -c 100 "http://example.com/search?q=nginx&sort=date"(注意加英文双引号,避免 shell 解析错误) -
需要请求体的 POST:先准备一个文件(如
login.json),内容为:{"username":"test","password":"123456"}
再执行:ab -n 300 -c 30 -p login.json -T "application/json" http://example.com/auth/login
关注动态接口特有的关键指标
相比静态资源,动态内容更易暴露后端瓶颈,压测时重点看:
- Failed requests:非零值说明应用层出错(如数据库连接池耗尽、空指针、超时未捕获)
- Time per request(mean):平均响应时间上升明显?说明 PHP-FPM/Java 线程/Python GIL 成为瓶颈
- Requests per second:随并发增加是否线性增长?若增速变缓甚至下降,大概率是数据库或缓存拖慢
- Transfer rate:偏低但响应时间高?可能是后端生成内容慢(如模板渲染、循环查库),而非网络问题
进阶建议:用 JMeter 替代 ab 测试复杂动态场景
ab 适合快速验证单接口吞吐,但对以下情况力不从心:
- 需多步串联(登录 → 获取 token → 调用业务接口)
- 需校验响应体内容(如 JSON 字段
"status": "success") - 需模拟不同用户参数(CSV 数据驱动)、随机延迟、条件分支
此时推荐 Apache JMeter:
新建线程组 → 添加 HTTP 请求(支持变量、正则提取器、JSON 提取器)→ 添加监听器(聚合报告 + 查看结果树)→ 直接运行。它能真实还原用户级动态交互链路。










