# 第一版系统化测试进度 ## 2026-07-01 ### 新增测试基础 - API 引入 Jest + ts-jest。 - API 新增脚本: - `npm --prefix api test` - `npm --prefix api test -- ` - 根目录新增脚本: - `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 build npm run spike:gateway npm --prefix api test npm run test:gateway node tools/smoke/real-env-smoke.mjs $env:API_PORT='3101'; npm --prefix api run start:dev node $env:API_PORT='3101'; $env:API_ENABLE_SEND_WORKER='true'; npm --prefix api run start:dev node node $env:API_PORT='3101'; npm --prefix api run start:dev node node npm run spike:contracts npm run test:gateway $env:API_PORT='3101'; $env:API_ENABLE_SEND_WORKER='true'; npm --prefix api run start:dev node npm run verify:phase8 npm run test:api npm run test:gateway ``` ### 当前结果 - API Jest:5 个 test suite 通过,22 个测试通过。 - Gateway:`npm run spike:gateway` 通过。 - 阶段 8 完整验证:`npm run verify:phase8` 通过,其中 BullMQ spike 15000 条消息、并发 500、端到端 705.65 TPS,满足 500 TPS。 - 前端 build 通过,仍存在既有 Vite chunk size warning。 - API 测试均使用 mock,不要求 PostgreSQL/Redis/MinIO 在线。 - 真实 PostgreSQL/Redis/MinIO smoke 通过: - PostgreSQL `localhost:5432`、Redis `localhost:6379`、MinIO `localhost:9000/9001` 端口均连通。 - `npm --prefix api run prisma:migrate:deploy` 通过,无待应用迁移。 - API 以真实 `.env` 启动,`GET http://127.0.0.1:3101/api/health` 返回 `ok`。 - `tools/smoke/real-env-smoke.mjs` 已补充最小幂等 seed,并验证登录、企业/客户、人工充值、余额检查、发送任务、MinIO 预签名上传、运营日志、发送链路追踪和账务对账聚合。 - 第 4 步发送前置校验 smoke 通过: - `TC-TEMPLATE-001`、`TC-TEMPLATE-002`、`TC-TEMPLATE-003 / TC-RISK-005`、`TC-RISK-001`、`TC-RISK-002`、`TC-RISK-003`、`TC-RISK-004`、`TC-BILLING-001 / TC-TEMPLATE-005`、`TC-BILLING-PRECHECK-001` 均通过。 - 记录两个接口健壮性问题:不存在的 `reviewerId`、不存在的 `createdById` 会触发数据库外键 500。 - 客户侧导入发送、非法字符展示、敏感词接入发送前风控当前缺少完整入口,已在 `docs/testing-execution-step-4.md` 记录为阻塞缺口。 - 第 5 步发送链路 smoke 通过: - `TC-SEND-001 / TC-SEND-002`、`TC-SEND-003 / TC-SEND-004`、`TC-SEND-005`、`TC-SEND-006`、`TC-SEND-007`、`TC-SEND-008`、`TC-SEND-009 / TC-SEND-010` 均通过。 - 使用真实 Redis/BullMQ 和 `API_ENABLE_SEND_WORKER=true` 验证了任务创建、号码去重拆分、自动入队、Worker 消费、submit record、submit result、receipt、uplink、72 小时 unknown 转 timeout、客户端/运营端任务查看。 - 定时发送探测发现 `scheduledAt/sendMode=scheduled` 会被接口忽略,任务直接变为 `queued`,已在 `docs/testing-execution-step-5.md` 记录为功能缺口。 - 第 6 步计费和对账 smoke 通过: - `TC-BILLING-001`、`TC-BILLING-002 / TC-RECHARGE-001`、`TC-BILLING-003`、`TC-BILLING-004 / TC-BILLING-005 / TC-BILLING-006 / TC-BILLING-007`、`TC-BILLING-008 / TC-RECON-001 seed`、`TC-RECON-001`、`TC-DASHBOARD-001 / TC-STAT-001`、`TC-TRACE-001`、`TC-BILLING-009` 均通过。 - 验证了费用预估、人工充值、余额检查、冻结、扣费、释放、退款、短信计费记录、账务流水、dashboard/statistics、trace 和 reconciliation。 - 自动计费探测发现发送任务不会自动生成短信计费记录、账户交易流水,消息金额默认为 0,已在 `docs/testing-execution-step-6.md` 记录为发送计费集成缺口。 - 第 7 步客户/通道 CMPP 连接状态和 Gateway smoke 通过: - `TC-GW-CONTRACT-001`、`TC-GW-001`、`TC-GW-002`、`TC-GW-003`、`TC-GW-004`、`TC-CMPP-STATUS-001 / TC-CHANNEL-001`、`TC-CHANNEL-ROUTE-001`、`TC-CHANNEL-METRIC-001`、`TC-CMPP-SESSION-001 / TC-CONNECTION-COUNT-001`、`TC-CMPP-STATUS-002 / TC-OPERATIONS-MONITOR-001`、`TC-GATEWAY-EVENT-001` 均通过。 - 验证了 Gateway 队列契约、Go Gateway health/重连/tracker/gocmpp 模拟器、通道创建、路由、metrics、submit session、通道维度监控和 Gateway submit event trace。 - 客户级 CMPP 连接状态、客户连接数量、通道连接列表和 Gateway health 聚合到运营 dashboard 尚缺少一等 API,已在 `docs/testing-execution-step-7.md` 记录。 - 第 8 步最终回归通过: - `npm run verify:phase8` 通过,BullMQ 15000 条消息、并发 500、端到端 TPS 668.71,满足 500 TPS;Prisma generate、API build、前端 build 均通过。 - `npm run test:api` 通过,5 个 test suite、22 个 tests 全部通过。 - `npm run test:gateway` 通过,Go Gateway health、connection、tracker、cmpp、spike 测试全部通过。 - 最终归档见 `docs/testing-execution-step-8.md`。 ### 已知缺口 - 暂未新增前端测试框架,前端仍以 `npm run build` 作为 smoke。 - BullMQ 真实链路仍由 `npm run spike:bullmq` 覆盖,不在 Jest 内启动 Redis。 - Gateway 未接真实运营商 SMSC;真实 CMPP 互通需要运营商测试环境后补充联调记录。 - 客户侧导入发送、短信内容非法字符展示和敏感词发送前拦截尚未形成完整业务入口。 - 定时短信发送缺少计划发送时间字段、scheduled 状态、到点触发和取消接口。 - 发送链路尚未自动接入计费闭环,发送任务不会自动冻结/扣费/生成短信计费记录。 - 客户/通道 CMPP 连接状态和连接数量尚未形成运营端/客户端一等接口,Gateway health 未聚合到 NestJS dashboard。 ## 2026-07-01 缺口修复复测 ### 本轮修复范围 - P0 定时短信发送闭环: - `SmsBatchTask` 增加 `scheduledAt`、`canceledAt` 字段和 `status/scheduledAt` 索引。 - `CreateBatchTaskDto` 支持 `sendMode=scheduled`、`scheduledAt`。 - 新增定时任务取消和到点触发入口:`POST /api/client/send/batch-tasks/:id/cancel`、`POST /api/admin/send/scheduled/dispatch-due`。 - 到点触发前重新校验企业状态、认证状态、应用状态、模板审核状态、签名审核/报备状态和账户余额。 - P0 发送链路自动计费闭环: - 发送创建时按通道单价写入消息计费条数、单价和金额。 - 立即发送创建时执行账户检查和冻结;定时发送创建时检查余额,到点再冻结。 - submit accepted 后生成/更新 `SmsBillingRecord`、写入 charged 流水;submit rejected/timeout 释放冻结;失败回执和 72 小时超时执行退款。 - P0 发送前内容校验: - 风控评估接入敏感词字典和控制字符扫描。 - `variableIssues` 扩展为 `{ variables, content }`,同时保留变量异常和内容异常证据。 - emoji/UCS2、多空格和换行不直接拒绝,继续通过 70/67 字符长度影响计费。 - P1/P2 补齐: - 新增企业认证模型/API,提交、审核通过、驳回会同步 `Tenant.certificationStatus`,发送前强制认证通过。 - 新增客户侧导入预览/确认入口,覆盖 CSV/TXT 文本解析、20MB 限制、重复/非法/黑名单/变量缺失提示。 - 新增客户/通道 CMPP 连接状态模型/API,Gateway/mock 可回写连接状态,运营 dashboard 聚合连接状态。 - 新增应用密钥重置、应用/签名/模板状态变化、通道启停接口,并写入系统日志。 - 无效 `createdById`、`reviewerId` 改为明确 400,不再冒泡数据库外键 500。 ### 新增/更新测试 | 测试文件 | 新增覆盖 | | --- | --- | | `api/src/send-chain/send-chain.service.spec.ts` | TC-SCHEDULE-001 到 006、TC-BILLING-AUTO-001 到 004、TC-IMPORT-001 到 006 子集、企业认证/状态阻断。 | | `api/src/risk-review/risk-review.service.spec.ts` | TC-CONTENT-001 到 004 子集、敏感词和控制字符拦截、无效 createdById。 | | `api/src/certification/certification.service.spec.ts` | TC-CERT-001 到 004 子集,认证提交、审核、驳回和租户状态同步。 | | `api/src/channels/channels.service.spec.ts` | 通道启停日志、通道连接状态 upsert/list、客户连接状态 list。 | | `api/src/sms-config/sms-config.service.spec.ts` | 无效 reviewerId 400,避免审核外键 500。 | | `api/src/operations/operations.service.spec.ts` | Dashboard Gateway 连接状态聚合。 | ### 已执行命令 ```bash npm run prisma:generate npm --prefix api test -- send-chain.service.spec.ts risk-review.service.spec.ts sms-config.service.spec.ts npm --prefix api test npm --prefix api run build npm --prefix api run prisma:migrate:deploy npm run verify:phase8 npm run test:api npm run test:gateway ``` ### 当前结果 - Prisma Client 生成通过。 - 新增迁移已应用到真实 PostgreSQL: - `20260701103000_add_scheduled_sms_fields` - `20260701110000_add_certification_and_connection_state` - API build 通过。 - API Jest:7 个 test suite 通过,34 个测试通过。 - 最终回归通过: - `npm run verify:phase8` 通过,BullMQ 15000 条消息、并发 500、端到端 TPS 608.93,满足 500 TPS;Prisma generate、API build、前端 build 均通过。 - `npm run test:api` 通过,7 个 test suite、34 个 tests 全部通过。 - `npm run test:gateway` 通过,Go Gateway health、connection、tracker、cmpp、spike 测试全部通过。 ### 剩余说明 - 客户侧导入当前提供 API 级文本预览/确认闭环;浏览器端真实文件选择、GBK 二进制转码和错误文件下载仍需前端/E2E 后续覆盖。 - Gateway 连接状态通过 NestJS API 支持 mock/Gateway 回写;真实运营商 SMSC 联调仍需运营商测试环境。 ## 2026-07-02 运营端优化转真实后端补齐 ### 本轮修复范围 - 修正测试策略说明:mock 仅作为单元/轻集成测试替身,不能作为业务完成标准;新增页面能力必须接 NestJS API、Prisma/PostgreSQL 和必要操作日志。 - 通道管理补齐真实 API: - `POST /api/admin/channels/:id/copy`:复制通道配置、通道报备字段和该通道签名报备材料,写入操作日志。 - `DELETE /api/admin/channels/:id`:软删除通道,避免破坏历史发送/报备外键。 - `GET /api/admin/channels/:id/link-logs`:基于 `OperationLog` 和 `CmppConnectionState` 查询链接日志。 - 安全控制补齐真实 API:敏感词、全局黑名单、企业黑名单支持 keyword/status 查询、创建、启停/软删除,并写操作日志。 - 模板审核补齐真实查询:运营端模板列表支持 keyword/status,并返回企业、应用、签名信息;前端模板审核页已改为调用真实 API。 - 企业认证审核补齐真实查询:列表支持 keyword/status,详情返回企业信息和认证 materials;前端企业认证审核页已改为调用真实 API。 - 前端新增 `/api` Vite 代理和 `src/api/adminApi.ts`,通道管理、模板审核、企业认证审核优先调用真实 API,API 不可用时仅保留静态兜底避免开发预览空白。 ### 新增/更新测试 | 测试文件 | 新增覆盖 | | --- | --- | | `api/src/channels/channels.service.spec.ts` | 通道复制、软删除、连接状态日志写入、链接日志查询。 | | `api/src/dictionaries/dictionaries.service.spec.ts` | 敏感词、全局黑名单、企业黑名单查询、创建、软删除和操作日志。 | ### 已执行命令 ```bash npm --prefix api run build npm --prefix api test npm run build ``` ### 当前结果 - API build 通过。 - API Jest:8 个 test suite 通过,38 个测试通过。 - 前端 build 通过,仍存在既有 Vite chunk size warning。 ### 文档同步 - 已将今天的客户端和运营端优化要求补入 `docs/first-version-development-requirements.md`: - 去除客户端独立账号设置菜单,改为头像下拉承载退出登录和修改密码。 - 明确模板审核搜索、企业认证详情审核、企业应用 CMPP 连接数/连接详情/参数复制、通道复制、通道软删除、通道链接日志、安全控制 CRUD、系统日志分页等均需要真实后端 API 支撑。 - 补充客户端用户、运营端企业认证、通道、连接、字典、安全控制、系统日志等接口范围。 - 修正 Codex 执行模板,明确 mock、localStorage 或静态数据不得作为真实开发完成标准。 - 已将今天的验收点补入 `docs/system-functional-test-cases.md`: - 新增 TC-CLIENT-010 到 TC-CLIENT-011。 - 新增 TC-ADMIN-014 到 TC-ADMIN-022。