test: add first-version coverage

This commit is contained in:
hectorzhao
2026-07-01 14:46:35 +08:00
parent 924457a48e
commit 91d1e38a09
13 changed files with 5484 additions and 1 deletions
+83
View File
@@ -0,0 +1,83 @@
# 第一版系统化测试计划
## 1. 测试目标
第一版测试优先保证短信业务主链路可回归:风控、计费、发送编排、通道路由与报备、查询统计、Gateway 追踪和模拟链路。不依赖真实运营商 CMPP 网关;本地没有 PostgreSQL、Redis、MinIO 时,优先使用 mock、测试替身或 spike 模拟器。
## 2. 测试分层
### 2.1 单元测试
- NestJS/API 使用 Jest + ts-jest。
- Go Gateway 使用 Go 原生 `testing`
- 目标:覆盖纯业务规则、状态流转、查询条件、Gateway tracker/reconnector/health 等无需真实外部服务的逻辑。
- 当前重点:
- 风控规则评估:最大号码数、重复率、非法号码率、黑名单率、模板变量异常、直接拒绝、进入人工审核。
- 计费:费用预估、余额检查、冻结、扣费、释放、退款、短信计费记录。
- 发送链路:批量任务创建、手机号拆分、发送入队、submit result 更新、receipt 更新、uplink 记录、72 小时未知转超时。
- 通道与报备:通道创建、路由规则、签名报备任务、导出、回执导入、签名状态同步。
- 查询统计:发送链路 trace、对账 reconciliation、dashboard/statistics。
- GatewaySEQID/MSGID 追踪、重连、health、gocmpp submit/resp 模拟器。
### 2.2 集成测试
- 第一版本轮采用“Service + mock Prisma/BullMQ/Redis”的轻集成方式,验证 NestJS service 编排和数据访问参数。
- 后续如本地或 CI 具备 PostgreSQL/Redis/MinIO,可增加:
- Prisma test database 集成测试。
- BullMQ + Redis 队列消费集成测试。
- MinIO 预签名上传集成测试。
### 2.3 契约测试
- 继续复用 `docs/contracts/gateway-queue-messages.schema.json`
- 继续使用 `tools/spike/validate-gateway-queue-contract.mjs` 校验 SubmitCommand、SubmitResult、ReceiptEvent、UplinkEvent 示例。
- 队列消息变更必须先改 schema 和示例,再改 NestJS/Gateway 实现。
### 2.4 端到端 Smoke
- 当前端到端 smoke 由阶段验证脚本覆盖:
- 队列契约校验。
- Go Gateway 测试。
- BullMQ spike。
- Prisma Client 生成。
- API build。
- 前端 build。
- 不接真实运营商网关。
- 后续可在 PostgreSQL/Redis 可用时补 API HTTP smoke:创建任务 -> 入队 -> 模拟 submit result -> 回执 -> trace 查询。
### 2.5 性能 Smoke
- 继续复用 `npm run spike:bullmq`
- 验证 15000 条消息、并发 500 的入队和端到端队列链路吞吐。
- 性能 smoke 只验证第一版“可稳定入队并调度 500 条短信/秒”的链路能力,不替代生产压测。
## 3. 执行命令
```bash
npm run spike:contracts
npm run test:api
npm run test:gateway
npm run spike:bullmq
npm run verify:phase8
```
API 目录内也可直接执行:
```bash
npm --prefix api test
```
Gateway 目录内如 Go 已在 PATH,可直接执行:
```bash
go test ./...
```
Windows 本项目推荐使用根脚本 `npm run test:gateway`,脚本会临时补充 Go 安装路径。
## 4. 已知边界
- 本轮 API 测试不连接真实 PostgreSQL、Redis、MinIO。
- 发送 Worker 的 Redis 限速和 BullMQ 投递在 unit/light integration 中使用 mock;真实 Redis 链路由 `spike:bullmq` 覆盖。
- 前端暂未新增测试框架;当前保留 `npm run build` 作为 smoke。若后续引入 Vitest/Playwright,应先覆盖登录页、客户端发送页、运营端监控页的加载 smoke。
- Gateway 不连接真实运营商 SMSC;使用 gocmpp 适配测试和内部模拟器测试。
+63
View File
@@ -0,0 +1,63 @@
# 第一版系统化测试进度
## 2026-07-01
### 新增测试基础
- API 引入 Jest + ts-jest。
- API 新增脚本:
- `npm --prefix api test`
- `npm --prefix api test -- <spec>`
- 根目录新增脚本:
- `npm run test:api`
- `npm run test:gateway`
### 新增 API 测试
| 测试文件 | 覆盖范围 |
| --- | --- |
| `api/src/risk-review/risk-review.service.spec.ts` | 最大号码数、重复率、非法号码率、黑名单率、模板变量异常、非工作时间营销大批量、短时间频控、直接拒绝、人工审核。 |
| `api/src/billing/billing.service.spec.ts` | 70/67 费用预估、余额/授信/套餐检查、充值、冻结、扣费、释放、退款、调整、短信计费记录。 |
| `api/src/send-chain/send-chain.service.spec.ts` | 批量任务创建、手机号去重拆分、发送入队、Gateway SubmitCommand 投递、submit result、receipt、uplink、72 小时未知转超时。 |
| `api/src/channels/channels.service.spec.ts` | 通道创建、路由规则、报备材料 upsert、报备任务创建、导出、回执导入、签名报备状态同步。 |
| `api/src/operations/operations.service.spec.ts` | 发送记录查询过滤、dashboard、statistics、trace、reconciliation。 |
### 新增 Gateway 测试
- `gateway/internal/tracker/tracker_test.go` 增加并发 SEQID/MSGID/GatewayMessageID 映射测试。
- 既有 Gateway 测试继续覆盖:
- tracker 基础映射和未知 submit resp。
- reconnector 重连和最终错误返回。
- health handler。
- gocmpp adapter。
- spike simulator。
### 已执行命令
```bash
npm --prefix api test -- risk-review.service.spec.ts
npm --prefix api test -- billing.service.spec.ts
npm --prefix api test -- send-chain.service.spec.ts
npm --prefix api test -- channels.service.spec.ts
npm --prefix api test -- operations.service.spec.ts
npm run test:api
npm run verify:phase8
npm run spike:gateway
npm --prefix api test
npm run test:gateway
```
### 当前结果
- API Jest5 个 test suite 通过,21 个测试通过。
- Gateway`npm run spike:gateway` 通过。
- 阶段 8 完整验证:`npm run verify:phase8` 通过,其中 BullMQ spike 15000 条消息、并发 500、端到端 735.83 TPS,满足 500 TPS。
- 前端 build 通过,仍存在既有 Vite chunk size warning。
- API 测试均使用 mock,不要求 PostgreSQL/Redis/MinIO 在线。
### 已知缺口
- 暂未新增前端测试框架,前端仍以 `npm run build` 作为 smoke。
- 暂未跑真实 PostgreSQL/Redis/MinIO 集成测试。
- BullMQ 真实链路仍由 `npm run spike:bullmq` 覆盖,不在 Jest 内启动 Redis。
- Gateway 未接真实运营商 SMSC;真实 CMPP 互通需要运营商测试环境后补充联调记录。