audit full project flows and harden backend

This commit is contained in:
2026-08-03 16:03:44 +08:00
parent d8d62469d6
commit 95b6f2b69c
22 changed files with 505 additions and 890 deletions

View File

@@ -2,7 +2,7 @@
## 1. 目标
本计划用于验证当前已实现的两类 App、三个业务管理端、官网以及 API/Worker/IoT 三个后端进程,确保:
本计划用于验证当前已实现的两类 App、三个业务管理端、官网以及 APIWorker、IoT Gateway、IoT Server 四个后端进程,确保:
- 业务主责与数据边界正确,没有通过其他终端越权改写事实。
- 设备控制、安全事件、订单履约、资金和审计形成可追踪闭环。
@@ -22,10 +22,11 @@
| Web | `frontend/delivery_admin` | 配送点人员、用户、地址、订单、资金、报表和组织隔离 |
| Web | `frontend/site` | 官网内容、导航、响应式、静态资源、可访问性、SEO 基础、构建与托管 Worker |
| 后端 | `backend/api` | Gin API/BFF、JWT、权限、同步事务、状态动作、金额、幂等、审计、上传和数据库事实 |
| 后端 | `backend/worker` | 配置、启动、Mock 循环、优雅退出;未来 Outbox/Streams 的投递、重试、死信和积压 |
| 后端 | `backend/iot-gateway``backend/iot-server` | 配置、启动、无状态转发、协议编解码、MQTT TLS、身份、遥测、回执和断线重连 |
| 后端 | `backend/worker` | 支付超时关单、IoT Outbox 认领与投递、重试触发、内部令牌、超时和优雅退出 |
| 后端 | `backend/iot-gateway` | 无状态命令转发、上行回调转发、内部鉴权、过期拦截、请求体限制和上游故障映射 |
| 后端 | `backend/iot-server` | Mochi MQTT Broker、每设备认证与 Topic ACL、V1.8 帧/AES/LRC8、上下行、回执和遥测解析 |
不修改 `sample/`真实支付、短信、地图、对象存储、电子合同MQTT 厂商接入等,以受控沙箱或 Mock 验证;生产联调另设上线前检查点。
真实支付、短信、地图、对象存储、电子合同MQTT 厂商硬件等,以受控沙箱或模拟器验证;生产联调另设上线前检查点。
## 3. 测试分层
@@ -35,10 +36,10 @@
| L1 单元测试 | 状态机、金额、权限、幂等、序列化、ViewModel、领域规则 | 每次提交;关键规则 100% 分支覆盖 | 函数/规则 |
| L2 组件/接口测试 | Router+Logic+DB、Vue/Flutter 组件、上传边界、错误码 | 每次合并请求 | 组件/API |
| L3 契约测试 | 后端路由、资源契约、请求响应 Schema、客户端 claim | 每次接口变更 | 契约消费者/提供者 |
| L4 集成测试 | API+PostgreSQL+Redis/Mock、Worker、IoT、对象存储替身 | 每日或候选版 | 服务/依赖 |
| L4 集成测试 | API+PostgreSQL+Redis、Worker、Gateway、MQTT Server、设备模拟器、对象存储替身 | 每日或候选版 | 服务/依赖 |
| L5 跨端 E2E | App/Web 经真实 API 完成跨角色流程 | 每日冒烟、候选版全回归 | 业务链路 |
| L6 专项测试 | 安全、性能、稳定性、弱网、兼容性、可访问性、灾备 | 候选版 | 系统能力 |
| L7 UAT/发布验证 | AC-01AC-24、运营/财务/安全签字、生产冒烟 | 发布前后 | 验收口径 |
| L7 UAT/发布验证 | AC-01AC-25、运营/财务/安全签字、生产冒烟 | 发布前后 | 验收口径 |
## 4. 核心测试设计原则
@@ -78,6 +79,8 @@
- 金额均为最小货币单位整数,覆盖 0、边界值、超额、并发与溢出。
- 充值、支付、退款、提现预扣/驳回/打款、结算、对账的事务一致性和不可变流水。
- 回调签名、金额、订单、商户身份、重复/乱序回调和伪造回调。
- 统一 `payment_order` 创建、客户端参数最小化、超时关单、过期后支付进入异常待确认。
- 用户退款按订单项和数量校验退款窗口、履约状态与累计金额;审核通过后同事务入钱包并写不可变流水。
- 始终满足 `0 <= 可提现余额 <= 总余额`,申请人不能篡改审核和打款状态。
### 5.5 内容、上传与隐私
@@ -102,10 +105,18 @@
- 敏感字段加密、日志/崩溃报告/缓存/剪贴板/截图风险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 重启;数据库/Redis/对象存储/MQTT 短时不可用;网络分区与时钟偏移。
- Outbox、消费幂等、重试、死信和积压只在持久化消息契约落地作为上线硬门禁
- API、Worker、IoT Gateway、IoT Server 重启;数据库/Redis/对象存储/MQTT 短时不可用;网络分区与时钟偏移。
- 当前 IoT Outbox 的认领、processing 超时回收、失败重试和积压必须测试;死信上限与 Redis Streams 唤醒尚未落地作为上线待决项记录
- 备份恢复演练验证核心数据完整性,并记录实测 RPO/RTO目标值需业务确认。
### 兼容性与可访问性
@@ -127,14 +138,14 @@
- 测试负责人:版本范围、计划、排期、风险、日报和发布建议。
- 开发负责人:单元/接口测试、可测试性、数据脚本、日志和缺陷修复。
- 产品/业务:确认正常与异常口径,签署 AC-01AC-24
- 产品/业务:确认正常与异常口径,签署 AC-01AC-25
- 安全/财务/运维:分别签署高风险设备与隐私、资金、性能/备份/灾备结果。
- 每轮必备产物:版本清单、环境清单、用例集、自动化报告、专项报告、缺陷清单、复测证据、残余风险和签字记录。
## 9. 完成标准
- AC-01AC-24 均有用例、执行结果和证据,没有“未覆盖但默认通过”。
- AC-01AC-25 均有用例、执行结果和证据,没有“未覆盖但默认通过”。
- P0/P1 为 0P2 延期均有责任人、截止时间、影响和风险接受人。
- 所有受影响模块的静态检查、单元、契约和构建通过;关键链路 E2E 通过。
- 设备、安全、订单、支付、提现、检查、整改、敏感访问的审计可按 `request_id`/`identity` 串联。
- 安全、性能、弱网/离线和恢复专项完成;未具备真实依赖的项目明确标记“受限通过”,不得写成已完成生产验收
- 安全、性能、弱网/离线和恢复专项完成;IoT 模拟器、真实设备、TLS/证书与厂商联调分层记录,模拟通过不得写成真实设备验收通过

