152 lines
11 KiB
Markdown
152 lines
11 KiB
Markdown
# 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-01~AC-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 ACL;V1.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 最低版、主流版和一档旧设备;相机、定位、权限拒绝/撤销、后台限制、深浅色和字体缩放。
|
||
- Web:Chrome/Edge 当前与前一主版本,至少补一轮 Safari;1366×768、1920×1080 和常见平板宽度。
|
||
- 关键表单、弹窗、错误提示和风险状态支持键盘、焦点可见、语义标签、文本说明和颜色对比。
|
||
|
||
## 7. 缺陷分级
|
||
|
||
| 等级 | 定义 | 发布要求 |
|
||
| --- | --- | --- |
|
||
| P0 | 安全/资金事实错误、远程控制失控、数据不可恢复、全站不可用 | 立即停止测试与发布 |
|
||
| P1 | 核心流程阻断、越权、重复扣款/建单、审计缺失、严重隐私泄露 | 必须修复并全链路回归 |
|
||
| P2 | 重要功能错误且有绕行方案、兼容性或性能明显退化 | 原则上修复;延期需书面风险接受 |
|
||
| P3 | 轻微交互、文案、样式或低频边界问题 | 可带已知问题发布 |
|
||
|
||
## 8. 角色与产物
|
||
|
||
- 测试负责人:版本范围、计划、排期、风险、日报和发布建议。
|
||
- 开发负责人:单元/接口测试、可测试性、数据脚本、日志和缺陷修复。
|
||
- 产品/业务:确认正常与异常口径,签署 AC-01~AC-25。
|
||
- 安全/财务/运维:分别签署高风险设备与隐私、资金、性能/备份/灾备结果。
|
||
- 每轮必备产物:版本清单、环境清单、用例集、自动化报告、专项报告、缺陷清单、复测证据、残余风险和签字记录。
|
||
|
||
## 9. 完成标准
|
||
|
||
- AC-01~AC-25 均有用例、执行结果和证据,没有“未覆盖但默认通过”。
|
||
- P0/P1 为 0;P2 延期均有责任人、截止时间、影响和风险接受人。
|
||
- 所有受影响模块的静态检查、单元、契约和构建通过;关键链路 E2E 通过。
|
||
- 设备、安全、订单、支付、提现、检查、整改、敏感访问的审计可按 `request_id`/`identity` 串联。
|
||
- 安全、性能、弱网/离线和恢复专项完成;IoT 模拟器、真实设备、TLS/证书与厂商联调分层记录,模拟通过不得写成真实设备验收通过。
|