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

test(测试负责人·15:38轮): 浏览器自动化首次实跑10/11(admin5中4+frontend6) | TC-A-U05登录按钮disabled失败登记B-46 | 189派发通道确认可用(B-42收敛) | langgraph 51绿 + ledger刷新

E2E Test Bot 5 дней назад
Родитель
Сommit
f6e58b0c93

+ 161 - 0
docs/tdd/orchestration/report-test-2026-11-07-1538.md

@@ -0,0 +1,161 @@
+# 测试负责人工作汇报 · TDD 闭环自动化测试
+
+> 轮次:2026-11-07 15:38 GMT+8(定时巡检,第 12+ 轮)
+> 汇报人:cfc-tester(测试负责人,本地无人值守,review 档;本机直跑 + 远程派发)
+> 范围:全栈测试闭环 —— cfc-frontend / cfc-web / cfc-langgraph + 浏览器自动化(admin / frontend)
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | `cfc-tester`(测试负责人,本会话/用户) |
+| 汇报周期 | 2026-11-07(第 12+ 轮 / 定时巡检) |
+| 负责模块/单元 | 全栈测试闭环:cfc-frontend / cfc-web / cfc-langgraph + 浏览器自动化(admin / frontend) |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数** | 0 个 | 用例建设已在 13:25 轮完成(e2e-live 11 例 + shop-sort-api 4 例);本轮为回归巡检,未新增用例 |
+| **本轮验证执行测试数** | 465 个 | cfc-frontend 313 + cfc-web 90 + cfc-langgraph 51 + 浏览器 11(langgraph 12 skipped 不计入执行) |
+| **用例通过率** | 99.8% | 464 PASS / 465 执行;浏览器套件 10/11 = 90.9%,唯一失败 TC-A-U05 |
+
+**分套件明细:**
+
+| 套件 | 执行 | 通过 | 失败 | 跳过 | 结论 |
+|------|------|------|------|------|------|
+| cfc-frontend (Jest) | 313 | 313 | 0 | 0 | ✅ EXIT 0 |
+| cfc-web (Jest) | 90 | 90 | 0 | 0 | ✅ EXIT 0 |
+| cfc-langgraph (pytest, `--ignore=tests/qna`) | 63 | 51 | 0 | 12 | ✅ EXIT 0 |
+| 浏览器自动化 admin-desktop(本机 web-4091) | 5 | 4 | 1 | 0 | ❌ TC-A-U05 |
+| 浏览器自动化 frontend-mobile(本机 web-4091) | 6 | 6 | 0 | 0 | ✅ |
+| 浏览器自动化 frontend-mobile(web-189 派发) | 1 task | 派发执行中 | — | — | 经 opencode 协议未暴露 transcript,本地节点 frontend 6/6 为权威证据 |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数** | 1 个 | web-189 opencode 派发 frontend-mobile 浏览器任务(ses_e4b07fb10ffeQs1ckJqIm0mq1C) |
+| **直接执行数** | 1 个 | web-4091 本机直跑 live 全量(admin-desktop + frontend-mobile 串行,单节点单任务) |
+| **恢复智能体会话数** | 0 个 | — |
+| **当前在用会话数** | 1 个 | web-189 session 运行中 |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|---------|----------|----------|---------------|----------|------|
+| web-4091(localhost:4091,本机) | 本机直跑(非 opencode 会话) | running | live E2E(admin+frontend) | — | 干净 | Playwright+Chromium 本地就绪,已出权威结果 |
+| web-189-4090(192.168.16.189:4090) | ses_e4b07fb10ffeQs1ckJqIm0mq1C | running | frontend-mobile 浏览器任务(派发) | 执行中 | c:/code/cfc | 节点可达 + 鉴权通过 + session API 可用,已派发;结果经 opencode 协议未暴露 transcript,本地节点 frontend 6/6 为权威证据 |
+| opencode.iwintrue.com(192.168.16.251,langgraph 派发目标) | — | blocked | langgraph pytest | — | — | 9000/4090 closed,无法派发;langgraph 改本地 pytest 兜底 |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数** | 1 个 | TC-A-U05 浏览器用例失败(详见附录 C / B-46) |
+| **已解决测试相关问题数** | 1 个 | B-42 189 派发通道根因收敛确认:189 可达 + 鉴权可用,本轮成功派发 frontend-mobile |
+| **待解决测试相关问题数** | 1 个 | B-46(P1) |
+
+### 1.4 本轮 git 提交与推送证据
+
+> 见文末「提交与推送」段;commit 后回填 sha 与 `merge-base --is-ancestor` 核验结果。
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| _本轮提交_ | 测试负责人巡检汇报 + 台账刷新 + B-46 | 报告/台账 | 文档(md) | origin/cfclub | 待 push | 见文末 |
+
+### 1.5 状态机阶段分布(全局进度)
+
+本轮为回归巡检,未激活 TDD red→yellow→green 主循环;覆盖台账见 1.6 与 ledger。
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(SRS 池) | 0 | 异常(未启用) | srs_section 锚点 0,CFC 未启用 SRS 需求池 |
+| 契约常量(contract) | 正常 | 正常 | ops_file 扫描正常 |
+| 测试用例引用(test_case_map) | 784 | 正常 | 结构化用例 784 条 |
+| 执行结果回填(case_results) | 1185 | 正常 | 侧车 `test-progress.json` 1185 条 progress |
+
+**Ledger(discover + inventory EXIT 0):**
+- 控制器 359|handler 1943(覆盖 432)|测试文件 290(@Test 2367,部分 4)
+- 覆盖分布:covered=32 / partial=196 / uncovered=130 / no-handler=1
+- 结构化 784 + Playwright 562 + Python 67 + Java @Test 2367 + 场景 11 = **3780**(用例/方法合计)
+- Playwright 由 547 → **562(+15:e2e-live 11 + shop-sort-api 4)**,反映本轮新增浏览器自动化资产已入台账
+
+---
+
+## 二、向研发提出的改进建议
+
+| 序号 | 建议标题 | 问题描述 | 根因分析 | 建议方案 | 优先级 | 状态 |
+|------|----------|----------|----------|----------|--------|------|
+| 1 | 固化 TC-A-U05 登录助手健壮性 | admin 菜单遍历用例登录按钮点击时处于 disabled 态超时失败 | admin-live 登录助手对滑块/角色校验就绪判定不健全(与 TC-A-U04 同流程但本例滑块完成态未稳定触发按钮启用);需研发确认 admin 登录按钮启用逻辑是否确定性 | 测试侧:dragSliderToEnd 后显式 `waitForEnabled` 登录按钮 + 角色选择加 wait;研发侧:确认登录按钮 enable 判定无竞态 | P1 | 待评估 |
+| 2 | LangGraph 部署包落后于仓库(B-43 复发) | 线上问卷生成 500 | 修复未发布到 251 | 重新构建发布 + 回归 | P0 | 待评估(B-43) |
+| 3 | pom.xml 默认 skipTests=true(B-39) | 标准 mvn test 假绿零执行 | 默认 true | 改 false / CI 守卫 0 XML 报红 | P0 | 待评估(B-39) |
+
+---
+
+## 三、本轮阻塞与风险
+
+| 阻塞项 | 影响范围 | 阻塞类型 | 处置进展 | 需要协调 |
+|--------|----------|----------|----------|----------|
+| B-46 TC-A-U05 浏览器失败 | admin 菜单遍历验收 | 测试(自处置)/ 需研发确认 | 待处理 | 研发确认登录按钮启用确定性 |
+| 251 langgraph 派发不可达 | langgraph 远程实测 | 测试/运维 | B-42 部分解除(189 通,251 仍闭) | 运维开通 251 opencode 端口或改本地兜底为常态 |
+| SRS 池未启用 | 目标②覆盖率不可量化 | 需求/测试 | 待启用 | 产品/测试建 SRS 池 |
+
+---
+
+## 四、下轮工作计划
+
+| 计划项 | 预计完成时间 | 前置依赖 | 备注 |
+|--------|--------------|----------|------|
+| 固化 TC-A-U05 并重跑浏览器套件确认 11/11 | 下轮 | B-46 修复 | 回归 |
+| 启用 SRS 需求池 | 本迭代 | 产品口径 | 覆盖率可量化 |
+| 189 派发结果接入回写(opencode transcript 取回) | 下轮 | 189 节点 API | 目前仅本地节点权威 |
+
+---
+
+## 附录 C:新发现问题明细
+
+| 问题 ID | 能力键/任务号 | 问题类型 | 路由去向 | 登记时间 | 处置状态 | 关联 sha |
+|---------|---------------|----------|----------|----------|----------|----------|
+| B-46 | e2e-live/admin-live.spec.js · TC-A-U05 | 缺陷/异常(浏览器) | 测试自处置 + 研发确认 | 2026-11-07 15:38 | 待处理 | 本轮(报告 + blockers.md) |
+
+---
+
+## 对照用户双目标
+
+- **① 所有测试用例通过**:❌
+  - 失败项:TC-A-U05(admin 菜单遍历)1 例;后端 2367 @Test / 全量 Playwright 因 251 不可派发、本环境无 Maven 未跑 JUnit(按配置应由 251 远程执行)。
+  - 通过项:cfc-frontend 313 ✅、cfc-web 90 ✅、cfc-langgraph 51 ✅、浏览器 frontend 6/6 ✅。
+- **② 覆盖所有 SRS + 用户场景含异常流**:❌
+  - SRS 池未启用(0 锚点);784 结构化用例 + 11 场景零执行级验证;异常流 TC-*-E/-P 仅文档标注零执行;后端 130 uncovered handler。
+
+## 门禁结论
+
+**不通过**(双目标均未达成)。但本轮关键进展:
+1. 浏览器自动化**首次在本运行环境成功落地并实跑**(10/11,admin 5 中 4、frontend 6/6),且 web-189 派发通道确认可用(B-42 收敛);
+2. cfc-langgraph pytest 51 passed / 0 failed / 12 skipped(EXIT 0,与 12:57 基线一致绿);
+3. cfc-frontend / cfc-web Jest 全绿(313 / 90);
+4. 新增回归:TC-A-U05(admin 菜单遍历)登录按钮 disabled 超时失败,已登记 B-46 并通知研发。
+
+## 变更触发动作(用户要求「结果有变化时提交远程 + 通知研发」)
+
+- **对比上一轮(12:57)**:浏览器自动化由「不可达未实测」→ 本轮「实跑 10/11(1 失败)」,属重大变更。
+- **对比 13:25 轮(11/11 绿)**:本轮 10/11(TC-A-U05 失败),属 1 例回归。
+- **处置**:本报告 + 台账刷新(automation-status / inventory / discovery)+ B-46 登记 → 提交并 push `origin/cfclub`(Agent Mail 不可用,以仓库报告 + 台账为通知载体)。
+
+---
+
+## 提交与推送
+
+> 待 `git fetch` → `git add` 指定文档 → `git commit` → `git push origin cfclub` 后回填:
+> - 提交 sha:`<TBD>`
+> - `git merge-base --is-ancestor <sha> origin/cfclub`:`<TBD>`
+> - 若 push 被拒(non-fast-forward):不 force,记录于 blockers / 待人工 `git pull --rebase` 后重推。

