Files
NixMsg/test/load/README.md
T

60 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# NixMsg 压测工具(`test/load`)
本目录提供可执行 PRD 第 8 节指标的压测客户端。**不进 CI**;`go test ./test/load/` 只跑工具自身的最小单测和短时冒烟。
长时间 1000 连接 / 每秒 200 条 / 10 分钟本轮按负责人要求不跑,但工具已能执行。本地验收口径:50 个连接、每秒 20 条、跑 1 分钟能打出报告。
## 连接规则(DEVELOPMENT 第 5 节)
- MQTT 5;`CleanStart = true`;心跳 30 秒。
- ClientID、Username 都等于端编号;Password 为登录密码。
- 只订阅 `nix/c/{编号}/down`,只向 `nix/c/{编号}/up` 发布。
- 订阅完成后发 `hello`,收到成功 `resp` 才算在线,才开始收发。
默认走 WebSocket `ws://<http>/mqtt`(子协议 `mqtt`)。也可用 `-tcp` 走裸 MQTT。
## 准备端
任选其一:
1. **管理接口批量开通**:`-admin-pass` 或 `-admin-token`。工具用 `POST /api/admin/endpoints/import` 一次最多 1000 行。
2. **自助注册**:管理员已开启注册时传 `-register-code`。
3. **复用已开通的端**:`-reuse`。编号冲突(`409 id_taken`)视为已存在并继续登录。
端编号为 `{prefix}{序号}`,默认 `qb0000` 起。登录密码默认 `password1234`。
## 场景
| `-scenario` | 行为 |
|---|---|
| `hold` | 只保持 N 条已握手连接(配合 `-hold`) |
| `dm` | 按 `-rate` 做单聊 send → 等对方 msg → ack |
| `group` | 建一个 `-group-size` 人的群,发一条,统计从提交成功到成员都收到 `msg` 的耗时(推送排队的上界) |
| `all`(默认) | 先 hold(若设置),再单聊,再群发 |
输出:提交与送达的 P50/P95/P99(毫秒)、错误码分布、连接掉线数、群推送排队耗时。
## 用法
在仓库根目录:
```text
go run ./test/load/cmd/mqttbench -http http://127.0.0.1:<端口> -admin-pass <管理员密码> -n 50 -rate 20 -duration 1m
```
常用参数:
| 参数 | 默认 | 说明 |
|---|---|---|
| `-http` | (必填,除非只测裸 TCP 且 `-reuse`) | 服务 HTTP 根 |
| `-tcp` | 空 | 裸 MQTT `host:port` |
| `-n` | 50 | 连接数 |
| `-rate` | 20 | 单聊每秒条数 |
| `-duration` | 1m | 单聊时长;`0` 跳过单聊 |
| `-group-size` | 与 `-n` 相同 | `0` 跳过群发 |
| `-reuse` | false | 复用已开通编号 |
| `-register-code` | 空 | 自助注册 |
| `-prefix` | qb | 端编号前缀 |
不要把本命令加进 `task check`。完整规模(1000 在线、每秒 200、10 分钟、1000 人群发 5 秒)在专用机器上把 `-n`/`-rate`/`-duration`/`-group-size` 调到 PRD 第 8 节即可。