Просмотр исходного кода

docs(test): 四模块链路黑盒测试方案与自测报告

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
E2E Test Bot 2 месяцев назад
Родитель
Сommit
e37374ad58
2 измененных файлов с 232 добавлено и 0 удалено
  1. 178 0
      tests/BLACKBOX-TEST-PLAN.md
  2. 54 0
      tests/SELFCHECK-RESULT-20260827.md

+ 178 - 0
tests/BLACKBOX-TEST-PLAN.md

@@ -0,0 +1,178 @@
+# 浠艾福(Care Family)黑盒测试方案
+
+> 版本:v1.0(2026-08-24)
+> 测试方式:黑盒(仅通过 UI + 接口,不关注内部实现)
+> 覆盖角色:游客 / 家长(parent) / 孩子(child) / 成长规划师(teacher) / 平台运营(admin) / 商品服务商(vendor)
+> 重点覆盖:双角色体系、五维能量、健康报告→方案→任务主链路、家庭成员与测评闭环
+
+---
+
+## 1. 测试目标与范围
+
+1. 验证 6 类角色各自的**功能入口与权限边界**(进入该进的、进不了不该进的)。
+2. 验证核心业务闭环:**报告上传→解析入库→方案生成→审核→激活拆任务→执行打卡→审核统计**。
+3. 验证账号/家庭/积分/能量等状态数据在操作前后的正确性。
+4. 双角色特殊规则:**家长可切换孩子视角;直接登录的孩子端不能切家长端;规划师可切回家长视角**。
+
+不在本次范围:性能压测、安全性渗透、界面像素级还原。
+
+## 2. 角色-功能访问矩阵
+
+| 功能域 | 游客 | 家长 | 孩子 | 规划师 | 运营 | 服务商 |
+|---|:--:|:--:|:--:|:--:|:--:|:--:|
+| 注册/登录/微信授权 | ● | ● | ● | ● | ●(密码) | ● |
+| 创建/加入家庭、邀请成员 | — | ● | — | ●(绑定) | — | — |
+| 家庭成员关系编辑 | — | ● | 只读 | 只读 | — | — |
+| 任务创建/下发/审核 | — | ●(下发) | — | ● | — | — |
+| 任务执行/小游戏 | — | — | ● | — | — | — |
+| 心愿创建/审批/兑换 | ●(浏览) | ●(审批) | ●(创建) | — | — | — |
+| 五维能量/健康指数查看 | — | ● | ● | ● | — | — |
+| 测评申请/预约/支付 | — | ● | 快照对象 | ●(安排/录入) | ● | — |
+| 健康报告上传/解析/查看 | — | ● | ●(查看) | ●(代传/审核) | ●(审核) | — |
+| 健康方案生成/审核/激活 | — | ●(生成) | ●(执行) | ●(审核/激活) | ●(管理) | — |
+| 饮食推荐 | — | ● | ● | — | — | — |
+| AI 对话(LangGraph) | — | ● | ● | ● | — | — |
+| 商城购买/订单 | ●(浏览) | ● | — | — | ● | ●(管理) |
+| 活动报名 | ●(浏览) | ● | ● | — | ●(审核) | ●(发布) |
+| 文章浏览/阅读统计 | ● | ● | ● | ● | ●(发布) | ● |
+| 运营管理(数据/审核/迁移) | — | — | — | — | ● | — |
+| 个人中心/积分明细/成长档案 | — | ● | ● | ● | — | — |
+
+## 3. 通用前置条件与测试数据
+
+- 环境:测试环境部署最新后端(含种子迁移),管理端 `http://<host>/admin/`,小程序用测试号 + `wechat.test-mode: true`。
+- 准备 6 类账号:游客(未登录)、家长 A、孩子 B(A 的子账号)、规划师 T、运营管理员 M、服务商 V。
+- 家庭:家庭「测试家庭1」含家长 A + 孩子 B + 爷爷 C,用于关系/评测/方案用例。
+- 测试报告 PDF:`data/refs/` 下已有的**募极生物肠道菌群报告**样例文件 1 份(文件名:`530010234-侯.json` 对应报告)。
+- 每次用例执行前,通过管理端还原数据(删除新建测试记录或置为草稿)。
+
+---
+
+## 4. 用例明细
+
+### 4.1 游客(未登录)
+
+| 步骤 | 角色 | 功能描述 | 数据输入 | 功能执行结果 |
+|---|---|---|---|---|
+| T-01 | 游客 | 打开小程序首页 | 无 | 显示引流首页,未自动进入任何业务页,可看到登录/注册按钮 |
+| T-02 | 游客 | 微信一键登录 | 授权微信昵称/头像 | 登录成功生成账号,角色默认 parent,跳转角色首页 |
+| T-03 | 游客 | 手机号+验证码登录 | 手机号 13800000001 + 验证码 | 验证码校验通过后登录成功;错误验证码提示失败且不产生会话 |
+| T-04 | 游客 | 访问需登录页面(如家庭/任务) | 无 token | 被拦截跳转登录页,登录后回到原页面 |
+| T-05 | 游客 | 浏览商城与文章 | 打开商城主页/文章列表 | 可见商品与文章列表;点击购买/详情需要登录时被拦截 |
+
+### 4.2 家长(parent)
+
+| 步骤 | 角色 | 功能描述 | 数据输入 | 功能执行结果 |
+|---|---|---|---|---|
+| P-01 | 家长 | 创建家庭 | 家庭名称「测试家庭1」 | 家庭创建成功,生成唯一邀请码/二维码,角色变为家庭管理员 |
+| P-02 | 家长 | 邀请成员(二维码/邀请码) | 分享邀请码/二维码给爷爷 C | C 扫码加入家庭,家庭成员列表出现 C |
+| P-03 | 家长 | 添加家庭成员资料 | 姓名/关系(爷爷)/生日/性别 | 成员卡片正确显示;关系标签可选(RelationshipPicker) |
+| P-04 | 家长 | 编辑家庭关系图 | 修改 C 的关系为「外公」 | 关系图节点与关系标签同步更新 |
+| P-05 | 家长 | 创建任务并下发给孩子 | 标题「睡前阅读」/成员 B/积分 10/频率每日 | 任务出现在孩子任务列表,状态待执行 |
+| P-06 | 家长 | 审批孩子任务 | 任务「玩1小时游戏」点击通过 | 通过后孩子积分 +N 并有流水;驳回则任务退回 |
+| P-07 | 家长 | 审批心愿 | 孩子心愿「买乐高」 | 通过→扣相应积分、进入兑换;驳回→心愿失效 |
+| P-08 | 家长 | 查看家庭五维能量/健康指数 | 进入身维度首页 | 显示家庭健康指数与五维能量分配,数值合理(总和=100%) |
+| P-09 | 家长 | 申请测评(完整订单) | 选择孩子 B + 测评类型 + 规划师 T + 支付 | 生成测评订单:已支付→待安排→已预约状态流转正确 |
+| P-10 | 家长 | 上传健康报告 PDF | 募极生物菌群 PDF | 上传即自动解析入库;无法识别的 PDF 提示「请确认是募极生物肠道菌群报告」 |
+| P-11 | 家长 | 查看报告详情 | 打开报告列表→菌群报告 | 显示菌群健康分/平衡/多样性、菌种明细、疾病风险 |
+| P-12 | 家长 | 查看饮食推荐 | 打开「身→饮食推荐」 | 按菌群报告生成食材推荐指数,展示可吃/慎吃食物列表 |
+| P-13 | 家长 | 生成 AI 健康方案 | 选孩子 B + 目标「基于菌群检测报告的个性化健康管理方案」 | AI 生成 overview + 营养/饮食/运动三板块;可逐板块重新生成/确认 |
+| P-14 | 家长 | 保存/提交方案 | 提交方案 | 方案保存成功,进入「已提交(待规划师审核)」或按配置直接发布 |
+| P-15 | 家长 | 切换孩子视角 | 个人中心→切换视角→选择孩子 B | 界面切换为孩子端界面;可再切回家长端(需密码) |
+| P-16 | 家长 | 购买会员/套餐 | 支付「健康启航计划体验包」 | 支付成功后解锁方案生成等付费功能;未购买时点击生成提示购买 |
+| P-17 | 家长 | 查看积分流水/成长档案 | 个人中心→积分/成长记录 | 积分流水与孩子成长记录展示一致,时间格式 yyyy-MM-dd HH:mm:ss |
+| P-18 | 家长 | AI 对话(健康管家) | 提问「孩子便秘吃什么」 | 返回基于知识库的回答,可含产品/任务推荐 |
+
+### 4.3 孩子(child)
+
+| 步骤 | 角色 | 功能描述 | 数据输入 | 功能执行结果 |
+|---|---|---|---|---|
+| C-01 | 孩子 | 登录孩子端 | 孩子 B 独立登录 | 直接进入孩子端首页,**不出现切换家长入口** |
+| C-02 | 孩子 | 执行任务 | 打开待执行任务「睡前阅读」→ 提交完成 | 任务状态待家长审核;完成动作写入记录 |
+| C-03 | 孩子 | 玩小游戏 | 打开舒尔特方格并完成 | 得分按规则计算,积分/能量发放到账,成绩入榜 |
+| C-04 | 孩子 | 创建心愿 | 心愿名称「乐高机器人」+ 积分 | 心愿进入家长待审批列表 |
+| C-05 | 孩子 | 兑换通过的心愿 | 家长已通过后操作兑换 | 兑换成功,积分扣减正确 |
+| C-06 | 孩子 | 查看自己的五维能量 | 进入自己的能量页 | 显示个人能量值;执行任务后能量有增量 |
+| C-07 | 孩子 | 查看健康报告(只读) | 打开家长上传的报告 | 可见报告内容,但无编辑/删除入口 |
+| C-08 | 孩子 | 执行方案任务并打卡 | 打开方案生成的「舒尔特方格训练」打卡 | 打卡成功,方案进度 completedDays +1 |
+| C-09 | 孩子 | 查看勋章墙 | 打开勋章墙 | 显示已获得/未获得勋章及进度 |
+
+### 4.4 成长规划师(teacher)
+
+| 步骤 | 角色 | 功能描述 | 数据输入 | 功能执行结果 |
+|---|---|---|---|---|
+| TCH-01 | 规划师 | 规划师密码登录 | 手机号 + 密码 | 进入规划师端首页(仪表板);可切换回家长视角 |
+| TCH-02 | 规划师 | 绑定测试家庭 | 输入家庭邀请码 | 家庭出现在「我的家庭」列表,可见成员 |
+| TCH-03 | 规划师 | 代上传客户报告 | 上传募极生物菌群 PDF + 选择孩子 | 三阶段:上传→解析预览→确认入库,报告进入孩子档案 |
+| TCH-04 | 规划师 | 审核报告草稿 | 打开审核队列草稿(如 id=28)→ 确认 | 草稿确认入库,健康报告列表可见 |
+| TCH-05 | 规划师 | 查看待审核方案列表 | 打开方案管理页 | 列表正常渲染(generated/reviewed/active 状态),无白屏 |
+| TCH-06 | 规划师 | 批准方案 | 方案 A 点击「批准」 | 状态 generated→reviewed |
+| TCH-07 | 规划师 | 激活方案(任务分解) | 已审核方案点击「激活」 | 弹确认「激活后将生成任务」;激活后状态 reviewed→active,生成引导任务+模板任务 |
+| TCH-08 | 规划师 | 重复激活同一方案 | 对已激活方案再次激活 | 返回状态异常提示,**不重复生成任务**(幂等) |
+| TCH-09 | 规划师 | 家庭任务审核 | 打开家庭任务列表→审核孩子提交的任务 | 通过→孩子得积分;驳回→任务退回重做 |
+| TCH-10 | 规划师 | 录入测评结果 | 打开测评订单→录入孩子各维度得分 | 保存后结果可见;触发规则引擎自动生成方案(generated) |
+| TCH-11 | 规划师 | 查看成长计划列表 | 打开「成长计划」页 | 页面正常加载显示自己创建的计划(childName/状态/时间) |
+| TCH-12 | 规划师 | 创建套餐 | 创建「专注力提升套餐」含任务项 | 套餐上架前提交审核;审核通过后可被市场购买 |
+
+### 4.5 平台运营(admin)
+
+| 步骤 | 角色 | 功能描述 | 数据输入 | 功能执行结果 |
+|---|---|---|---|---|
+| A-01 | 运营 | 管理端密码登录 | admin 手机号+密码 | 登录进入 Dashboard,看板统计加载成功 |
+| A-02 | 运营 | 全局任务统计 | 打开任务统计页 | 显示任务总量/完成率等,数值与库内一致 |
+| A-03 | 运营 | 方案管理(全部家庭) | 打开方案管理页,不筛家庭 | 列出全部方案(含 source/进度/审核时间),可筛选状态 |
+| A-04 | 运营 | 激活方案 | 对 reviewed 方案点击激活 | 生成任务成功,提示成功 |
+| A-05 | 运营 | 报告解析中台:类型列表 | 打开报告解析中台 | 类型列表返回 ≥1 条(gut_flora 菌群检测已注册) |
+| A-06 | 运营 | 注册新报告类型 | 类型ID/显示名/解析路径/threshold | 保存成功,列表可见;重复注册同 typeId 被拒绝 |
+| A-07 | 运营 | 未知报告聚类审核 | 打开未知报告聚类 | 聚类列表可见;可查看聚类下上传;可自学习生成类型 |
+| A-08 | 运营 | 文章发布 | 创建文章→提交审核→通过 | 创建 1s 内返回成功(无超时);审核通过后 C 端可见 |
+| A-09 | 运营 | 创建文章标题去重 | 同标题重复创建 | 第二次创建被拦截(标题已存在) |
+| A-10 | 运营 | 关系类型管理 CRUD | 新增/编辑/停用关系类型 | 操作成功,家长端关系选择器同步生效 |
+| A-11 | 运营 | 创建勋章 | 名称/图标/触发条件/门槛 | 保存成功返回 200(badgeId 自动生成),列表可见 |
+| A-12 | 运营 | 供应商管理 | 新增供应商(昵称/手机号/真实姓名) | 保存成功,列表显示 name=昵称;同手机号重复保存被拒或覆盖可控 |
+| A-13 | 运营 | 活动提交审核/撤回 | 对草稿活动提交审核→通过→撤回→退回草稿 | 状态流转正确;已发布活动可撤回、退回草稿重新编辑 |
+| A-14 | 运营 | 知识库管理 | 删除知识条目 | 删除成功返回 200,列表移除,无 500 |
+| A-15 | 运营 | 数据迁移 | 执行 sfms→cfc 迁移 | 迁移接口返回成功,关键业务表数据量更新 |
+| A-16 | 运营 | 全局参数校验抽查 | 各管理页接口传空/错类型字段 | 返回 400 + 具体字段提示(不再裸 500「服务器内部错误」) |
+
+### 4.6 商品服务商(vendor)
+
+| 步骤 | 角色 | 功能描述 | 数据输入 | 功能执行结果 |
+|---|---|---|---|---|
+| S-01 | 服务商 | 服务商入驻申请 | 资质材料/联系方式/服务品类 | 申请提交进入运营审核 |
+| S-02 | 服务商 | 商品管理 | 新增商品(名称/价格/库存/分类) | 商品在商城可见;入库存单字段校验错误时给 400 提示 |
+| S-03 | 服务商 | 订单处理 | 查看新订单→发货/核销 | 订单状态流转正确,客户可见物流/核销码 |
+
+### 4.7 主链路端到端(跨角色,周五演示脚本)
+
+| 步骤 | 角色 | 功能描述 | 数据输入 | 功能执行结果 |
+|---|---|---|---|---|
+| E2E-01 | 规划师 | 代上传菌群报告 | 募极生物 PDF + 孩子 B | 报告自动解析入库,7 维健康评分刷新 |
+| E2E-02 | 规划师 | 完成报告审核入库 | 草稿确认/直接入库 | `/api/health/report/list` 可查到该报告 |
+| E2E-03 | 家长 | 生成 AI 健康方案 | 孩子 B + 默认目标 | 方案生成成功并保存 |
+| E2E-04 | 规划师 | 按规则生成方案(DAN 链路) | 录入测评结果→确认上传 | 自动生成 status=generated 方案 |
+| E2E-05 | 规划师 | 批准+激活方案 | 方案点击批准→激活 | 孩子 B 名下出现「方案启动」引导任务 + 模板任务 |
+| E2E-06 | 孩子 | 打卡执行方案任务 | 完成任务并提交 | 任务待审核,方案进度 +1 |
+| E2E-07 | 规划师 | 审核任务通过 | 审核通过 | 孩子积分到账,流水可见 |
+| E2E-08 | 运营 | 查询全局统计 | 打开统计页 | 任务总量/完成数含本次演示数据 |
+
+---
+
+## 5. 回归重点(近期修复项复测)
+
+| 复测项 | 复测步骤要点 | 预期 |
+|---|---|---|
+| 方案管理页白屏 | 运营/规划师进入方案管理页 | 页面正常渲染,函数不报未定义 |
+| 成长计划页 | 规划师打开成长计划页 | 列表有数据,不再 400 |
+| 勋章创建 | 管理端创建勋章 | 200 成功 |
+| 供应商创建 | 新手机号保存 | 200 成功且字段映射正确 |
+| 活动提交审核/撤回 | 草稿→提交→通过→撤回→退回草稿 | 全流程无 500 |
+| 知识库删除 | 删除 id=1 | 200 成功 |
+| 文章创建/编辑 | 长文(8000字)创建+更新 | 接口 1s 内返回,无超时无重复文章 |
+| 接口参数校验 | 各管理接口传空 body | 400 + 字段提示,非 500 |
+
+## 6. 通过标准
+
+1. 所有 P0 级用例(主链路 E2E、方案管理、报告上传)100% 通过。
+2. 其余用例通过率 ≥ 95%,未通过项均有明确缺陷描述与可复现步骤。
+3. 修复项复测(第 5 节)全部通过。