+ 5 - 2
docs/tdd/test/automation-status.md

@@ -21,10 +21,10 @@
 | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
 | 结构化测试用例(md) | 11 | 784 | 60 | 724 | 489 | 255 | 14 | 0 | 26 |
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
-| Playwright(e2e/integration) | 89 | 547 | 89 | 0 | 79 | 0 | 7 | 3 | 0 |
+| Playwright(e2e/integration) | 92 | 562 | 92 | 0 | 82 | 0 | 7 | 3 | 0 |
 | Python(pytest) | 11 | 67 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
 | Java后端测试 | 290 | 2367 | 290 | 0 | 273 | 0 | 15 | 2 | 0 |
-| **合计** | — | **3765** | **450** | **735** | 863 | 255 | 36 | 5 | 26 |
+| **合计** | — | **3780** | **453** | **735** | 866 | 255 | 36 | 5 | 26 |
 
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 
@@ -819,6 +819,9 @@
 
 | 来源 | 用例数 | 自动化状态 | 执行状态 | 备注 |
 | --- | --- | --- | --- | --- |
+| `tests/e2e-live/admin-live.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — |
+| `tests/e2e-live/frontend-live.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — |
+| `tests/e2e-live/shop-sort-api.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/_smoke_browser.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/activity-registration.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/admin-activity-review.spec.js` | 2 | 已自动化(e2e) | 通过 | — |