View File

@@ -5,8 +5,9 @@
| 流程 | 参与端/进程 | 必测断言 |
| --- | --- | --- |
| 用户注册与服务归属 | user_app → API → gas/delivery admin | 邀请范围/时效/次数/地址校验;已有账号不重复创建;归因可审计 |
| 设备绑定与远控 | user_app/platform_admin → API → IoT → 设备 Mock | 归属鉴权、幂等键、命令 ID、回执、超时待确认、审计高风险开阀拦截 |
| 告警整改闭环 | IoT → API/Worker → user_app/service_app/platform_admin | 事件分级、自动关阀、通知、SLA、派单、证据、复检、关闭与全链路审计 |
| 设备绑定与远控 | user_app/platform_admin → API → Outbox → Worker → Gateway → IoT Server → MQTT 设备 | 归属鉴权、事务、幂等键、命令 ID、包序号、回执、超时待确认、审计;高风险开阀拦截 |
| 告警整改闭环 | MQTT 设备 → IoT Server → Gateway → API/Worker → user_app/service_app/platform_admin | 原始帧、设备/接收时间、事件分级、自动关阀、通知、SLA、派单、证据、复检、关闭与审计 |
| 渠道支付与退款 | user_app → API → 支付渠道 → API → platform_admin → 钱包 | 支付单幂等、验签、金额/商户、超时关单、重复/迟到回调、按项退款、审核与不可变流水 |
| 商城订单履约 | user_app → API → gas_admin/delivery_admin → service_app | 整数金额、库存/合同规则、幂等支付、任务拆分、归属、轨迹、签收、状态聚合 |
| 安装/维修/安检 | admin → API → service_app → API | 准入、上班、区域、强制证据、异常/恢复、离线补传、服务端完成校验 |
| 钱包与提现 | user_app/service_app/admin → API | 支付密码、并发余额、不可变流水、预扣/退回/打款、审核隔离、审计 |
@@ -22,11 +23,12 @@
| gas_admin | 资源页、合同/订单动作、菜单与数据范围 | gas 资源 JSON 与后端一致 | 配送点、人员、用户、合同、订单、财务、工单 | 跨气站隔离、并发动作、导出审计 |
| delivery_admin | 资源页、订单/人员动作、菜单与数据范围 | delivery 资源 JSON 与后端一致 | 人员、用户、地址、配送、钱包、结算 | 跨配送点隔离、轨迹隐私、并发动作 |
| site | 页面组件、托管 Worker | 静态资源/路由/缓存头 | 导航、CTA、错误页 | 响应式、Safari、可访问性、SEO、性能 |
| API | Logic、状态机、金额、幂等、权限、模型约束 | Router+DB、错误码、Schema、上传 | 所有跨端业务流 | 安全、并发、性能、故障注入、审计 |
| Worker | 事件处理器(落地后) | Outbox/Streams 契约(落地后) | 告警/通知/对账/超时 | 重试、死信、积压、重启、至少一次投递 |
| IoT | 协议解析/校验(落地后) | MQTT topic/payload/回执契约(落地后) | 遥测→告警、命令→回执 | TLS、ACL、断线重连、伪造、乱序、容量 |
| API | Logic、状态机、支付/退款、金额、幂等、权限、IoT 命令/Outbox/上行模型 | Router+DB、错误码、Schema、上传、内部接口 | 所有跨端业务流 | 安全、并发、性能、故障注入、审计 |
| Worker | 支付关单调度、IoT Outbox 轮询与投递 | API/Gateway 内部接口及令牌 | 过期支付、命令可靠投递 | 重试、积压、重启、重复认领、上游超时 |
| IoT Gateway | 命令/上行 HTTP 转发 | Worker/API/IoT Server 内部契约 | 命令下行与设备消息上行 | 无状态、令牌、过期、体积限制、上游故障 |
| IoT Server | V1.8 帧、AES/LRC8、阀门命令、实时数据解析 | MQTT Topic/ACL 与内部 HTTP 命令契约 | 遥测→持久化、命令→回执 | TLS、设备认证、断线重连、伪造、乱序、容量 |
## 3. AC-01AC-24 追踪矩阵
## 3. AC-01AC-25 追踪矩阵
| AC | 场景摘要 | 主测模块 | 关键负向/异常覆盖 |
| --- | --- | --- | --- |
@@ -54,6 +56,7 @@
| AC-22 | 设备共享/紧急联系人 | user_app/API/Worker | 权限撤销后缓存、成员越权控制、联系人未授权 |
| AC-23 | 二维码/轨迹隐私 | apps/API/admin | 二维码泄密、精确轨迹直链、跨订单访问、无审计导出 |
| AC-24 | 钱包实体命名一致性 | DB/Go/Flutter/Vue/契约 | 同义表/模型/Schema、内部 ID 暴露、迁移兼容错误 |
| AC-25 | MQTT 设备命令与协议回执 | API/Worker/Gateway/IoT Server/设备模拟器 | 事务中断、重复认领、Gateway 超时、命令过期、ACL 越权、坏帧、ACK 丢失/重复/伪造 |
## 4. 数据与接口不变量
@@ -63,4 +66,3 @@
- 状态只能经专用动作接口流转,非法跳转返回稳定错误码。
- 客户端隐藏按钮、菜单或本地缓存不作为安全断言,必须直接调用 API 验证服务端拒绝。
- 所有关键写入验证幂等、事务原子性、审计完整性及失败后的可查询状态。

