第 5 章 · Web UI 与无头模式
本章目标:读懂 Web UI 的统计指标与图表,掌握 headless 模式的全部参数,学会用 CSV 和 HTML 报告保存压测结果。
5.1 Web UI 界面解读
启动 locust 后访问 http://localhost:8089,核心指标集中在 Statistics 标签页:
| 列名 | 含义 |
|---|---|
| Type | 请求方法(GET/POST) |
| Name | 请求路径(或 name 参数指定的归组名) |
| # Requests | 已完成的请求总数 |
| # Fails | 失败数(HTTP 非 2xx 或手动 failure) |
| Median (ms) | 响应时间中位数 |
| 95%ile / 99%ile | 第 95/99 百分位响应时间 |
| Average (min/max) | 平均 / 最小 / 最大响应时间 |
| Current RPS | 当前每秒请求数 |
Charts 标签页有三张实时图:Total Requests per Second、Response Times (ms)、Number of Users。
如何判断系统到达瓶颈
当用户数持续增加但 RPS 曲线趋于平缓、同时响应时间急剧上升时——目标系统已饱和。如果响应时间平稳且 RPS 未达标,说明还需继续加压。
5.2 Headless 模式:无界面运行
CI 流水线中没有浏览器,用 --headless 直接在命令行指定全部参数:
locust --headless \
--users 50 \
--spawn-rate 5 \
--run-time 2m \
-H https://httpbin.org| 参数 | 缩写 | 说明 |
|---|---|---|
--users | -u | 峰值并发用户数 |
--spawn-rate | -r | 用户生成速率(每秒新增) |
--run-time | -t | 运行时长(如 30s、2m、1h30m) |
-H / --host | — | 目标主机地址 |
--headless | — | 不启动 Web UI |
运行结束时在终端输出最终统计表:
Type Name # reqs # fails | Avg Min Max Median | # reqs/sec
GET /get 1500 0(0%)| 210 180 890 200 | 12.50
--------- ------------------------------------------------------------------------------
Aggregated 1500 0(0%)| 210 180 890 200 | 12.50运行中调整
即使在 headless 模式下也可以通过键盘实时增减用户:按 w 增加 1 个、W 增加 10 个、s 减少 1 个、S 减少 10 个。
5.3 CSV 输出
加一个参数即可把完整统计数据写入磁盘:
locust --headless --users 20 --run-time 1m \
-H https://httpbin.org \
--csv results/run_001会自动生成三个文件:
| 文件 | 内容 |
|---|---|
results/run_001_stats.csv | 最终统计表(每行一个接口) |
results/run_001_stats_history.csv | 按时间切片的历史数据(适合画趋势图) |
results/run_001_failures.csv | 所有失败请求的详情 |
stats_history.csv 是最有价值的文件——可以用 pandas 或 Excel 画出整场压测的 RPS 与响应时间变化曲线:
import pandas as pd
df = pd.read_csv("results/run_001_stats_history.csv")
df.plot(x="Timestamp", y="Current RPS")5.4 HTML 报告
需要向团队汇报结果时,HTML 报告是最直观的形式:
locust --headless --users 50 --run-time 2m \
-H https://httpbin.org \
--html report_{u}u_{r}ps.html文件名支持占位符:
{u}→ 并发用户数{r}→ spawn rate{t}→ 运行时长
生成的单文件 HTML 包含完整的统计表格和交互式图表,可直接发送给不装 Python 的同事查看。Web UI 模式下也有 Download Report 按钮,效果相同。
本章小结
- Statistics 表关注三列即可定位问题:# Fails、95%ile、Current RPS;
- Charts 中"RPS 平缓 + 响应时间飙升"= 目标系统饱和信号;
- headless 三件套:
--users+--spawn-rate+--run-time; --csv产出三个文件,其中 stats_history 适合画趋势;--html生成自包含报告,支持 {u}/{r}/{t} 占位符。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. Statistics 表中 95%ile = 800ms 表示什么?
2. --csv 参数会生成几个文件?
3. --html report_{u}u.html 中的 {u} 占位符代表什么?
4. headless 模式运行中想临时增加 10 个用户,应该怎么做?
🛠️ 动手实践
- 用 headless 模式跑一次
--users 30 --spawn-rate 3 --run-time 90s,并生成 CSV 和 HTML 报告。 - 用 pandas 读取
stats_history.csv,画出 RPS 随时间变化的折线图。 - 对比
--users 10和--users 100两次压测的 P95 响应时间,写一段分析结论。
完成后进入第 6 章。