# 跨角色端到端测试用例(Cross-Role E2E · 主链路) > 关联:各角色场景中的「主链路」片段;黑盒方案第 4.7 节(周五演示脚本)。 > 目标:验证 **报告上传 → 解析入库 → 方案生成 → 审核 → 激活拆任务 → 执行打卡 → 审核统计** 的跨角色闭环。 > 对应 e2e:`../e2e/assessment-order-flow.spec.js`、`../e2e/dan-report-flow.spec.js`、`../e2e/ai-plan-task-flow.spec.js`、`../e2e/energy-system.spec.js`、`../e2e/admin-panel.spec.js`。 ## 主链路全景(角色流转) ``` 规划师(代传报告) → 家长(生成方案) → 规划师(批准+激活) → 孩子(打卡) → 规划师(审核) → 运营(统计) ↑ 也可由家长直接上传报告(P-8/P-10) ``` | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-01 | 报告上传解析 | 规划师 | P0 | 功能 | 已绑定家庭+孩子 B;募极生物 PDF | 1. 代上传 PDF+选 B 2. 解析预览 3. 确认入库 | 报告自动解析入库;七维健康评分刷新;`/api/health/report/list` 可查到 | T-3 / P-10 | | TC-X-02 | 报告审核入库 | 规划师 | P0 | 功能 | X-01 草稿 | 1. 审核队列确认/直接入库 | 健康报告列表可见该报告 | T-4 | | TC-X-03 | 方案生成 | 家长 | P0 | 功能 | 孩子 B 有报告;已购会员 | 1. 选 B+默认目标 2. 调 LangGraph 生成并保存 | 方案生成成功(status=generated)并保存 | P-13 | | TC-X-04 | 方案批准+激活 | 规划师 | P0 | 功能 | X-03 方案 generated | 1. 批准(generated→reviewed) 2. 激活(reviewed→active) | 孩子 B 名下出现「方案启动」引导任务+模板任务 | T-6 / T-7 | | TC-X-05 | 任务打卡 | 孩子 | P0 | 功能 | X-04 已生成方案任务 | 1. 孩子打开方案任务 2. 完成并提交打卡 | 任务待审核;方案进度 completedDays+1 | C-7 / C-2 | | TC-X-06 | 任务审核 | 规划师 | P0 | 功能 | X-05 已提交 | 1. 审核通过 | 孩子积分到账,流水可见 | T-9 / P-06 | | TC-X-07 | 全局统计 | 运营 | P1 | 功能 | 以上步骤已执行 | 1. 打开统计页 | 任务总量/完成数含本次演示数据 | A-02 | | TC-X-08 | 幂等与回滚(主链路健壮性) | 多角色 | P0 | 异常 | X-04 已 active 方案 | 1. 对已激活方案再次激活 2. 支付失败回滚 3. 重复打卡 | 重复激活不重复生成任务;支付失败订单不进入待安排;重复打卡不重复计数 | T-8 / P-09a / C-8 | ### 主链路验收口径 - **P0 全绿**:TC-X-01~06、TC-X-08 必须 100% 通过,否则主链路不通过。 - **数据一致性**:方案进度、积分流水、能量增量在闭环结束后彼此自洽(增分有流水、打卡有进度)。 - **AI 可用性**:TC-X-03 在 LangGraph 不可用时由 `AiGateway` Fallback 兜底,不得 500(属 P0 异常口径)。 --- ## 资产自检清单(交付前) - [x] `user-scenarios/` 6 角色场景齐全(guest/parent/child/teacher/admin/vendor) - [x] `test-cases/` 6 角色 + 跨角色 E2E 用例齐全 - [x] 双角色边界(家长↔孩子可切 / 孩子端不可切回 / 规划师可切回)在 P/C/T 用例中显式覆盖 - [x] 五维能量、测评订单闭环、健康报告主链路、LangGraph AI、文章审核、数据迁移等关键设计点均有场景+用例映射 - [x] 与既有 `BLACKBOX-TEST-PLAN.md`、`e2e/*.spec.js` 口径一致、互不冲突 - [ ] 执行侧:用例需在测试环境跑通并回填结果(本批仅交付设计资产,执行需另行按双档授权) ## 补齐用例(缺口场景 SC-X-09~12) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-09 | AI 方案送审闭环 | 多角色 | P0 | 功能 | 家长已生成方案(generated) | 1. 家长送审 2. 规划师批准(reviewed) 3. 激活(active) | 未确认不可激活;全链路状态正确流转 | P-44 / T-06 / T-07 | | TC-X-10 | 报告对比趋势闭环 | 多角色 | P2 | 功能 | 同一孩子多次上传同类型报告 | 1. 多次上传 2. 对比 3. 趋势 4. 方案调整 | 类型一致才可比;趋势方向正确 | P-25 / T-21 | | TC-X-11 | 消息通知闭环 | 多角色 | P1 | 功能 | 跨角色消息配置就绪 | 1. 规划师发消息 2. 家长/孩子收 3. 已读 | 仅目标角色可见;免打扰设置生效 | P-65 / T-19 / C-15 | | TC-X-12 | 会员权益闭环 | 多角色 | P1 | 功能 | 家长未购会员 | 1. 购会员 2. 权益生效 3. AI/高级报告解锁 4. 过期回收 | 购后解锁付费能力;过期权益回收 | P-58 / P-16 | --- ### 本轮扩展场景用例(新增 SC-X) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-13 | 报告代传跨角色闭环 | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 按场景流程执行:发起代传 → 对方上传 → 孩子档案更新 2. 观察结果 | 达成目标:代传贯通;边界:授权校验;越权代传拒 | X-13 | | TC-X-14 | 解绑/重分配跨角色协 | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 按场景流程执行:家长解绑 ↔ 规划师侧更新 2. 观察结果 | 达成目标:解绑一致;边界:在途数据交接;状态同步 | X-14 | | TC-X-15 | 注销/数据导出跨角色 | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 按场景流程执行:家长申请 → 运营处理 → 规划师档案解绑 2. 观察结果 | 达成目标:注销贯通;边界:审计;冷静期 | X-15 | | TC-X-16 | 活动名额并发 E2E | 跨角色 | P0 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 按场景流程执行:多家长同时报名抢名额 2. 观察结果 | 达成目标:并发报名;边界:**并发超卖拦截(真实 bug)** | X-16 | | TC-X-17 | 多端登录会话互斥跨端 | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 按场景流程执行:A 端登录 → B 端被踢/验证 2. 观察结果 | 达成目标:会话安全;边界:异常设备风控 | X-17 | | TC-X-18 | 推送跨端送达 | 跨角色 | P1 | 功能 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 按场景流程执行:家长设提醒 → 孩子端收到 2. 观察结果 | 达成目标:提醒触达;边界:免打扰生效 | X-18 | ## 异常流用例(派生自正常流) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-01-E | 报告上传解析 | 规划师 | P2 | 异常 | 已绑定家庭+孩子 B;募极生物 PDF | 1. 上传损坏PDF/非募极/超大 2. 解析服务超时 3. 上传非绑定家庭孩子报告 | 损坏/非募极明确提示(非募极提示请确认募极生物);超大超限提示;超时进草稿非500;非绑定孩子 403 | T-3 / P-10 | | TC-X-02-E | 报告审核入库 | 规划师 | P2 | 异常 | X-01 草稿 | 1. 确认一个已被他人确认/删除的草稿 2. 解析超时草稿点确认 | 已删草稿提示『不存在』;解析中确认提示稍候;非绑定家庭草稿 403 | T-4 | | TC-X-03-E | 方案生成 | 家长 | P2 | 异常 | 孩子 B 有报告;已购会员 | 1. 生成时 LangGraph 超时/不可用 2. 未购会员却请求付费板块 3. 并发双生成同一目标 | Fallback 兜底方案+提示非500;未购会员拦截『请先开通会员』;并发幂等仅 1 个 generated | P-13 | | TC-X-04-E | 方案批准+激活 | 规划师 | P2 | 异常 | X-03 方案 generated | 1. 激活时任务分解超时 2. 对已激活方案再激活 3. 激活非 reviewed 方案 | 超时回滚不残半任务;已激活再激活幂等不重复生成任务;非 reviewed 拦截 | T-6 / T-7 | | TC-X-05-E | 任务打卡 | 孩子 | P2 | 异常 | X-04 已生成方案任务 | 1. 同任务重复打卡 2. 逾期限打卡 3. 打卡非本人方案任务 | 重复打卡幂等不重复计数;逾期按业务拒/允一致;非本人任务 403 | C-7 / C-2 | | TC-X-06-E | 任务审核 | 规划师 | P2 | 异常 | X-05 已提交 | 1. 审核非绑定家庭孩子任务 2. 同任务并发双审 3. 超期任务审核 | 非绑定家庭 403;并发双审幂等仅计 1 次积分;超期审核被拒 | T-9 / P-06 | | TC-X-07-E | 全局统计 | 运营 | P2 | 异常 | 以上步骤已执行 | 1. 统计接口超时/无数据 2. 时间范围非法 | 超时降级非500;无数据显示『暂无数据』;时间非法 400 | A-02 | | TC-X-08-E | 幂等与回滚(主链路健壮性) | 多角色 | P2 | 异常 | X-04 已 active 方案 | 1. 对已 active 方案并发再激活 2. 支付失败回滚 3. 重复打卡 | 并发再激活幂等仅生成 1 次任务;支付失败订单不进待安排;重复打卡不重复计数 | T-8 / P-09a / C-8 | | TC-X-09-E | AI 方案送审闭环 | 多角色 | P2 | 异常 | 家长已生成方案(generated) | 1. 送审时 LangGraph 超时 2. 未确认直接激活 3. 重复送审 | 超时 Fallback 提示非500;未确认激活拦截『请先确认』;重复送审幂等 | P-44 / T-06 / T-07 | | TC-X-10-E | 报告对比趋势闭环 | 多角色 | P3 | 异常 | 同一孩子多次上传同类型报告 | 1. 对比不同类型报告 2. 仅 1 份报告看趋势 3. 趋势时间倒挂 | 类型不一致提示不可比;单报告提示需≥2份;时间轴按真实升序不倒挂 | P-25 / T-21 | | TC-X-11-E | 消息通知闭环 | 多角色 | P2 | 异常 | 跨角色消息配置就绪 | 1. 消息内容含 XSS 载荷 2. 越权读他人消息 3. 标记已读时 id 不存在 | XSS 转义不执行;越权消息 403;不存在 id 404 | P-65 / T-19 / C-15 | | TC-X-12-E | 会员权益闭环 | 多角色 | P2 | 异常 | 家长未购会员 | 1. 支付失败 2. 重复购买同档位 3. 过期后权益回收时机 | 失败回滚不解锁;重复购买幂等仅 1 次;过期回收断言一致 | P-58 / P-16 | ### 本轮扩展异常流(派生自新增场景) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-13-E | 报告代传跨角色闭环 | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 越权代传他人孩子 2. 上传损坏/非募极 3. 授权令牌失效 | 越权代传 403;损坏/非募极明确提示;令牌失效提示重发 | X-13 | | TC-X-14-E | 解绑/重分配跨角色协 | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 解绑时有在途方案/预约未交接 2. 并发解绑+重分配 | 在途未完成提示先交接;并发操作乐观锁不互相覆盖 | X-14 | | TC-X-15-E | 注销/数据导出跨角色 | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 注销未完成却触发导出 2. 越权导出他人 3. 冷静期内再次注销 | 注销未完成导出提示先完成;越权导出 403;冷静期内重复注销幂等 | X-15 | | TC-X-16-E | 活动名额并发 E2E | 跨角色 | P1 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 名额仅剩 1 时 500 并发报名 2. 名额已满再报名 | 并发超卖拦截仅 1 人成功(真实 bug 回归);满额拒『名额已满』;重复报名幂等 | X-16 | | TC-X-17-E | 多端登录会话互斥跨端 | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 异地/新设备登录触发风控 2. 旧设备 token 仍调用 | 异常设备二次验证/拦截;旧设备 token 失效 401 | X-17 | | TC-X-18-E | 推送跨端送达 | 跨角色 | P2 | 异常 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 推送内容含 XSS 载荷 2. 目标已设免打扰 3. 非目标角色收到 | XSS 转义不执行;免打扰不推送;非目标角色不可见 | X-18 | ## 权限流用例(派生自正常流) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-01-P | 报告上传解析 | 规划师 | P1 | 权限 | 已绑定家庭+孩子 B;募极生物 PDF | 1. 访问非绑定家庭的数据(报告/任务/方案/订单) 2. 对非指派预约 confirm/cancel 3. 观察 | 非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复) | T-3 / P-10 | | TC-X-02-P | 报告审核入库 | 规划师 | P1 | 权限 | X-01 草稿 | 1. 访问非绑定家庭的数据(报告/任务/方案/订单) 2. 对非指派预约 confirm/cancel 3. 观察 | 非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复) | T-4 | | TC-X-03-P | 方案生成 | 家长 | P1 | 权限 | 孩子 B 有报告;已购会员 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | P-13 | | TC-X-04-P | 方案批准+激活 | 规划师 | P1 | 权限 | X-03 方案 generated | 1. 访问非绑定家庭的数据(报告/任务/方案/订单) 2. 对非指派预约 confirm/cancel 3. 观察 | 非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复) | T-6 / T-7 | | TC-X-05-P | 任务打卡 | 孩子 | P1 | 权限 | X-04 已生成方案任务 | 1. 孩子端调用编辑/删除/切家长接口或拼家长路由 2. 观察拦截 | 孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据 | C-7 / C-2 | | TC-X-06-P | 任务审核 | 规划师 | P1 | 权限 | X-05 已提交 | 1. 访问非绑定家庭的数据(报告/任务/方案/订单) 2. 对非指派预约 confirm/cancel 3. 观察 | 非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复) | T-9 / P-06 | | TC-X-07-P | 全局统计 | 运营 | P1 | 权限 | 以上步骤已执行 | 1. 非 admin 角色访问管理端接口(统计/方案/报告解析/商品/勋章/供应商/活动/知识库) 2. 观察 | 非 admin 角色访问管理端接口统一 401/403,不泄露后台数据 | A-02 | | TC-X-08-P | 幂等与回滚(主链路健壮性) | 多角色 | P1 | 权限 | X-04 已 active 方案 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | T-8 / P-09a / C-8 | | TC-X-09-P | AI 方案送审闭环 | 多角色 | P1 | 权限 | 家长已生成方案(generated) | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | P-44 / T-06 / T-07 | | TC-X-10-P | 报告对比趋势闭环 | 多角色 | P2 | 权限 | 同一孩子多次上传同类型报告 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | P-25 / T-21 | | TC-X-11-P | 消息通知闭环 | 多角色 | P1 | 权限 | 跨角色消息配置就绪 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | P-65 / T-19 / C-15 | | TC-X-12-P | 会员权益闭环 | 多角色 | P1 | 权限 | 家长未购会员 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | P-58 / P-16 | ### 本轮扩展权限流(派生自新增场景) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-13-P | 报告代传跨角色闭环 | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 跨角色调用他人/非绑定家庭数据接口 2. 观察拦截 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | X-13 | | TC-X-14-P | 解绑/重分配跨角色协 | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 跨角色调用他人/非绑定家庭数据接口 2. 观察拦截 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | X-14 | | TC-X-15-P | 注销/数据导出跨角色 | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 跨角色调用他人/非绑定家庭数据接口 2. 观察拦截 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | X-15 | | TC-X-16-P | 活动名额并发 E2E | 跨角色 | P0 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 跨角色调用他人/非绑定家庭数据接口 2. 观察拦截 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | X-16 | | TC-X-17-P | 多端登录会话互斥跨端 | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 跨角色调用他人/非绑定家庭数据接口 2. 观察拦截 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | X-17 | | TC-X-18-P | 推送跨端送达 | 跨角色 | P1 | 权限 | 已登录(默认 跨角色);相关前置数据就绪 | 1. 跨角色调用他人/非绑定家庭数据接口 2. 观察拦截 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | X-18 | ## 五维指标变化专项用例(本轮新增 SC-X-19~21) > 完整用户故事见 `../user-scenarios/07-five-dimension.md`(ED-15~17)。每条含正常流 + 具体异常流(-E) + 权限流(-P)。 ### 正常流 | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-19 | 五维能量跨角色数据隔离 | 跨角色 | P0 | 功能 | 家庭1(A+B+C)、绑定家庭 F2(T)、无关家庭 F9 | 1. 各方查自身/归属成员能量概览/流水/评分历史 2. 越权查他人/非绑定家庭 | 归属数据可见;越权查他人/非绑定 401/403 | X-19 | | TC-X-20 | 五维能量流水溯源一致性 | 跨角色 | P0 | 功能 | 成员 B 混合来源流水(任务/打卡/心愿扣减/手动) | 1. 拉 `EnergyLog` 按时间排序 2. 逐条校验 `balanceAfter==prev+amount` 3. 校验 `totalEarned-totalSpent==balance` | 全部一致;任一不一致报警并定位 | X-20 | | TC-X-21 | 多来源并发同成员能量变动 | 跨角色 | P0 | 功能 | B 某维度当日未触顶;多触发同时到达 | 1. 并发提交任务审批+打卡+小游戏+活动 2. 校验总额/流水 | 每笔原子加、不超 `DailyLimit`、无重复加、最终 `balance` 与流水合计一致 | X-21 | ### 异常流(-E,具体故障注入) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-19-E | 五维能量跨角色隔离 | 跨角色 | P1 | 异常 | 家庭1 / F2 / F9 | 1. 孩子 token 查家长/规划师/运营接口 2. 家长查其他家庭成员 3. 规划师查 F9 4. 运营无工单导出 | 1. 401/403 2. 403 3. 403 4. 越权导出拒 | X-19 | | TC-X-20-E | 五维能量对账 | 跨角色 | P1 | 异常 | B 混合流水 + 造"不一致断点""负流水无对应" | 1. 人为制造 `balanceAfter≠prev+amount` 的断点 2. 删除负流水对应记录 | 1. 报警并定位断点(不静默通过)2. 负流水必有对应负记录、余额不为负;不一致报警 | X-20 | | TC-X-21-E | 多来源并发能量 | 跨角色 | P1 | 异常 | B 维度当日接近上限 | 1. 并发触顶 2. 部分触发失败 3. 网络重试 | 1. 最后到达被拒/截断、总额不超上限 2. 已成功保留、失败回滚不残半笔 3. 重试幂等不因重试多加 | X-21 | ### 权限流(-P) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-19-P | 五维能量跨角色隔离 | 跨角色 | P0 | 权限 | 家庭1 / F2 / F9 | 1. 横向越权查他人/非绑定家庭能量接口 | 横向越权统一 403/401、不泄露他人数据 | X-19 | | TC-X-20-P | 五维能量对账 | 跨角色 | P1 | 权限 | 家庭1 + F9 | 1. 家长 A 对 F9 成员做能量对账/导出 | 非本家庭数据 403、不泄露 | X-20 | | TC-X-21-P | 多来源并发能量 | 跨角色 | P1 | 权限 | 家庭1 + F9 | 1. 家长 A 触发 F9 成员并发能量变更 | 非本家庭成员变更 403 | X-21 | ## CF 值获取预估专项用例(本轮新增 SC-X-22) > 对应场景:`../user-scenarios/应用场景总览.md` § 八 **SC-X-22 · CF 值获取预估(全局 UI 规范)**。 > **口径前提(已确认)**:CF 值(`RewardRuleService`)与五维能量(`EnergyRuleEngine`,ED-1~17)**不同源、独立记账、互不换算**。本组用例除验证「预估正确展示」外,必须验证**能量侧不出现 CF 提示**(见 `TC-X-22-E` 第 5 步、`TC-X-22` 第 6 步的反向断言)。 ### 正常流 | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-22 | CF 值获取预估 · 全局一致展示 | 跨角色 | P0 | 功能 | 家庭1(家长A+孩子B);CF 规则已配置:任务审核通过 +20、方案任务打卡 +10、商城下单满 99 +50;B 当日 CF 与五维能量均未触顶;已装各端 | 1. 家长端创建任务下发(SC-P-10),孩子端打开任务列表,观察任务项入口
2. 孩子端打开方案任务打卡页(SC-C-05),观察打卡按钮
3. 家长端打开商城商品详情/下单页(SC-X-07),观察下单按钮
4. 规划师审核任务通过(SC-T-6),家长端观察审核页按钮预估
5. 抓包核对各入口接口响应中的 `expectedCf`
6. 打开孩子端五维能量页(SC-C-06)与家长端能量页(SC-P-17) | 1. 任务项入口展示「本操作预计获得 20 CF」(或等效统一文案)
2. 打卡按钮展示「本操作预计获得 10 CF」
3. 下单按钮展示「本操作预计获得 50 CF」(非满额提示「本单无 CF 奖励」)
4. 审核按钮展示「本操作将发放 20 CF」
5. 各接口返回 `expectedCf` 数值与页面展示**完全一致**,单位/图标/文案风格全局统一
6. **五维能量页不出现任何 CF 字样或 CF 预估**(反向断言通过) | X-22 / P-10、C-05、X-07、T-6 | ### 异常流(-E,具体故障注入) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-22-E | CF 预估≠实际 · 边界与反向隔离 | 跨角色 | P1 | 异常 | 家庭1;CF 规则可配活动倍率/日上限;可注入规则未配置、超时 | 1. 规则配「活动 2 倍 CF」,打卡入口展示 20,操作前把活动置为结束,再完成打卡
2. 设当日 CF 上限 20,已累计 15,入口预估 20,完成操作
3. 用同一 `idempotency-key` 重放打卡请求 5 次
4. 清空该产出点奖励规则 / 打桩使预估接口超时 3s,观察入口
5. **反向隔离**:在能量变动入口(任务审批 SC-P-87、方案打卡 SC-C-25、手动 grant SC-P-89、文章互动 SC-P-93)分别注入一次能量变动
6. 构造同一操作同时产 CF(+20) 与能量(智 +5),观察回执与页面 | 1. 回执展示「实际 +10 CF(预估 20,原因:活动已结束)」,账目按 10 入账、不回溯历史
2. 展示「已达今日上限,本次实际 +5 CF」,余额精确 +5 不超上限
3. 仅第 1 次入账并提示获得,后 4 次不重复入账、不再提示「获得」,流水仅 1 条
4. 入口降级为「CF 奖励以实际为准」或不展示预估,接口不返回 500、页面不白屏、不阻塞下单/打卡
5. **四个能量入口页面与接口均不返回 `expectedCf`、不展示任何「+N CF」文案**;能量变动仅按五维口径展示(如「智 +5」)
6. CF 与能量**分别展示为两个独立数字**,不合并为单一数字,不出现「+20 CF 能量」类混写 | X-22 / P-87、C-25、P-89、P-93 | | TC-X-22-E2 | CF 预估 · 规则为 0 与负向消耗 | 跨角色 | P2 | 异常 | 规则存在但值为 0;存在消耗型产出点(心愿兑换/商城兑换) | 1. 规则值为 0 的产出点观察入口
2. 打开心愿兑换确认页(SC-P-13)与孩子商城兑换页(SC-C-04)
3. 打开会员购买页(SC-X-12)观察续费场景 | 1. 展示「本操作无 CF 奖励」或省略,不展示「+0 CF」
2. 消耗型展示负向文案「本操作将消耗 N CF」(非「获得」),不误用获得型预估
3. 无新增发放的场景不展示获得型预估 | X-22 / P-13、C-04、X-12 | ### 权限流(-P) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-22-P | CF 预估 · 越权与防伪造 | 跨角色 | P1 | 权限 | 家庭1(A+B)、无关家庭 F9、游客账号、孩子/服务商/运营账号 | 1. 游客/未登录打开任一 CF 产出点入口
2. 孩子 token 调家长侧产出点预估接口(如活动打卡预估、套餐购买预估)
3. 家长 A 请求 F9 成员的产出点预估
4. 非 admin 调用奖励规则读接口、尝试改规则
5. 客户端在请求体中伪造 `expectedCf=999999` 提交下单/打卡 | 1. 不展示预估或展示「登录后可见」,不泄露规则数值
2. 角色不符 403,不返回预估
3. 403,不返回他人 `expectedCf`
4. 读规则 403;改规则 403 且规则未被改动
5. 服务端**忽略客户端传值**,以 `RewardRuleService` 服务端计算为准,入账金额等于真实规则值 | X-22 / P-77、X-07 | ## 非功能测试用例(性能 / 兼容 / 安全) > 非功能维度覆盖主链路并发/限流、跨角色越权与隔离、多端会话互斥、文件上传统一校验。(越权/上传拒绝/权限提升等见 `e2e/api/nonfunc-security.spec.js`;并发隔离 TC-X-N01、限流稳定性 TC-X-N02、多端 UA 兼容 TC-X-N07 见 `e2e/api/nonfunc-perf-compat.spec.js`;TC-X-N05、TC-X-N08 参见 security 规格) | TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 | |---|---|---|---|---|---|---|---|---| | TC-X-N01 | 报告上传解析 | 跨角色 | P0 | 性能 | 多家庭并发(≥10 家庭) | 1. 并发执行 上传→解析 2. 观察结果 | 无串报告;解析队列不堵;单链路 P95 ≤ 40s | X-01 | | TC-X-N02 | 方案生成 | 跨角色 | P0 | 性能 | 多家庭同时生成方案 | 1. 并发 LangGraph 生成 2. 观察限流 | 触发 429 友好降级;不雪崩;恢复后继续 | X-03 | | TC-X-N03 | 活动并发名额 | 跨角色 | P0 | 性能 | 活动名额 100,瞬时 500 请求 | 1. 压测报名接口 2. 检查名额 | 不超卖;名额精准扣减;并发安全(对应真实超卖修复) | X-15 | | TC-X-N04 | 任务打卡 | 跨角色 | P1 | 性能 | 全平台打卡高峰 | 1. 模拟高峰打卡并发 | 幂等不重复计分;响应稳定 ≤ 1s | X-05 | | TC-X-N05 | 主链路 | 跨角色 | P0 | 安全 | 跨角色越权 | 1. 孩子 token 调家长/规划师接口 2. 家长调其他家庭 | 一律 401/403;数据隔离 | X-01~X-06 | | TC-X-N06 | 数据导出 | 跨角色 | P0 | 安全 | 导出授权 | 1. 用户 A 导出 2. 篡改 userId 导出 B | 仅本人可导出;篡改 403;留痕 | X-17 | | TC-X-N07 | 多端会话 | 跨角色 | P1 | 兼容 | iOS/Android/小程序/Web 同时在线 | 1. 多端登录同账号 2. 操作 | 会话互斥/同步正确;无状态错乱 | X-18 | | TC-X-N08 | 主链路 | 跨角色 | P0 | 安全 | 文件上传链路 | 1. 上传恶意/超大报告文件 2. 各端入口 | 全端统一校验拒绝;不执行 | X-01 |