Files
platforms/checking/02-总体测试计划.md

152 lines
11 KiB
Markdown
Raw Permalink 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.
# apps、frontend、backend 总体测试计划
## 1. 目标
本计划用于验证当前已实现的两类 App、三个业务管理端、官网以及 API、Worker、IoT Gateway、IoT Server 四个后端进程,确保:
- 业务主责与数据边界正确,没有通过其他终端越权改写事实。
- 设备控制、安全事件、订单履约、资金和审计形成可追踪闭环。
- 身份、角色、菜单能力、组织、区域和对象归属在服务端真实生效。
- 写操作可幂等重试,异步结果不被误报为同步成功。
- 弱网、离线、超时、重复回调、进程重启和依赖故障时数据仍一致。
- Web/App 的构建、兼容性、可用性、隐私和发布配置符合上线要求。
## 2. 被测范围
| 层级 | 模块 | 重点 |
| --- | --- | --- |
| App | `apps/user_app` | 注册登录、资料、地址、服务关系、内容、商城、订单、合同、工单、钱包Release 不暴露 Mock/未上线能力 |
| App | `apps/service_app` | 登录、准入、考勤、任务、配送轨迹、到达/异常/恢复/签收、取证、定位、加密暂存和离线补传 |
| Web | `frontend/platform_admin` | 平台治理、机构、账户/RBAC、产品、订单、钱包、财务、审计与资源契约 |
| Web | `frontend/gas_admin` | 气站人员、配送点、用户、合同、订单、钱包、结算、工单和数据范围 |
| Web | `frontend/delivery_admin` | 配送点人员、用户、地址、订单、资金、报表和组织隔离 |
| Web | `frontend/site` | 官网内容、导航、响应式、静态资源、可访问性、SEO 基础、构建与托管 Worker |
| 后端 | `backend/api` | Gin API/BFF、JWT、权限、同步事务、状态动作、金额、幂等、审计、上传和数据库事实 |
| 后端 | `backend/worker` | 支付超时关单、IoT Outbox 认领与投递、重试触发、内部令牌、超时和优雅退出 |
| 后端 | `backend/iot-gateway` | 无状态命令转发、上行回调转发、内部鉴权、过期拦截、请求体限制和上游故障映射 |
| 后端 | `backend/iot-server` | Mochi MQTT Broker、每设备认证与 Topic ACL、V1.8 帧/AES/LRC8、上下行、回执和遥测解析 |
真实支付、短信、地图、对象存储、电子合同和 MQTT 厂商硬件等,以受控沙箱或模拟器验证;生产联调另设上线前检查点。
## 3. 测试分层
| 层级 | 主要内容 | 自动化目标 | 失败定位 |
| --- | --- | --- | --- |
| L0 静态与供应链 | format/lint/analyze/type check、依赖漏洞、密钥扫描、许可证 | 每次提交 | 文件/依赖 |
| L1 单元测试 | 状态机、金额、权限、幂等、序列化、ViewModel、领域规则 | 每次提交;关键规则 100% 分支覆盖 | 函数/规则 |
| L2 组件/接口测试 | Router+Logic+DB、Vue/Flutter 组件、上传边界、错误码 | 每次合并请求 | 组件/API |
| L3 契约测试 | 后端路由、资源契约、请求响应 Schema、客户端 claim | 每次接口变更 | 契约消费者/提供者 |
| L4 集成测试 | API+PostgreSQL+Redis、Worker、Gateway、MQTT Server、设备模拟器、对象存储替身 | 每日或候选版 | 服务/依赖 |
| L5 跨端 E2E | App/Web 经真实 API 完成跨角色流程 | 每日冒烟、候选版全回归 | 业务链路 |
| L6 专项测试 | 安全、性能、稳定性、弱网、兼容性、可访问性、灾备 | 候选版 | 系统能力 |
| L7 UAT/发布验证 | AC-01AC-25、运营/财务/安全签字、生产冒烟 | 发布前后 | 验收口径 |
## 4. 核心测试设计原则
每个关键写操作至少设计以下六类用例:
1. 合法首次请求成功,数据库事实、审计和返回值一致。
2. 相同幂等键重复请求不重复建单、扣款、入账、派单或下发命令。
3. 无令牌、错误 client claim、禁用账号、错误角色、跨组织和跨对象访问被服务端拒绝。
4. 非法状态跳转被稳定错误码拒绝,不能用通用 CRUD 直接写 `status`
5. 依赖超时、回执丢失或进程重启后进入明确的待确认/可重试状态,不误报成功。
6. 失败后可查询、可补偿、可审计;日志不泄露令牌、密码、完整手机号、证件、银行卡或精确轨迹。
## 5. 功能测试主题
### 5.1 身份与权限
- 平台、气站、配送点、用户 App、服务 App 的令牌不得跨 client 使用。
- 验证登录、验证码时效与单次消费、密码修改/重置、账号禁用、会话撤销。
- 验证角色菜单、按钮能力、直接调用 API、猜测 `identity`、分页/搜索/导出均不能越权。
- 验证平台全局、气站、配送点、服务人员、用户本人之间的数据范围。
### 5.2 设备与安全
- 设备绑定、占用冲突、远程开关、命令幂等、回执、超时待确认、审计串联。
- 高风险事件自动关阀、通知、SLA、整改、复检和未整改开阀拦截。
- 遥测乱序、重复、未来时间、非法单位、设备伪造、离线/重连与批量峰值。
### 5.3 订单、履约与现场作业
- 商品/合同/订单/任务的创建、分派、履约、异常、恢复、取消、完成状态机。
- 服务人员资质、培训、上班、区域、任务归属等前置条件由服务端校验。
- 照片、视频、签名、定位、扫码、材料与收款等强制证据不可绕过。
- 弱网补传保留采集时间、接收时间、操作者、任务、来源、完整性、哈希和幂等键。
### 5.4 钱包与财务
- 金额均为最小货币单位整数,覆盖 0、边界值、超额、并发与溢出。
- 充值、支付、退款、提现预扣/驳回/打款、结算、对账的事务一致性和不可变流水。
- 回调签名、金额、订单、商户身份、重复/乱序回调和伪造回调。
- 统一 `payment_order` 创建、客户端参数最小化、超时关单、过期后支付进入异常待确认。
- 用户退款按订单项和数量校验退款窗口、履约状态与累计金额;审核通过后同事务入钱包并写不可变流水。
- 始终满足 `0 <= 可提现余额 <= 总余额`,申请人不能篡改审核和打款状态。
### 5.5 内容、上传与隐私
- 文件类型、真实 MIME、大小、恶意文件、授权、对象关联、短期访问和审计。
- 手机号、地址、证件、银行卡、定位、照片/视频按角色脱敏和最小化展示。
- 注销前置条件、去标识化、留存与不可删除审计事实。
## 6. 非功能测试
### 性能与容量
- API登录、列表、下单、支付回调、轨迹上报、设备命令分别建立基线报告 P50/P95/P99、吞吐、错误率和资源使用。
- 数据库:关注锁等待、慢 SQL、分页深度、索引命中、并发扣款和唯一约束冲突。
- IoT按目标设备数×上报频率模拟稳定流量和突发告警在业务方给出容量目标前只产出基线不擅自设定上线阈值。
- Web/App首屏、路由切换、大列表、弱网启动、包体积与内存阈值由候选版基线和产品 SLO 冻结。
### 安全
- OWASP Web/API/Mobile 常见风险、水平/垂直越权、注入、SSRF、XSS、CSRF 适用性、CORS、路径穿越、上传绕过。
- JWT 伪造/过期/重放/client 混用,验证码和支付密码暴力破解与限流。
- 敏感字段加密、日志/崩溃报告/缓存/剪贴板/截图风险Release 包配置和调试入口。
- MQTT 设备身份、TLS、主题 ACL、伪造遥测和命令回执在真实接入后专项验证。
### IoT 协议与链路
- API 创建命令与 Outbox 必须同事务;相同幂等键返回同一命令,不产生第二条待投递事实。
- Worker 使用 `SKIP LOCKED` 认领 Outbox经 Gateway 投递至 IoT Server失败按状态与可用时间重试卡在 processing 的记录可被重新认领。
- Gateway 不保存业务事实;校验内部令牌、命令过期时间、动作和请求体大小,并正确映射上游拒绝或不可用。
- IoT Server 验证每设备凭证和 Topic ACLV1.8 帧覆盖边界、长度、大端序、AES-128、LRC8、BCD 时间、实时数据块和阀门动作编码。
- ACK 依据设备号、包序号和控制位更新命令;无 ACK 保持待确认,重复 ACK 不产生重复命令或业务动作。
### 可靠性与恢复
- API、Worker、IoT Gateway、IoT Server 重启;数据库/Redis/对象存储/MQTT 短时不可用;网络分区与时钟偏移。
- 当前 IoT Outbox 的认领、processing 超时回收、失败重试和积压必须测试;死信上限与 Redis Streams 唤醒尚未落地,作为上线待决项记录。
- 备份恢复演练验证核心数据完整性,并记录实测 RPO/RTO目标值需业务确认。
### 兼容性与可访问性
- App至少覆盖当前支持的 Android/iOS 最低版、主流版和一档旧设备;相机、定位、权限拒绝/撤销、后台限制、深浅色和字体缩放。
- WebChrome/Edge 当前与前一主版本,至少补一轮 Safari1366×768、1920×1080 和常见平板宽度。
- 关键表单、弹窗、错误提示和风险状态支持键盘、焦点可见、语义标签、文本说明和颜色对比。
## 7. 缺陷分级
| 等级 | 定义 | 发布要求 |
| --- | --- | --- |
| P0 | 安全/资金事实错误、远程控制失控、数据不可恢复、全站不可用 | 立即停止测试与发布 |
| P1 | 核心流程阻断、越权、重复扣款/建单、审计缺失、严重隐私泄露 | 必须修复并全链路回归 |
| P2 | 重要功能错误且有绕行方案、兼容性或性能明显退化 | 原则上修复;延期需书面风险接受 |
| P3 | 轻微交互、文案、样式或低频边界问题 | 可带已知问题发布 |
## 8. 角色与产物
- 测试负责人:版本范围、计划、排期、风险、日报和发布建议。
- 开发负责人:单元/接口测试、可测试性、数据脚本、日志和缺陷修复。
- 产品/业务:确认正常与异常口径,签署 AC-01AC-25。
- 安全/财务/运维:分别签署高风险设备与隐私、资金、性能/备份/灾备结果。
- 每轮必备产物:版本清单、环境清单、用例集、自动化报告、专项报告、缺陷清单、复测证据、残余风险和签字记录。
## 9. 完成标准
- AC-01AC-25 均有用例、执行结果和证据,没有“未覆盖但默认通过”。
- P0/P1 为 0P2 延期均有责任人、截止时间、影响和风险接受人。
- 所有受影响模块的静态检查、单元、契约和构建通过;关键链路 E2E 通过。
- 设备、安全、订单、支付、提现、检查、整改、敏感访问的审计可按 `request_id`/`identity` 串联。
- 安全、性能、弱网/离线和恢复专项完成IoT 模拟器、真实设备、TLS/证书与厂商联调分层记录,模拟通过不得写成真实设备验收通过。