+ 1 - 0
docs/tdd/test/blockers.md

@@ -50,3 +50,4 @@
 | B-43 | 线上 LangGraph 部署包落后于仓库(问卷生成 500,B-34 复发) | 研发/运维 | 部署态实测(`https://ai.etotem.com.cn`,`cfc-langgraph v0.3.0`):`POST /api/v1/questionnaire/generate` → **500** `'GenerateRequest' object has no attribute 'prompt_template'`;线上 `/openapi.json` 的 `GenerateRequest` 无 `prompt_template` 字段 → 部署的是修复前版本。仓库侧修复(`GenerateRequest` 补字段 + `build_prompt` 防御)已在 cfclub,但**未发布到 251**。后果:`/api/family/questionnaire` AI 生成 100% 失败并静默降级为模板。建议:重新构建并发布 LangGraph 服务,发布后按同一 curl 回归。闭环:该接口 200 且问卷 JSON 非空 + 线上 openapi 出现 `prompt_template` | 测试(13:25 轮线上实测登记) | 2026-11-07 13:25 | 待处理 |
 | B-44 | 管理端「运营驾驶舱」文案与统一用户模型冲突(孩子总数) | 研发 | 真实登录后驾驶舱统计卡显示「**孩子总数 4256**」(截图 `_artifacts_live/admin-04-logged-in.png`),而 AGENTS.md 规定「新功能禁止再引入『孩子』概念,统一用能登录用户/不能登录用户(memberType=login/local)」。属口径遗留,非功能缺陷。建议改为「未开通登录的子成员」或拆为两卡。闭环:TC-A-U04 增断言「驾驶舱不出现『孩子总数』」,改文案后转绿 | 测试(13:25 轮 UI 实测登记) | 2026-11-07 13:25 | 待处理 |
 | B-45 | 两条需求变更的前端用例只在工作区、未入库(团队邀请分享 / 优惠券已领取按钮) | 测试/流程 | 合并远端后核对当日 4 条需求变更:`2026-11-06-我的团队收益口径与邀请分孚需求变更.md` 与 `2026-11-06-优惠券已领取券按钮修复需求变更.md` 的用例已存在并**随 cfc-frontend 16 套件 313 例实际执行通过**(`__tests__/specs/team-invite-share.test.js`、`__tests__/specs/coupon-claimed-actions.test.js`),但 `git status` 显示 `cfc-frontend/__tests__/specs/` 整体为 `??`(untracked)→ 只存在于主工作区,`git clean -fd` 即静默丢失。与 B-23(SC-X-22 契约未入库)同源。建议:由研发/资产作者 `git add cfc-frontend/__tests__/specs/` 后提交;测试侧不代提交研发 WIP。闭环:`git ls-files cfc-frontend/__tests__/specs/` 有命中且 `git status` 该路径干净 | 测试(13:25 轮实测登记) | 2026-11-07 13:25 | 待处理 |
