Skip to content

第 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 直接在命令行指定全部参数:

bash
locust --headless \
    --users 50 \
    --spawn-rate 5 \
    --run-time 2m \
    -H https://httpbin.org
参数缩写说明
--users-u峰值并发用户数
--spawn-rate-r用户生成速率(每秒新增)
--run-time-t运行时长(如 30s2m1h30m
-H / --host目标主机地址
--headless不启动 Web UI

运行结束时在终端输出最终统计表:

text
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 输出

加一个参数即可把完整统计数据写入磁盘:

bash
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 与响应时间变化曲线:

python
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 报告是最直观的形式:

bash
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 个用户,应该怎么做?

🛠️ 动手实践

  1. 用 headless 模式跑一次 --users 30 --spawn-rate 3 --run-time 90s,并生成 CSV 和 HTML 报告。
  2. 用 pandas 读取 stats_history.csv,画出 RPS 随时间变化的折线图。
  3. 对比 --users 10--users 100 两次压测的 P95 响应时间,写一段分析结论。

完成后进入第 6 章