+ 54 - 0
tests/SELFCHECK-RESULT-20260827.md

@@ -0,0 +1,54 @@
+# 黑盒自测结果报告(接口级)
+
+- 日期:2026-08-27
+- 环境:`http://cfc.iwintrue.com`(DNS → 192.168.16.251,同一台服务器同时承载 dev 库 `zxyj @3306`)
+- 方式:按 `BLACKBOX-TEST-PLAN.md` 4.x 用例的接口段执行(登录→种子数据→BUG 回归→主链路)
+- 凭据:种子管理员 `13800138000 / admin123`(DatabaseInitializer 创建)
+- 脚本(可复测):`tests/selfcheck-plan-chain.ps1`
+
+## 1. 执行结果汇总
+
+| # | 用例 | 接口 | 状态 | 证据 |
+|---|---|---|---|---|
+| E2E-00 | 管理端密码登录 | POST /api/admin-auth/login-by-password | ✅ 200 | token 正常签发 |
+| P0-3 | 方案生成规则列表 | POST /api/admin/plan-rules/list | ✅ 200 | `data=[{id:1, dimension:attention, scoreMin:0, scoreMax:60, templateId:38, priority:1, isActive:true}]` |
+| P0-4 | 报告解析中台类型列表 | POST /api/admin/report-parser/types | ⚠️ 间歇性 | 首次 200(`records[0] typeId=gut_flora`),随后同一请求稳定 500(5 连发 + 4 种 body) |
+| A-03 | 方案管理列表(admin 全量,不筛家庭) | POST /api/guide/plans/family-list | ✅ 200 | `data:[]`(admin 无家庭不再报 noFamily) |
+| TCH-11 | 成长计划列表 | POST /api/growth/plan/list | ❌ HTTP200/业务500 | message=服务器内部错误 |
+| A-02 | 全局任务统计 | POST /api/admin/tasks/stats | ✅ 200 | `total=7, today=6` |
+| A-05 | 注册重复报告类型(幂等) | POST /api/admin/report-parser/types/save | ❌ 500 | 应 400「typeId 已存在」 |
+| AAA-16 | 参数校验:空 body 删知识库 | POST /api/admin/knowledge-base/delete | ❌ 500 | 应 400 提示 id 不能为空(BUG-K) |
+| A-11 | 创建勋章(badgeId 自动生成) | POST /api/badges/create | ❌ 500 | BUG-F 未生效(线上仍因 badge_id NOT NULL 崩溃) |
+| A-12 | 新增供应商(字段契约映射) | POST /api/admin/supplier/save | ❌ 500 | BUG-G 未生效 |
+| BUG-H | 已发布活动提交审核 | POST /api/admin/activity/submit-review {id:38} | ❌ 500 | 应 400 业务提示(BUG-H 未生效) |
+| BUG-I | 查询知识库 | POST /api/admin/knowledge-base/get {id:1} | ❌ 500 | 契约未对齐 / 关联表异常 |
+| A-14a | 新建知识条目(自测数据) | POST /api/admin/knowledge-base/save | ✅ 200 | 落库 id=4(BLACKBOX,残留) |
+| A-14b | 删除知识条目(自测数据) | POST /api/admin/knowledge-base/delete {id:4} | ❌ 500 | BUG-I 未生效(残留未清理) |
+| A-08 | 创建文章(防超时回归) | POST /api/admin/articles/create | ✅ 200 | 102ms 返回(短文;长文 8000 字场景未复现) |
+
+## 2. 结论
+
+1. **线上环境未部署包含本轮修复的后端代码。** 勋章创建、供应商保存、活动提交审核、知识库查询/删除、空参删除——6 个失败点与任务书 BUG-F/G/H/I/K 的"旧版 500"行为完全一致;`growth-plan /list` 端点存在(HTTP 200 而非 404)但业务 500,与"部分旧版接口 + 未迁移 DB"特征相符。
+2. **种子/中台数据已在库**(规则 id=1、报告类型 gut_flora id=1,createdAt=2026-08-24),但与本轮 DatabaseInitializer 新写的种子同源存疑(时间早于本轮代码),来源需确认(人工录入 or 已部署过某版本)。
+3. **环境存在不稳定/变更迹象**:`report-parser/types` 同一 token、同一 body 首次 200、随后稳定 500——测试窗口内线上可能发生过重启/回滚/部署。此类间歇行为需在环境稳定后复测。
+4. 文章创建实测 102ms 快速返回,**未复现 10s 超时**(短文场景),长文 + 微信检测慢的网络场景需在联网环境再压测。
+
+## 3. 测试残留数据(在线,可清理)
+
+| 类型 | 标识 | 处理 |
+|---|---|---|
+| 知识库条目 | id=4「BLACKBOX自测知识…」 | 部署修复后可经 delete 清理 |
+| 文章 | id=96「BLACKBOX自测文章…」 | 可在运营后台下架/删除 |
+
+## 4. 本轮未能覆盖(环境受限)
+
+- UI 级用例(小程序/管理端页面操作、白屏复现)——需要浏览器环境与登录态。
+- 报告 PDF 上传链路——本机无「募极生物菌群报告」官方样张(仓库仅有 reference JSON)。
+- 方案激活→孩子任务打卡闭环——库内无 generated 方案(family-list 为空)且缺孩子端账号。
+
+## 5. 行动建议
+
+1. 将最新后端构建部署到 192.168.16.251(或 cfc.iwintrue.com 上游),重启后运行迁移与种子。
+2. 复跑 `tests/selfcheck-plan-chain.ps1`,预期:TCH-11 200、A-05 400、A-11/A-12/A-14b/AAA-16 全部 200 或 400 业务提示,仅剩真实环境问题。
+3. 确认 `types` 接口间歇 500 的原因(部署后复测;若仍有,抓后端日志定位 SQL/空指针)。
+4. 确认规则/报告类型种子数据的来源(人工 or 已部署版本),避免与代码种子重复执行造成双写。