Files
platforms/checking/06-业务流程测试.md

174 lines
14 KiB
Markdown
Raw Normal View History

# 业务流程测试
本文件把业务流程拆成可执行的跨端测试。每个流程都必须记录 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 的跨角色流程。