+| B-46 | e2e-live/admin-live.spec.js · TC-A-U05 后台核心菜单可访问 | 测试(自处置)/ 研发确认 | 浏览器自动化(本机 web-4091)TC-A-U05 失败:登录按钮点击时处于 `disabled` 态(is-disabled)超时 20s 失败;同文件 TC-A-U04(完全相同登录流程)在本轮实跑通过,故应用登录功能正常,失败源于登录助手对滑块/角色校验就绪判定不健全(或 admin 登录按钮启用逻辑存在竞态,需研发确认)。已隔离复跑 2 次均复现(非偶发 flake)。影响:admin 菜单遍历验收缺口。测试侧自处置:dragSliderToEnd 后显式 `waitForEnabled` 登录按钮 + 角色选择加 wait 后再判定;研发侧:确认登录按钮 enable 判定无竞态。闭环:TC-A-U05 隔离复跑通过 + 全量浏览器套件 11/11 绿 | 测试负责人(本轮巡检登记) | 2026-11-07 15:38 | 待处理 | |

+ 5 - 2
docs/tdd/test/inventory.md

@@ -9,11 +9,11 @@
 | 来源类型 | 文件数 | 用例/方法数 |
 | --- | --- | --- |
 | 结构化测试用例(md) | 11 | 784 |
-| Playwright(spec.js) | 89 | 547 |
+| Playwright(spec.js) | 92 | 562 |
 | Python(pytest) | 11 | 67 |
 | Java后端(测试文件) | 290 | 2367 (@Test) |
 | 用户场景(md) | 11 | 文件级 |
-| **合计** | — | **3765** 用例/方法 |
+| **合计** | — | **3780** 用例/方法 |
 
 ## 二、结构化测试用例(`tests/test-cases/*.md`)
 
@@ -812,6 +812,9 @@
 
 | 文件 | 用例数 | 来源 |
 | --- | --- | --- |
+| `tests/e2e-live/admin-live.spec.js` | 5 | `tests/e2e-live/admin-live.spec.js` |
+| `tests/e2e-live/frontend-live.spec.js` | 6 | `tests/e2e-live/frontend-live.spec.js` |
+| `tests/e2e-live/shop-sort-api.spec.js` | 4 | `tests/e2e-live/shop-sort-api.spec.js` |
 | `tests/e2e/_smoke_browser.spec.js` | 2 | `tests/e2e/_smoke_browser.spec.js` |
 | `tests/e2e/activity-registration.spec.js` | 5 | `tests/e2e/activity-registration.spec.js` |
 | `tests/e2e/admin-activity-review.spec.js` | 2 | `tests/e2e/admin-activity-review.spec.js` |