View File

@@ -6,7 +6,7 @@
| --- | --- | --- | --- |
| Local | 单元、组件、快速接口调试 | 自动生成、可重置 | 内存/本地 Mock |
| CI | 静态、单元、契约、构建 | 每任务独立数据库 | 容器化替身,禁止共享状态 |
| Integration | API+DB+Redis+Worker+IoT 集成 | 固定基线+场景数据 | 沙箱或可控 Mock支持故障注入 |
| Integration | API+DB+Redis+Worker+Gateway+MQTT Server 集成 | 固定基线+场景数据 | 支付沙箱、设备模拟器和故障注入 |
| Staging | 全端 E2E、专项、UAT | 脱敏仿真数据 | 尽量接真实沙箱、设备模拟器 |
| Production | 发布后只读/低风险冒烟 | 生产数据 | 禁止造资金与高风险设备动作,除非有演练审批 |
@@ -17,7 +17,10 @@
- PostgreSQL每轮可重置的独立库启用约束、事务、时区和并发测试保留慢查询与锁等待观测。
- Redis验证码、限流、支付密码锁定及未来事件流提供清空命名空间、断连、延迟和重启能力。
- API默认基线 `http://localhost:12426`;按平台、气站、配送点、用户、服务人员分别生成令牌。
- Worker/IoT当前执行启动、配置、健康、日志和优雅退出验证真实消息/协议接入后扩充专用环境
- Worker:配置支付扫描与 IoT 轮询间隔、API/Gateway 地址和内部令牌;支持加速时钟、上游超时与重启测试
- IoT Gateway独立端口、API/IoT Server 上游地址和内部令牌;测试中确认不持久化业务事实。
- IoT Server独立 HTTP/MQTT 端口、Mochi Broker、V1.8 AES 密钥环、逐设备 Client ID/设备号/凭证、Topic ACL集成环境使用测试证书启用 MQTT TLS。
- 设备模拟器:至少两台合法设备和一台攻击设备,支持 `up/ack/down`、断线重连、重复包、乱序包、坏 LRC、错误 AES key、ACK 成功/失败/丢失。
- 对象存储替身:支持上传、下载授权、过期、拒绝、超时、损坏和病毒扫描结果模拟。
- 时间控制支持验证码过期、SLA、合同、证照、订单、提现及幂等窗口的时间推进。
@@ -51,7 +54,7 @@
| 依赖 | 必备模拟能力 |
| --- | --- |
| MQTT/设备 | 在线/离线、命令 ACK/拒绝/超时、重复回执、伪造设备、遥测峰值 |
| MQTT/设备 | 每设备认证、Topic ACL、在线/离线、命令 ACK/拒绝/超时、重复回执、伪造设备、坏帧、遥测峰值 |
| 支付 | 签名正确/错误、金额/订单/商户不符、重复/乱序回调、查询补偿 |
| 短信/推送 | 成功、失败、延迟、重复、限流、部分接收人失败 |
| 地图/定位 | 正常、低精度、权限拒绝、漂移、区域外、无位置、后台受限 |
@@ -68,4 +71,3 @@
## 7. 待确认项
以下内容在得到正式口径前只测试“可配置与安全默认值”不自行设定政策安全阈值与开阀审批、SLO/RPO/RTO 数值、目标设备规模和上报频率、支付/合同/地图厂商、证据留存期、支持的 OS/浏览器最低版本、视频合规规则。

