1.9 KiB
注册压测
在项目根目录运行:
uv sync
uv run alembic upgrade head
uv run python scripts/load_test.py --seconds 20
脚本使用当前环境配置的真实 MySQL 和 Redis,自动启动本地单 worker Uvicorn
服务(关闭 reload 和 access log),依次测试 1、4、8、16、32、64 个并发注册。
每个档位持续发起请求 20 秒,然后等待在途请求完成;吞吐量包含收尾时间。
可以使用 --concurrency 1 8 32 --seconds 60 调整档位和时长。
指标包括注册成功数、HTTP/网络错误、成功吞吐量、平均/P50/P95/P99/最大延迟,
以及压测期间 /api/users/me 的响应延迟、错误数、服务进程树 CPU 和峰值 RSS。
普通认证探针每次响应后等待 100ms 再发起请求,只有一个在途探针,不能代表大量普通用户。
CPU 的 100% 代表占满一个逻辑核心;内存是服务进程树 RSS 之和,可能包含共享页重复计算。
客户端与服务在同一台机器运行,资源采样间隔随探针响应耗时变化,峰值可能漏采。
基线分别测量 10 次热连接 SELECT 1、Redis PING、本机 Argon2 哈希和无注册负载的
用户资料请求。网络指标包含远程服务处理时间,不等于纯网络延迟。
P95/P99 使用 nearest-rank 算法;短测样本少,不能据此推断长期稳定性或生产容量。
这是闭环并发测试,并发数表示同时在途的注册请求数,不是在线用户总数。
报告默认保存到 artifacts/load-test.json,可使用 --output 指定路径。
报告不包含密码、令牌和连接地址。结束后删除本轮随机前缀用户及对应 Redis 会话,
并记录残留计数;保留表结构和其他数据。异常时也会尝试清理,但强制结束整个脚本、
断电或依赖不可用时无法保证清理成功,应检查报告中的 cleanup 字段。