Forráskód Böngészése

test(r93): 测试负责人汇报 2026-11-08 22:27 — 251 langgraph 服务恢复(派251指令落地)+ 签名横屏SRS补用例(B-75)+ admin非确定flaky(B-76)+ B-55闭环

E2E Test Bot 4 napja
szülő
commit
fb7689265f

+ 157 - 0
docs/tdd/orchestration/report-test-2026-11-08-2227.md

@@ -0,0 +1,157 @@
+# 闭环自动化测试 · TDD 测试负责人汇报(2026-11-08 22:27,第 93 轮,本自动化)
+
+> 触发:定时自动化「作为测试负责人执行自动化测试闭环(全部用例通过 + 覆盖 SRS/场景 + 浏览器走 cfc.iwintrue.com/admin 与 /frontend + langgraph 派 251 + 结果有变化提交远程并通知研发)」。
+> 执行档:`review`(离线 + 内网已授权)——未联网装依赖、未启停生产服务、未改生产代码;浏览器套件本机串行实跑(每节点单任务);langgraph 经 251 部署节点核验 + 本机 venv 兜底。
+> 基线:`cfclub` @ `a7edf5698`(= `origin/cfclub`,已 rebase 对齐;工作区跨角色 WIP 零触碰)。
+> 节点拓扑(用户指令落地):浏览器 `192.168.16.189:4090`(admin)· `192.168.16.204:4091`(frontend)· langgraph `192.168.16.251`(:9000 服务 + :4096 派发);本机(204)串行兜底。
+> 汇报人:测试负责人(cfc-tester)。
+
+---
+
+## 一、实跑结果总表(与 R92 基线 @ 1d46bf0c7 对比)
+
+| 维度 | 本轮结果 | R92 基线 | 判定 |
+|------|----------|----------|------|
+| cfc-frontend (Jest) | **358 pass / 24 fail / 1 skip**(22 suites,383 总) | 358 / 24 / 1 | **零漂移** |
+| cfc-web (Jest) | **116 / 116**(17 suites,EXIT 0) | 116 / 116 | 零漂移 |
+| cfc-langgraph (pytest, 本机 venv 兜底) | **32 pass / 12 fail**(44 collected,EXIT 1,172s) | 251 派发 36 / 8 | 见 §二(环境降级,**非代码回归**) |
+| langgraph (251 部署节点 LIVE 核验) | `/health`→ok(chromadb/llm/java_backend 全 ok);`POST /api/v1/chat`→有效回答 | 251:9000 当时 CLOSED | **有变化(B-55 服务维度解除 + 用户派 251 指令落地)** |
+| 浏览器 admin-desktop (`cfc.iwintrue.com/admin`) | **4 pass / 1 flaky-fail**(U01 或 U04 非确定失败,另见 B-76) | 5 / 5(复跑) | **有变化(flaky 由 U04 升级为非确定,见 B-76)** |
+| 浏览器 frontend-mobile (`/frontend`) | **6 / 6**(TC-F-U01~U06,47s) | 6 / 6 | 零漂移 |
+| 浏览器 shop-api | **4 / 4**(TC-S-U01~U04,5s) | 4 / 4 | 零漂移 |
+| 浏览器 health-api | **13 / 13**(TC-H-U07~U10 + TC-HP-U01~U03,5s) | 13 / 13 | 零漂移(B-61 连续第 13 轮零回归) |
+| cfc-backend 2398 @Test | 本节点**不可执行**(无 Maven;远程派发失效) | 不可执行 | 同历史 |
+
+### 1.1 与上轮基线对比(R92 → R93)
+
+| 项 | R92 | R93 | Δ |
+|---|---|---|---|
+| 前端 Jest | 358过+24红+1skip | 358过+24红+1skip | 0 |
+| web Jest | 116/116 | 116/116 | 0 |
+| langgraph(权威 251 派发) | 36/44 | 251:9000 服务恢复;本机 venv 32/12(环境降级,详见 §二) | 用户派 251 指令落地;本机 venv 因本地 key 401 降级 |
+| 浏览器 E2E | 28/28(admin 复跑 5/5) | 27/28 稳定 + 1 非确定 flaky(admin) | admin flaky 由 U04 升级为跨 U01/U04 非确定 |
+| health-contract | 13/13 | 13/13 | 0 |
+
+---
+
+## 二、langgraph 专项(用户指令「派 251」落地 + 本机 venv 降级归因)
+
+用户明确要求「langgraph 部署在 192.168.16.251,测试要分派给该节点」。本轮**该指令首次实质性落地核验**:
+
+- **251 节点状态**:`192.168.16.251:9000` 返回 `{"status":"ok","components":{"chromadb":{"status":"ok"},"llm":{"status":"ok"},"java_backend":{"status":"ok"}}}`(此前 R78~R91 长期 CLOSED,B-55 服务维度本轮解除);`:4096` opencode 仍 OPEN(R92 已成功派发 pytest 得 36/44)。
+- **251 LIVE 实测(真实「在 251 上测 langgraph」)**:`POST /api/v1/chat`(`query="推荐一些补钙的食物"`, `user_id=251`)→ `{"answer":"我来帮您搜索一些关于补钙的相关商品和文章,请稍等!","conversation_id":"conv_251_...","sources":[],"tasks":[],"trace_id":"..."}`——**251 部署节点 LLM 推理端到端可用**(对比本机 venv 同调用恒 401)。
+- **本机 venv 降级归因(12 红 = 2 + 6 + 4)**:
+  - `test_analyze.py` ×2(B-65 产品缺陷,缺 thread_id config,恒 500)——与 R92 一致;
+  - `test_auto_tag.py` ×5 + `test_chat.py` ×1(B-74 测试装置,startup 未触发 checkpointer)——与 R92 一致;
+  - `test_intent.py` ×4(**本轮新增红**)——根因实测:`app.prompt_service` 加载 `intent_classifier` 提示词失败 `All connection attempts failed` + `Error code: 401 - Authentication Fails, Your api key: ****ocal is invalid` → 分类失败回退默认 `chat` 意图 → 断言 `Intent.X == chat` 失败。**属 B-54 环境类(本机 venv LLM key 无效/占位),非代码回归**;251 部署节点因持有有效 key 不受此影响(故 R92 251 派发 36/44、本机 32/12 的差值 4 例完全由本地 key 环境导致)。
+- **结论**:langgraph 代码的真实质量以 251 部署节点为准(健康,LLM/ chromadb/后端全 ok,R92 pytest 36/44 的 8 红均为 B-65/B-74 已知项);本机 venv 的 12 红中 4 例为本地 key 环境假红。**建议后续轮次正式将 langgraph pytest 派发 251:4096(R92 已证通),消除本机 env 漂移。**
+
+---
+
+## 三、网络探活与节点(拓扑实测)
+
+| 目标 | 结果 | 说明 |
+|---|---|---|
+| cfc.iwintrue.com `/admin` | 200 | admin-desktop 套件(本机串行实跑) |
+| cfc.iwintrue.com `/frontend` | 200 | frontend-mobile 套件(本机串行实跑) |
+| 192.168.16.189:4090 | OPEN(Basic 200,但模型调用均 failed,B-56 缺 LLM 凭证) | admin 派发目标;凭证就绪前本机兜底 |
+| 192.168.16.204:4091 | OPEN | frontend 派发目标 |
+| 192.168.16.251:9000 | **OPEN** `{"status":"ok"}`(含 llm/chromadb/java_backend 全 ok) | **langgraph 服务恢复(B-55 服务维度解除)** |
+| 192.168.16.251:4096 | OPEN | langgraph pytest 派发目标(R92 已跑 36/44) |
+| 192.168.16.251:3306 | OPEN | MySQL 可达 |
+
+> **B-61 线上复核(本轮)**:匿名 POST `/api/health/plan/list` 现返回 `{"code":401,"message":"请先登录"}` → 与 health-contract 13/13 全绿一致,P0 健康方案鉴权线上生效维持(第 13 轮零回归)。
+
+---
+
+## 四、SRS / 场景变更感知(用户要求:SRS、场景变更须更新测试用例)
+
+- **SRS 变更检测**:`git fetch` 后 `origin/cfclub` 较本地基线前进 1 提交 `a7edf5698`(`docs(signature): 手签名横屏适配任务书+需求变更(R1高度未重算/R2 rpx横屏放大/R3 rect未刷新)`)。
+- **变更内容**:新增 SRS `DOC-2026-11-08-signature-landscape-fix`(能力键 `signature.landscape.layout`,纯前端 2 文件纵切,状态「待开发」),含三处根因 R1/R2/R3 + 旋转兜底 + 竖屏回归要求。
+- **测试用例更新(已执行)**:新增 `tests/test-cases/signature.md`,覆盖 R1/R2/R3 三处根因 + 旋转兜底 + 竖屏回归 + 异常防御(TC-SIG-01~05 / -E×3 / -N01),状态标「待开发(RED)」——与 S-cfc-79 模式一致(SRS 变更→补 RED 用例覆盖)。
+- **结论**:本轮 SRS 变更→测试用例更新闭环**已满足**(新需求有对应用例覆盖);新增用例为预期 RED,待研发实现 `signature.landscape.layout` 后转绿。**此 SRS 变更为测试结果「有变化」的触发项**(见 §九)。
+
+---
+
+## 五、对照用户双目标
+
+- **目标① 所有测试用例全部覆盖并通过** ❌
+  - 前端 24 RED(S-cfc-79 预期 RED,待实现)+ langgraph 权威 8 红(B-65 2 + B-74 6,B-54 本机 env 4 假红)+ 后端 2398 @Test 本节点不可验证(无 Maven / 远程派发失效)+ admin 1 非确定 flaky。
+  - 可本机验证子集 = 前端 358 + web 116 + lg(251权威 36) + 浏览器 27 = **537 例,其中 510 通过 / 24 失败(预期 RED)/ 12 失败(langgraph,含 4 env 假红)/ 1 flaky**。
+- **目标② 覆盖全部 SRS + 用户场景(含异常流)** ❌
+  - SRS 池未启用(0 锚点);`automation-status.md` 显示 795 文档用例/场景 已执行=0;后端约 130 handler uncovered;异常流 TC-*-E/-P 仅文档标注零执行。
+  - 本轮正向:新增 `signature.md` 为签名横屏改版 SRS 补齐用例(含异常流 -E×3),SRS→用例覆盖可见性提升;B-61 健康方案鉴权 13/13 维持。
+
+---
+
+## 六、覆盖缺口清单(承袭 + 本轮新增)
+
+| 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
+|----------|------|------|--------------|--------|----------|
+| B-73 前端 S-cfc-79 24 RED | 功能未实现,24 红 | 用户目标①未达成 | 研发实现 diet rework → 套件 28/28 转绿 | P1 | 研发实现 recommendation.vue 改版 |
+| B-65 langgraph `analyze` 恒 500 | 产品缺陷未修(第 4 轮) | `/api/v1/analyze` 线上不可用 | 修复后定向复跑(去 MemorySaver 或传 thread_id) | P1 | `create_analysis_graph()` 去 MemorySaver 或 ainvoke 传 thread_id |
+| B-74 langgraph 测试装置 6 红 | A 类(startup 未触发) | 6 例长期假红遮蔽真实回归 | conftest 显式 init_checkpointer | P1 | 测试侧自修 + 251 拉取复验 |
+| B-54 langgraph 本机 env 4 红 | 本机 venv LLM key 无效(401) | 本机跑分假红、误导 | **正式派发 251(持有有效 key)跑 langgraph pytest** | P1 | 251:4096 派发(R92 已证通) |
+| B-55 251 服务 CLOSED | **本轮解除**(:9000 health ok) | 丧失隔离验证节点 | 维持 251 在线 + 派发 pytest | 已解除 | 运维维持 251:9000 在线 |
+| B-56 189 派发失效 | 189 opencode 缺 LLM 凭证(B-56) | admin 浏览器任务只能本机串行 | 189 本机填有效 apiKey + 重启 | P2 | 运维配置 189 凭证 |
+| B-76 admin-desktop 非确定 flaky | 登录页/滑块时序,U01/U04 轮替失败 | 假红干扰门禁趋势 | 测试侧:waitForURL 硬断言 + 复跑纪律(B-67) | P2 | 测试自处置 |
+| B-68 / B-69 | 前后端契约/安全口径漂移 | 管理端概览恒 0 / 私有端点口径不一 | 研发修键名/入 LOGIN_REQUIRED_PATHS | P1 | 研发修复 + 契约用例转绿 |
+| 后端 2398 @Test 本机不可跑 | 无 Maven | 后端门禁缺口 | CI 接入后端 JUnit / 授权编译 | P1 | CI 接入 |
+| SRS 池未启用 + 795 文档用例零执行 | 覆盖零验证 | 目标②缺口 | 启用 SRS 池 + 闭环 795 用例执行 | P0 | 启用 SRS 池 |
+
+---
+
+## 七、五要素问题清单(本轮新增/升级)
+
+### B-75 · 签名横屏适配 SRS 已补用例,待研发实现(预期 RED)
+1. **问题描述**:SRS `DOC-2026-11-08-signature-landscape-fix`(能力键 `signature.landscape.layout`)状态「待开发」,横屏签名区过小/字号过大/笔迹不可见。
+2. **测试 bug 点**:`tests/test-cases/signature.md`(TC-SIG-01~05 / -E×3 / -N01,覆盖 R1/R2/R3)。
+3. **最优修改方案**:研发实现 `signature.vue` 横屏高度重算 + rpx→px 化 + `hand-signature.vue` 新增 `refreshRect()`,使 TC-SIG 系列转绿。
+4. **修改目的**:达成用户目标①(全部用例通过)+ 闭环 SRS 变更后的契约验证。
+5. **闭环**:研发实现→补充可执行 e2e/Jest 用例→复跑全绿 + SRS 状态置 YELLOW→GREEN。
+
+### B-76 · admin-desktop 非确定 flaky(测试侧,自处置)
+1. **问题描述**:admin 登录页/滑块+凭据时序非确定失败——首跑 U04 失败、复跑 U01 失败,且偶发 skip,5 例中稳定 4 通过 + 1 非确定失败。
+2. **测试 bug 点**:`tests/e2e-live/admin-live.spec.js`(TC-A-U01~U05)。
+3. **最优修改方案**:测试侧将固定 `waitForTimeout(5000)` / `test.skip(url.includes('/login'))` 兜底改为 `waitForURL(/\/admin\/dashboard/, { timeout: 20000 })` 硬断言(复用登录态 storageState),并维持 B-67「单轮红先独立复跑 ≥2 次 + curl 直探」三证纪律。
+4. **修改目的**:消除环境抖动假红,避免误判为鉴权回归、污染门禁趋势。
+5. **闭环**:改后 admin 5/5 稳定复跑无 flaky。
+
+### B-54(重申)· langgraph 本机 venv LLM key 401 环境漂移
+1. **问题描述**:本机 venv 跑 langgraph pytest 时 `prompt_service` 加载提示词 `401 - Authentication Fails, Your api key: ****ocal is invalid` → intent 分类 4 例回退默认 chat 而红。
+2. **测试 bug 点**:`cfc-langgraph/tests/test_intent.py`(4 例)。
+3. **最优修改方案**:**正式将 langgraph pytest 派发 251:4096**(251 持有有效 key,R92 已跑 36/44,本轮 :9000 健康含 llm:ok)。
+4. **修改目的**:以 251 权威结果替代本机 env 假红,准确反映 langgraph 代码质量。
+5. **闭环**:251 派发复跑 36/44(8 红=B-65+B-74),4 env 假红消除。
+
+---
+
+## 八、阻塞与风险(研发通知载体,见 blockers.md)
+
+- **已闭环/解除**:B-55(251:9000 服务恢复)、B-61(P0 健康方案鉴权,第 13 轮零回归)。
+- **新增**:B-75(签名横屏 SRS 待实现,测试已补用例)、B-76(admin 非确定 flaky,测试自处置)。
+- **持续未闭环**:B-73(S-cfc-79 24 RED)、B-65(analyze 恒 500,第 4 轮)、B-74(langgraph 装置 6 红)、B-54(本机 key env)、B-56(189 凭证)、B-68/B-69(前后端契约/安全)、后端 JUnit 本机不可跑、SRS 池未启用。
+
+---
+
+## 九、变更触发判定(用户规则:结果有变→提交远程+通知研发)
+
+- **本轮触发**:① SRS 变更 `a7edf5698`(签名横屏)→ 新增测试用例 `signature.md`(B-75)② 251:9000 服务恢复(B-55 解除,用户派 251 指令落地)③ admin-desktop flaky 由 U04 升级为非确定(B-76)。**结果有变化**。
+- **动作**:本报告 + `tests/test-cases/signature.md` + blockers.md(B-75/B-76 新增 + B-54/B-55 重申)已 commit 并 rebase 至 `origin/cfclub` 后 push。
+- **通知研发重点**:实现 `signature.landscape.layout` 使签名横屏用例转绿(B-75);B-65(analyze 500)/B-68/B-69 持续催办;正式将 langgraph pytest 派 251 消除本机 env 假红(B-54)。
+
+---
+
+## 十、产物
+
+- 本报告:`docs/tdd/orchestration/report-test-2026-11-08-2227.md`(已 push)
+- 新增用例:`tests/test-cases/signature.md`(已 push,覆盖签名横屏 SRS)
+- 阻塞台账:`docs/tdd/test/blockers.md`(B-75/B-76 新增 + B-54/B-55 重申,已 push)
+
+## 十一、待办(持续)
+
+1. 研发实现 `signature.landscape.layout`(B-75)使签名横屏用例转绿。
+2. 研发修 B-65(analyze 500)/ B-68(概览键拼写)/ B-69(`/api/mind/` 鉴权)。
+3. 测试侧:B-76 admin flaky 改 `waitForURL` 硬断言;B-74 conftest 显式 init_checkpointer。
+4. 运维/研发:251:9000 维持在线 + **正式派发 langgraph pytest 至 251:4096**(B-54 消除本机 env 假红);189 配 LLM 凭证(B-56)落实每节点单任务分派。
+5. 启用 SRS 需求池 + 闭环 795 文档用例执行(目标②);CI 接入后端 JUnit 实跑固化基线。

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
docs/tdd/test/blockers.md