View File

@@ -8,7 +8,7 @@
| B1 快速门禁 | 静态、单元、契约、构建 | 每次提交/合并请求 | 尽早阻断低层错误 |
| B2 API 回归 | 鉴权、CRUD、状态动作、金额、幂等、审计、上传 | 每日 | 后端事实层稳定 |
| B3 单端回归 | 两 App、三个管理端、官网 | 每日/候选版 | 单端功能和兼容性 |
| B4 跨端 E2E | 7 条主流程、AC-01AC-24 | 候选版 | 业务闭环可验收 |
| B4 跨端 E2E | `06-业务流程测试.md`、AC-01AC-25 | 候选版 | 业务闭环可验收 |
| B5 专项 | 安全、性能、弱网、稳定性、灾备、可访问性 | 候选版 | 非功能风险可接受 |
| B6 UAT | 产品、运营、安全、财务、运维签署 | 发布前 | 业务与上线决策完成 |
| B7 发布验证 | 部署校验、迁移、低风险冒烟、监控和回滚 | 发布时 | 生产可用且可回退 |
@@ -80,9 +80,9 @@ cd backend/iot-server && go test ./... && go vet ./... && go build ./cmd/main/ma
### 候选版
- 全模块构建通过B2/B3 全回归完成。
- 7 条跨端主流程和 AC-01AC-24 全部执行。
- `06-业务流程测试.md` 中 P0/P1 流程和 AC-01AC-25 全部执行。
- P0/P1 为 0性能、安全、弱网和恢复专项已出报告。
- Worker/IoT 的 Mock 限制在报告中明确,未完成真实联调不伪装成通过
- IoT 模拟器、真实设备、TLS/证书和厂商联调的通过层级在报告中明确,不混写结论
### 生产发布
@@ -92,13 +92,13 @@ cd backend/iot-server && go test ./... && go vet ./... && go build ./cmd/main/ma
## 5. 冒烟清单
1. API/Worker/IoT 启动、健康、配置加载和无敏感日志。
1. APIWorker、IoT Gateway、IoT Server 启动、健康、配置加载和无敏感日志。
2. 五类客户端登录及 client claim 隔离。
3. 三个管理端菜单加载、核心列表、详情和一个低风险写操作。
4. user_app 读取首页/商品/订单service_app 读取准入/任务。
5. 一次幂等写入重复提交,事实不重复。
6. 一次跨组织 identity 访问,被稳定错误码拒绝。
7. 一次设备命令 Mock 回执和一次超时待确认。
7. 一次完整 IoT 命令下行与 MQTT 回执,以及一次 ACK 丢失后的待确认。
8. 一次订单到任务的跨端可见性校验。
9. 一次敏感字段脱敏和审计查询。
10. 官网首页、主要导航、静态资源与错误页。
@@ -108,7 +108,7 @@ cd backend/iot-server && go test ./... && go vet ./... && go build ./cmd/main/ma
| 优先级 | 建设项 | 原因 |
| --- | --- | --- |
| P0 | API 鉴权/组织隔离/状态机/金额/幂等集成测试 | 当前最高业务与安全风险 |
| P0 | AC-02、03、04、07、08、09、21 跨端回归 | 设备、安全、资金、隔离、离线核心链路 |
| P0 | AC-02、03、04、07、08、09、21、25 跨端回归 | 设备、安全、资金、隔离、离线和 IoT 可靠性核心链路 |
| P1 | App Repository/ViewModel/离线草稿及 Web 权限组件测试 | 当前端侧自动化覆盖较薄 |
| P1 | 三管理端契约检查统一 CI、浏览器冒烟 | 防止路由/菜单/资源漂移 |
| P1 | 上传、日志脱敏、依赖与密钥扫描 | 隐私与供应链风险 |
@@ -119,7 +119,17 @@ cd backend/iot-server && go test ./... && go vet ./... && go build ./cmd/main/ma
- 计划/执行/通过/失败/阻塞/未执行用例数及覆盖率。
- 按模块和 P0P3 的新增、遗留、关闭、重开缺陷。
- AC-01AC-24 状态,关键链路通过率。
- AC-01AC-25 状态,关键链路通过率。
- 自动化通过率、偶发失败率、覆盖率变化和执行时长。
- API 性能分位数/错误率、资源峰值、安全发现、恢复实测值。
- 环境限制、未测范围、残余风险、责任人和下一步日期。
## 8. 当前自动化缺口基线
本次盘点只用于安排优先级,不代表功能缺陷结论:
- `backend/iot-gateway` 已有命令元数据转发、上行转发和无本地状态测试,但缺 Handler 鉴权、过期、体积限制、上游错误映射和优雅退出覆盖。
- `backend/iot-server` 已有配置、加密帧往返、篡改拒绝、阀门命令和实时传感器解析测试,但缺 Broker 级设备认证、Topic ACL、真实 MQTT 上下行、ACK、断线重连和 TLS 测试。
- `backend/worker` 当前没有 `_test.go`支付扫描、Outbox 轮询、HTTP 状态分支、超时、坏响应、重试和停止行为应列为 P0 自动化补齐项。
- `backend/api` 的新增支付/退款和 IoT Logic 尚缺直接数据库事务及路由安全测试;优先覆盖并发回调、迟到回调、退款金额守恒、命令/Outbox 原子性、重复认领和 ACK 状态更新。
- 跨四进程的设备模拟 E2E 和支付沙箱 E2E 尚未形成持续集成作业,应在候选版验收前落地或以人工证据明确替代。

View File

@@ -0,0 +1,173 @@
# 业务流程测试
本文件把业务流程拆成可执行的跨端测试。每个流程都必须记录 UI/API 结果、数据库事实、Outbox/消息、审计和最终用户可见状态。详细单条用例使用 `templates/测试用例模板.md` 展开。
## 1. 执行规则
- P0 流程每个候选版本全量执行P1 流程每日自动化冒烟、候选版全量执行P2 在专项或 UAT 执行。
- 每个流程至少覆盖成功、服务端拒绝、重复请求、并发、依赖超时、进程重启、越权和恢复。
- 所有标识使用 `identity`;数据库 `id` 仅用于测试内部关联断言,不出现在客户端请求响应中。
- 时间断言同时检查业务发生时间、设备/客户端采集时间、服务端接收时间和更新时间,不用补传时间覆盖原始时间。
- 金额均以最小货币单位整数断言;状态必须通过动作接口推进。
## 2. 流程总表
| 流程 ID | 优先级 | 流程 | 主要参与者 | 关联验收 |
| --- | --- | --- | --- | --- |
| BF-01 | P0 | 邀请注册与服务关系 | gas/delivery admin、user_app、API | AC-20、AC-23 |
| BF-02 | P0 | 设备绑定与单设备远程关阀 | user_app、API、Worker、Gateway、IoT Server、设备 | AC-01、AC-02、AC-25 |
| BF-03 | P0 | 高风险遥测自动关阀与整改 | 设备、四后端进程、service_app、admins、user_app | AC-03AC-06、AC-16 |
| BF-04 | P1 | 设备共享、群控与报修 | user_app、API、IoT 链路、admin | AC-12、AC-22 |
| BF-05 | P0 | 商城下单、渠道支付与任务生成 | user_app、API、支付沙箱、admins、service_app | AC-07 |
| BF-06 | P0 | 支付超时关单与迟到回调 | user_app、API、Worker、支付沙箱 | AC-07 |
| BF-07 | P0 | 订单项退款审核入钱包 | user_app、API、platform_admin | AC-07、AC-14 |
| BF-08 | P1 | 气瓶预约、配送、随瓶安检与回收 | user_app、gas/delivery admin、service_app、API | AC-11、AC-13、AC-18 |
| BF-09 | P0 | 服务人员准入与离线补传 | service_app、admins、API | AC-16、AC-19、AC-21 |
| BF-10 | P1 | 安装/维修闭环 | service_app、API、admins、user_app | AC-06、AC-17 |
| BF-11 | P0 | 钱包提现审核 | apps、API、platform_admin | AC-08、AC-19、AC-24 |
| BF-12 | P0 | 组织隔离与敏感轨迹访问 | admins、apps、API | AC-09、AC-11、AC-23 |
| BF-13 | P1 | IoT 上行报文持久化与命令 ACK | 设备、IoT Server、Gateway、API | AC-02、AC-03、AC-25 |
| BF-14 | P1 | IoT Outbox 故障恢复 | API、Worker、Gateway、IoT Server | AC-02、AC-25 |
| BF-15 | P2 | 审计、备份恢复与链路追踪 | 全系统、DB、运维 | AC-10 |
## 3. BF-01 邀请注册与服务关系
前置:气站 A、配送点 A/B未注册手机号 U1、已有用户 U2有效、过期、停用、次数耗尽、区域外五种邀请。
主流程:
1. 气站 A 创建有服务区域、有效期、次数和活动来源的邀请二维码。
2. U1 扫码API 解析签名令牌并校验状态、范围、地址、风控和登录状态。
3. U1 完成验证码、协议同意和地址确认,创建全局账号及服务关系。
4. gas_admin 查询转化记录user_app 查询当前服务归属。
断言:二维码不含用户信息、管理员身份、长期令牌或 API 密钥;验证码一次消费;用户只创建一次;服务关系、来源、扫码和确认审计完整。
异常U2 重复扫码不重复建档;跨区、过期、停用、超次数被稳定错误码拒绝;从 A 变更至 B 必须明确确认,失败不得覆盖原关系;并发两次确认只有一个确定结果。
## 4. BF-02 设备绑定与远程关阀
前置:未绑定在线设备 D1、已绑定设备 D2、用户 U1/U2四后端进程和 MQTT 设备模拟器启动。
主流程:
1. U1 扫码绑定 D1API 校验设备存在、未占用、地址和用户授权。
2. U1 发起关阀,服务端完成对象归属、安全规则与二次确认校验。
3. API 在同一事务创建 `iot_command``iot_outbox`,返回命令 identity不返回执行成功。
4. Worker 认领 Outbox经 Gateway 向 IoT Server 下发IoT Server 编码 V1.8 阀门命令并发布 `devices/{deviceId}/down`
5. 模拟器返回 ACKIoT Server 解码并经 Gateway 回调 API命令变为成功。
6. user_app 查询到最终结果审计可串联请求、命令、Outbox、包序号、回执和操作者。
异常D2/U2 越权、设备离线、相同幂等键、相同幂等键不同参数、Gateway 不可用、命令已过期、ACK 丢失、失败 ACK、伪造设备 ACK、重复 ACK。无回执必须保持“待确认”不能显示成功。
## 5. BF-03 高风险遥测自动关阀与整改
前置:规则阈值、责任人和测试 SLA 已配置;设备 D1 在线;服务人员具备/不具备准入条件两组。
主流程:
1. D1 发布达到高风险阈值的加密 V1.8 实时数据帧。
2. IoT Server 验证设备身份、Topic、边界、长度、LRC8、AES 和帧内容,保留原始 payload。
3. Gateway 转发上行API 保存设备时间、服务端接收时间、原始帧和解码结果。
4. 系统创建安全事件、SLA、自动关阀命令、责任任务和通知。
5. 合格安检员接单、上门检查、提交分类证据和用户签名;不合格进入整改。
6. 整改完成后复检;通过后关闭事件并满足开阀恢复条件。
断言:事件、命令、通知、任务、证据、整改、复检和审计互相关联;普通用户在未整改时开阀被拒绝;自动关阀 ACK 丢失时事件仍存在且命令待确认。
异常:重复/乱序遥测不重复建同一事件坏帧不得进入业务规则通知部分失败可重试不合格人员不能接单缺照片、签字或围栏不允许完成复检失败继续整改SLA 超时只升级一次。
## 6. BF-04 设备共享、群控与报修
1. 所有者分别授予成员“查看”和“控制”权限,验证能力互斥。
2. 对含正常、离线、高风险锁定设备的分组执行关阀和开阀。
3. 校验逐设备命令 identity 与结果;高风险开阀被单独拦截,不因其他设备成功而覆盖。
4. 成员权限撤销后,旧页面缓存和旧令牌直接调用控制 API 仍被拒绝。
5. 一键报修提交类型、描述、地址、定位和照片,形成工单及访问审计。
## 7. BF-05 商城下单、渠道支付与任务生成
前置:可售商品、库存、地址、预约时段、支付宝/微信沙箱;一个需要配送、一个需要安装的订单。
主流程:创建订单并冻结库存 → 创建幂等 `payment_order` → 客户端获得最小化调起参数 → 渠道成功回调 → 验签并校验 appid/商户、支付单号、金额、币种和状态 → 数据库事务标记支付成功并推进业务订单 → 生成配送/安装任务 → 对应人员可见。
异常客户端声称支付成功不推进订单错误签名、appid、商户、金额、渠道或支付单号被拒绝重复回调不重复扣款、建任务或写流水并发回调只有一次状态推进同请求号不同金额/业务 identity 产生幂等冲突;日志只保留回调摘要。
## 8. BF-06 支付超时关单与迟到回调
1. 创建即将过期的支付宝和微信支付单,订单保持待支付。
2. Worker 使用内部令牌调用关单接口API 查询过期待支付单并逐渠道关闭。
3. 仅渠道关单成功且数据库条件更新成功的记录变为 closed单笔失败留待下轮。
4. 重复扫描不重复关单或改变已支付订单。
5. 对已过期支付单模拟成功回调,支付单进入“过期后支付异常”,业务订单不得直接进入已支付/履约。
异常:错误 Worker 令牌、渠道超时、API 重启、Worker 重启、扫描和回调竞争、刚好到期边界、100 条批次边界。
## 9. BF-07 订单项退款审核入钱包
前置:用户本人已支付且未履约订单,含多个订单项;配置退款窗口;用户钱包存在。
主流程:用户选择订单项和数量提交退款 → API 校验本人、支付成功、窗口、履约状态、数量和累计退款金额 → 创建待审核退款及明细 → 平台财务审核 → 同一事务锁定钱包、增加余额、完成退款并写不可变流水 → 用户查询到账。
异常:他人订单、窗口过期、已履约、项目不存在、数量为 0/超量、累计超实付、重复请求、并发两笔超额、驳回无原因、申请人自审、重复审批。任一数据库步骤失败必须整体回滚,不得只加余额或只改退款状态。
## 10. BF-08 气瓶预约、配送、随瓶安检与回收
主流程:选择配送公司、规格、数量和时段 → 冻结库存与费用 → 支付 → 气站分派配送点/人员 → 配送员准入校验 → 出发和轨迹上报 → 到达围栏校验 → 气瓶扫码/蓝牙校验 → 随瓶安检和取证 → 收款确认/签收 → 空瓶回收 → 同步更新气瓶、库存、押金、订单和结算。
异常:库存并发不足、时段失效、人员区域外、非履约定位、错误/重复气瓶码、证据不足、金额差异、回收损坏/编码不符、离线乱序补传、用户查看其他订单轨迹。
## 11. BF-09 服务人员准入与离线补传
1. 自主注册仅生成待审核账户;分别制造资质过期、培训未过、未上班、区域外、无授权设备。
2. 验证任一条件不满足都不能开始任务,直接调用 API 同样拒绝。
3. 合格人员开始任务后断网,采集定位、照片元数据、签名和扫描结果并本地加密。
4. 重启 App 后恢复草稿;联网按原始采集时间和幂等键补传。
5. 服务端去重、乱序校正、完整性/哈希和任务状态校验,记录接收时间与补传标记。
异常:重复补传、篡改哈希、未来时间、任务已关闭、部分上传成功、权限中途撤销、本地明文检索、非任务期间后台定位。
## 12. BF-10 安装/维修闭环
按“使用条件→备料→安装→测试→前期安检→设备激活→完成→收款”顺序执行新装;维修保存前中后证据、材料、价格快照、应收/实收和签字。测试失败、环境不合格、收费差异或强制证据缺失时UI 与直接 API 均不能完成;整改/复检通过后才可继续。
## 13. BF-11 钱包提现审核
1. 绑定银行卡并验证只返回末四位;设置/校验独立六位支付密码和失败锁定。
2. 申请提现,在同一事务锁定钱包、预扣总余额和可提现余额、创建申请和流水。
3. 驳回只返还该申请实际预扣的两类余额;完成打款只确认外部结果,不再次扣款。
4. 全程验证 `0 <= 可提现余额 <= 总余额`
异常:余额不足、并发申请、冻结钱包、错误/锁定支付密码、重复审批、驳回无原因、申请人篡改、历史未预扣提现兼容分支、整数溢出。
## 14. BF-12 组织隔离与敏感轨迹访问
使用结构相同的气站 A/B、配送点 A/B、用户 U1/U2 数据,逐项验证列表、详情、搜索、分页、关联资源、导出和直接猜测 identity。用户只看本人简化轨迹精确回放/导出要求审批、水印、用途和审计;非履约位置不可访问。缓存命中、批量接口和错误响应不得泄露目标是否存在或敏感字段。
## 15. BF-13 IoT 上行报文与命令 ACK
协议矩阵:无加密/key 1、最短/最大允许帧、错误起止符、声明长度错误、LRC 错误、AES key 不存在、密文非 16 字节倍数、BCD 时间、实时传感器/事件/IO/参数块、未知子标识、截断块。
链路断言:设备只能发布自己的 `up/ack` 并订阅自己的 `down`Gateway 与 API 均校验内部令牌上行原始十六进制小写保存ACK 只有设备号、包序号和控制位匹配时更新命令;设备失败位写稳定错误码;伪造/重复 ACK 不改变其他命令。
## 16. BF-14 IoT Outbox 故障恢复
1. 在 API 事务中注入 Outbox 写失败,验证命令也不落库;命令写失败同理。
2. 两个 Worker 并发认领,`SKIP LOCKED` 保证一条记录单次 processing。
3. Gateway 连接失败、返回非 2xx、响应 JSON 损坏分别记录失败并安排重试。
4. processing 超过一分钟可重新认领;退避按尝试次数增长且上限一分钟。
5. Worker 在投递成功后、回写 API 前崩溃,恢复后允许重复投递但不重复业务命令事实;设备/Server 侧以命令 identity 和幂等键识别。
6. 观察 pending/retry/processing 积压、最老年龄和失败码;未实现死信上限时在报告中标记风险。
## 17. BF-15 审计、备份恢复与链路追踪
选取设备命令、安全事件、支付回调、退款、提现和敏感轨迹导出六类事实,验证可用 `request_id`、业务 identity、命令 identity、支付单号串联日志、审计、数据库和外部摘要。隔离环境执行 PostgreSQL 全量加 WAL 恢复,校验记录数、关键哈希、状态不变量、资金守恒和审计链;记录实测 RPO/RTO不以目标值代替实测值。
## 18. 自动化落地顺序
1. API 数据库集成测试:支付创建/回调/关单/退款、IoT 命令/Outbox/上行回执。
2. Worker 使用 `httptest` 覆盖 204、401、500、超时、坏 JSON、重复认领和优雅退出。
3. Gateway 补充 Handler 级鉴权、过期、体积、上游错误和上行拒绝测试。
4. IoT Server 增加 Broker 级每设备认证/ACL、MQTT 上下行和断线重连测试。
5. 使用设备模拟器和支付沙箱建立 BF-02、BF-05、BF-06、BF-13、BF-14 的 CI 集成作业。
6. 使用 Flutter/Web E2E 覆盖 BF-01、BF-03、BF-07BF-12 的跨角色流程。

View File

@@ -8,9 +8,10 @@
| --- | --- |
| [01.md](01.md) | 用户已有的平台后台补充需求原文,作为测试输入保留,不作为完整测试计划 |
| [02-总体测试计划.md](02-总体测试计划.md) | 范围、策略、分层、阶段、角色、风险和完成标准 |
| [03-系统与业务覆盖矩阵.md](03-系统与业务覆盖矩阵.md) | 各端、后端进程、跨端流程和 AC-01AC-24 的追踪关系 |
| [03-系统与业务覆盖矩阵.md](03-系统与业务覆盖矩阵.md) | 各端、后端进程、跨端流程和 AC-01AC-25 的追踪关系 |
| [04-环境数据与依赖计划.md](04-环境数据与依赖计划.md) | 测试环境、账号、数据、Mock、第三方和设备模拟要求 |
| [05-执行批次与质量门禁.md](05-执行批次与质量门禁.md) | 冒烟、回归、专项、发布验收的执行顺序和准入准出条件 |
| [06-业务流程测试.md](06-业务流程测试.md) | 跨 App、Web、API、Worker、IoT 和数据库的可执行业务流程测试 |
| [templates/测试用例模板.md](templates/测试用例模板.md) | 单条测试用例的统一记录格式 |
| [templates/测试报告模板.md](templates/测试报告模板.md) | 每轮测试结果、缺陷和发布建议模板 |
@@ -24,6 +25,6 @@
## 计划边界
- `backend/worker`投递 IoT Outbox无状态 `backend/iot-gateway` 与内嵌 Mochi MQTT Broker 的 `backend/iot-server` 已落地系统接口和 MQTT 协议边界。真实设备证书和厂商硬件仍需在联调环境验收。
- `backend/worker`承担支付超时扫描和 IoT Outbox 投递;无状态 `backend/iot-gateway` 与内嵌 Mochi MQTT Broker 的 `backend/iot-server` 已落地系统接口和 MQTT V1.8 协议边界。真实设备证书、生产 TLS 和厂商硬件仍需在联调环境验收。
- `frontend/site` 是官网,按展示、响应式、可访问性、链接、构建和托管 Worker 测试;不把它当成业务事实写入端。
- 本计划不把尚未实现或文档中“待确认”的政策当作通过标准。此类项进入阻塞/待决清单,由产品、安全、财务或法务确认后再固化用例。

View File

@@ -22,7 +22,7 @@
| 单端/E2E | | | | | | |
| 安全/性能/弱网/恢复 | | | | | | |
## 4. AC-01AC-24
## 4. AC-01AC-25
| AC | 结果 | 证据 | 缺陷/限制 |
| --- | --- | --- | --- |