+ 38 - 0
tests/test-cases/signature.md

@@ -0,0 +1,38 @@
+# 测试用例 · 手签名横屏适配(Signature Landscape)
+
+> 关联 SRS:`docs/superpowers/specs/2026-11-08-signature-landscape-fix.md`(需求编号 `DOC-2026-11-08-signature-landscape-fix`,状态:待开发)。
+> 能力键:`signature.landscape.layout`(前端 UI 纵切,无独立后端接口)。
+> 涉改文件:`cfc-frontend/pages/signature/signature.vue`、`cfc-frontend/components/hand-signature/hand-signature.vue`。
+> 派生自 `user-scenarios/` 的家长/孩子签名回传场景(health-plan-summary / checkout / consignee-edit 跳转进入)。
+
+| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
+|---|---|---|---|---|---|---|---|---|---|---|
+| TC-SIG-01 | SIG-1 | 签名·横屏布局 | 家长/孩子 | P0 | 兼容 | 进入签名页;设备/工具支持横屏 | 1. 进入签名页 2. 切横屏(wx.setPageOrientation / H5 resize) | 画布高度 = 横屏短边 − 固定栏(标题66+底部92+同意40+留白16),可视区无裁剪(R1) | S1 canvasHeight 随旋转刷新 | — |
+| TC-SIG-02 | SIG-2 | 签名·横屏字号 | 家长/孩子 | P0 | 兼容 | 横屏态 | 1. 横屏下查看标题/副标题/按钮/旋转提示文字 2. 对比竖屏观感 | 文字与按钮尺寸与竖屏一致(rpx→px 化),横屏不再放大 ~2.2 倍(R2) | S2 rpx 改 px | — |
+| TC-SIG-03 | SIG-3 | 签名·笔迹可见 | 家长/孩子 | P0 | 功能 | 横屏态 | 1. 横屏下书写签名 2. 导出 dataUrl | 笔迹实时可见、不被 `overflow:hidden` 裁掉;导出 dataUrl 完整(R3) | S3 refreshRect() 修复 rect 错位 | — |
+| TC-SIG-04 | SIG-4 | 签名·旋转兜底 | 家长/孩子 | P1 | 功能 | 已横屏 | 1. 横屏→切回竖屏→再横屏 2. 检查画布高度与 rect | 每次旋转后高度与 rect 均正确刷新(onWindowResize + setPageOrientation 回调双兜底) | S1/S3 兜底 | — |
+| TC-SIG-05 | SIG-5 | 签名·竖屏回归 | 家长/孩子 | P1 | 回归 | 未横屏 | 1. 竖屏进入签名页 2. 从 health-plan-summary / checkout / consignee-edit 跳转进入 3. 签名后回传 | 竖屏布局正常;三处跳转回传链路不回归 | 不修改竖屏链路 | — |
+
+### 异常流用例(派生自正常流)
+
+| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
+|---|---|---|---|---|---|---|---|---|---|---|
+| TC-SIG-01-E | SIG-1 | 签名·rect 防御 | 家长/孩子 | P2 | 异常 | rect 未刷新(旧值/ null) | 1. 旋转后 rect 仍为竖屏旧值或 null 时书写 | `getPos()` 在 rect 为 null 时沿用 raw clientX/Y,不抛错、不崩溃(R3 防御) | S3 getPos 防御 | — |
+| TC-SIG-02-E | SIG-2 | 签名·安卓闪烁 | 家长/孩子 | P2 | 异常 | 安卓即时旋转 canvas 重建 | 1. 安卓机型即时旋转后 canvas 闪烁重建 2. refreshRect 成功后书写 | 笔迹仍可见(`hasDrawn` 不变,不加重绘逻辑) | S3 风险说明 | — |
+| TC-SIG-03-E | SIG-3 | 签名·监听注销 | 家长/孩子 | P2 | 异常 | 多次进出签名页 | 1. onUnload 后再次进入签名页 2. 检查 resize 监听 | 监听在 onUnload 注销,无重复绑定/内存泄漏 | S1 onUnload 注销 | — |
+
+### 权限流用例(派生自正常流)
+
+> 本特性为纯前端 UI 纵切,无独立权限维度;权限沿用进入签名页的上游角色(家长/孩子),不单列权限流。
+
+### 非功能测试用例
+
+| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
+|---|---|---|---|---|---|---|---|---|---|---|
+| TC-SIG-N01 | SIG-2 | 签名·多端兼容 | 家长/孩子 | P1 | 兼容 | iOS / 安卓真机或等效工具 | 1. 两平台横屏进入签名页 | 文字/按钮观感一致,无放大溢出 | S2 px 化 | — |
+
+### 状态
+
+- 上述用例随 SRS 变更 `a7edf5698`(2026-11-08)新增,覆盖 R1/R2/R3 三处根因 + 旋转兜底 + 竖屏回归 + 异常防御。
+- 功能状态:**待开发(RED)**——`signature.landscape.layout` 尚未实现,用例为预期失败态,待研发 YELLOW 后转绿。
+- 可执行化:建议补 `tests/e2e-live/signature-landscape.spec.js`(横屏视口 + 旋转事件注入)或 `cfc-frontend` 组件单测(hand-signature refreshRect / signature.vue px 化),纳入 Playwright live / Jest 闭环。

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott