automation-run-2026-11-08-R88.md 17 KB

自动化运行证据(第 88 轮 · 2026-11-08 14:00 ~ 15:10)

触发:定时自动化「作为测试负责人执行自动化测试闭环(全部用例通过 + 覆盖 SRS/场景 + 浏览器走 cfc.iwintrue.com + langgraph 派 251)」。 执行档:review(离线)——不联网装依赖、不启停服务、不改生产代码;仅改测试侧装置文件(有据可查,见 §6)。 基线:cfclub @ 49d7bccac(= origin/cfclub,跑前跑后一致,窗口内零提交)。 工作区:已跟踪文件 0 修改(git status --porcelain | grep -v '^??' = 0)→ 后端在本工作区直接跑全量,无需隔离树。 原始日志:_r88_backend.log(后端全量)· _r88_lg.log / _r88_lg2.log(langgraph 修前/修后)· _r88_targeted2.log(定向复跑)· _r88_agg.json(聚合)


1. 实测结果总表

套件 命令 结果 通过率 退出码
cfc-backend(全量单元+集成) mvn -o -B test(JDK1.8.0_25 + Maven 3.9.9) 311 类 / 2628 例 / 40F / 34E / 4S → 2550 过 97.03% 1(有红)
cfc-frontend(Jest) node node_modules/jest/bin/jest.js --ci 21 suites · 354 passed / 1 skipped / 355 99.72% 0
cfc-web(Jest) 同上 12 suites · 90 passed / 90 100% 0
cfc-langgraph(pytest,本机 venv py3.12) .venv/Scripts/python.exe -m pytest tests/ --ignore=tests/qna 44 collected · 32 passed / 12 failed 72.73% 1
admin-desktop(E2E 真浏览器) npx playwright test -c playwright.config.live.js --project=admin-desktop 5 passed(TC-A-U01~U05) 100% 0
frontend-mobile(E2E 真浏览器) ... --project=frontend-mobile 6 passed(TC-F-U01~U06) 100% 0
shop-api(E2E 契约) ... --project=shop-api 4 passed(TC-S-U01~U04) 100% 0
health-contract(E2E 契约) npx playwright test -c playwright.config.health.js 13 passed(TC-H-U01~U10 + TC-HP-U01~U03) 100% 0

合计 3145 例 / 3054 过 = 97.11%(剔除 5 skip 后 97.26%);红例 86(后端 74 + langgraph 12)。

1.1 后端关键度量

指标 值 说明
测试类 / 用例 311 / 2628 surefire XML 实测,含参数化展开
失败 / 错误 / 跳过 40 / 34 / 4 @Disabled 4 例
红类 / 红例 27 / 74 逐类见 §3
完整性 311/311 XML 无静默丢失、无 0 字节 XML、.dump 0
testCompile 317 源 / 0 错 含本轮测试侧修订后重编
恒等式 @Test 2618 + 参数化展开 26 − @Disabled 4 − 早退截断 12 = 2628(误差 0) 早退截断 12 未逐类取证,标注为「待核实」
Maven 总时长 46:18 XML 耗时总和 2361.2s
慢类 Top3 GuideRolePermissionTest 274.3s / ArticleControllerTest 244.7s / ActivityControllerTest 241.5s B-60(单类超 120s)仍成立

1.2 与上轮基线对比(重要:方向性改善)

项 R77 基线(采信值) 本轮 R88 实测 Δ
后端用例 2398 2628 +230
后端通过率 95.07% 97.03% +1.96pp
后端红例 115 74 −41
后端红类 35 27 −8
浏览器 E2E 25/25 28/28 +3(health 13 全绿)
契约鉴权(B-61) 3 红(P0 连续 8 轮) 13/13 绿 闭环

说明:R78~R87 一直未跑后端全量(多轮以「指令排除编译」采信 R77 数字),本轮首次实测到研发侧修复后的真实基线。方向:红例 115→74 主要由研发修复(Article/Auth/GuideOrder/GuideTeam 等历史红类已转绿)+ 测试侧装置跟进。


2. 环境与节点分派实测

目标 结果 说明
cfc.iwintrue.com:443 OPEN /admin 302 → 登录页;/frontend H5 正常
192.168.16.189:4090 OPEN(HTTP 200,opencode Web UI) 浏览器节点可用;本机与 189 每节点单任务约束下,本轮全部浏览器任务在本机串行执行(workers:1),未并发
192.168.16.189:22 CLOSED(Connection refused) 无 SSH 通道
192.168.16.251:9000 / :8000 CLOSED langgraph 服务未监听 → 无法按指令派发 251,降级本机 venv 直跑(标注未实测项)
192.168.16.251:22 OPEN 但 publickey,password 均被拒 无可用凭据,不可远程执行
192.168.16.251:8080 Gogs Git 服务(非 langgraph) 不可用于 langgraph 派发

分派结论:langgraph 派 251 未达成(B-55 延续第 N 轮);浏览器任务按「每节点单任务」在本机单节点串行完成 4 个套件,未触发并发。


3. 后端 74 例红因三层归因

3.1 按异常类型(实测统计)

异常类型 例数
AssertionFailedError 24
NullPointerException 16
IllegalStateException(均 Failed to load ApplicationContext) 8
WantedButNotInvoked(Mockito verify) 8
AssertionError 5
NoSuchElementException(No value present) 4
InvalidUseOfMatchersException 3
ArgumentsAreDifferent 3
MockitoException 2
DataIntegrityViolationException(DB 字段截断) 1

3.2 归因分桶

归因桶 例数 判定依据 归属
A-1 本轮已修(契约/装置漂移) 8 guide-bind 改「提交申请待审批」、getXxxByChild→getXxxByFamilyMember、checkMemberOnly 需 taskMapper.selectById 打桩 测试侧
A-2 Mockito 误用族 8 InvalidUseOfMatchersException 3 + ArgumentsAreDifferent 3 + MockitoException 2 测试侧
A-3 verify 未触发(未打桩) 8 CfCommissionServiceSettleTest 8 例 WantedButNotInvoked: cfBalanceService.earnByRule(...),档位/规则查询未 stub 测试侧
A-4 夹具 NPE 13 16 例 NPE 中 16/16 堆栈首帧均在测试方法内、无生产帧(B-27 判据),扣除已修 3 例 测试侧
A-5 Optional 空值 4 DimensionScoreServiceImplTest 4 例 NoSuchElementException: No value present(repo 未 stub) 测试侧
A-6 上下文加载失败 8 auditLogAspect → auditLogService 注入链失败(AdminFamilyOverviewControllerTest 3 / FamilyAdminOverviewServiceTest 3 / UserServiceFamilyNameLinkTest 2) 测试侧(需补 @MockBean)
A-7 断言基线未细分 23 剩余 AssertionFailed/AssertionError,需逐例判定「装置 vs 产品」 待核实
P-1 产品缺口 1 MindFortuneControllerTest 期望 code=401 实得 400 → /api/mind/ 未入 LOGIN_REQUIRED_PATHS(详见 B-69) 研发
E-1 环境/数据 1 GuideModuleIntegrationTest MySQL Data truncation: Out of range 环境

量化结论:A 类合计 72 例(含已修 8)、产品 1、环境 1、待核实 23。 若 A-2~A-6 全部修完(41 例),后端通过率 → 98.59%、红例 74→33;叠加 A-7 全绿则 → 99.47%。

3.3 27 个红类清单(按红例数降序)

CfCommissionServiceSettleTest 8 · EnergySystemFlowTest 6F+1S · ProductOrderServiceFulfillmentMultiModeTest 6E · GuideFamilyTaskControllerTest 5(已修)· PlannerBindInviteFlowTest 5 · DimensionScoreServiceImplTest 4E · FamilyJoinRequestServiceReferrerBindTest 4E · AdminFamilyOverviewControllerTest 3E · FamilyAdminOverviewServiceTest 3E · GrowthRecordSyncFlowTest 3 · ArticleWorkflowTest 3 · DimensionRegistryMapContractTest 3F · ProductOrderServiceUpdateExpressFieldTest 3F · GuideRolePermissionTest 2(已修)· FortuneServiceTest 2E · UserServiceFamilyNameLinkTest 2E · OrchestrationEngineTest 1 · OrchestrationIntegrationTest 1 · MembershipPaySwitchTest 1 · PaymentServiceORDRoutingTest 1 · DailyCheckinStreakFlowTest 1E · GuideModuleIntegrationTest 1E · FamilyControllerTest 1(已修)· MindFortuneControllerTest 1(产品)


4. langgraph 12 例红因(本机 venv 兜底,251 未派发)

修前后对比:17 红 → 12 红(+6 绿,44 收集 / 32 过)。

类 例数 归因 类型
test_analyze.py 2 ValueError: Checkpointer requires ... thread_id → /api/v1/analyze 恒 500 产品缺陷(B-65)
test_chat.py 1 500,ImportError: chromadb_rust_bindings DLL 缺失 环境(B-54)
test_auto_tag.py 5 依赖 /api/v1/chat(RAG/chromadb)→ 同上 环境
test_intent.py 4 prompt_service 连 localhost:9082 失败 + 意图分类降级 chat 环境(需本机后端 + LLM)

本轮测试侧修复(+6 绿):

  • test_memory.py 3 红 → 4 绿(B-64 闭环):对齐 MemoryManager 真实契约(__init__(embeddings) / save_conversation / recall),并以 patch("langchain_chroma.Chroma") 隔离原生 DLL 依赖 → 单测不再被宿主机环境拖红;新增守护「旧接口不回潮」。
  • test_report_parse.py 2 红 → 5 绿(B-66 闭环):样本 PDF 路径由写死容器路径 /app/cfc/... 改为 __file__ 上溯 3 级解析,附 requires_sample_pdf 缺样本即 skip。

5. 浏览器自动化明细(单节点串行)

套件 用例 结果 耗时
admin-desktop TC-A-U01 登录页渲染 / U02 滑块人机验证 / U03 未登录拦截 / U04 真实登录进主框架 / U05 核心菜单 5/5 1.7m
frontend-mobile TC-F-U01 首页渲染 / U02 五维沙盘 / U03 TabBar 健康 / U04 TabBar 成长 / U05 未登录「我的」鉴权引导 / U06 关键资源无 failed 6/6 1.4m
shop-api TC-S-U01 price asc / U02 price desc / U03 默认排序 / U04 非法排序列白名单拦截 4/4 9.6s
health-contract TC-H-U01~U10 华为/小米 10 端点 401 + TC-HP-U01~03 健康方案 3 端点 401 13/13 7.7s(第 3 次复跑)

B-61 闭环证据:13:41(R87)TC-HP-U01~03 仍 200 直通;本轮 14:14 起转为 401 {"code":401,"message":"请先登录"},独立 curl 7 端点全部 401 → 部署已含 cfclub@de16f40b0(JwtInterceptor.java:114 含 /api/health/plan/)。连续 8 轮的 P0 缺口闭环。 首跑假红已排除(B-67):14:11 首次执行 health 出现 10 红(10 例无任何 console 输出、单轮 1.1m),紧接 14:14 --workers=1 --reporter=list(13.1s)与 14:38 --reporter=line(7.7s)两次独立复跑均 13/13 绿 → 判定瞬时上游抖动,非产品回归、非并发(配置本就 workers:1)。


6. 本轮代码改动(仅测试侧,逐条可复核)

文件 改动 依据 验证
cfc-langgraph/tests/test_memory.py 重写对齐 MemoryManager 真实契约 + 隔离 chromadb 原生依赖 + 旧接口守护 B-64 pytest tests/test_memory.py → 4 passed
cfc-langgraph/tests/test_report_parse.py 样本路径可移植化 + requires_sample_pdf B-66 pytest tests/test_report_parse.py → 5 passed(234.5s)
cfc-backend/.../GuideFamilyTaskControllerTest.java 3 处服务方法更名(...ByFamilyMember)、断言键 totalChildren→totalFamilyMemberren、2 处 taskMapper.selectById 打桩 生产重构(孩子→成员)+ checkMemberOnly 前置校验 定向复跑见 §6.1
cfc-backend/.../GuideRolePermissionTest.java 2 处 taskMapper.selectById 打桩 同上 同上
cfc-backend/.../FamilyControllerTest.java 新增 @MockBean TeacherFamilyBindingRequestService + 断言改为「申请已提交,请等待家庭主账号审批」 guide-bind 契约变更(直接绑定 → 申请审批) 同上

未改任何生产代码、未放宽断言强度(NPE 类改为「补齐桩」而非「删断言」;契约类改为「对齐新契约」而非「忽略差异」)。

6.1 定向复跑结果(实测,2026-11-08 15:06)

命令:mvn -o -B test "-Dtest=GuideFamilyTaskControllerTest,GuideRolePermissionTest,FamilyControllerTest" -DfailIfNoTests=false → BUILD SUCCESS

类 全量基线 定向复跑 结论
GuideFamilyTaskControllerTest 20 例 / 3F+2E 20 / 0F / 0E(253.2s) 5 红全转绿
GuideRolePermissionTest 21 例 / 1F+1E 21 / 0F / 0E(59.5s) 2 红转绿(耗时 274.3s→59.5s,上下文复用)
FamilyControllerTest 8 例 / 1F 8 / 0F / 0E(181.9s) 1 红转绿
合计 49 例 / 8 红 49 / 0 / 0 8 例全修复,且同文件其余 41 例无回归

预测(未入台账,待下轮全量 clean 复跑确认):后端红例 74→66、通过率 97.03%→97.34%;全量 3145 例 → 97.37%。

方法论纪律(承 B-57):定向绿不写入基线,必须由下轮全量 clean 复跑升级为全量证据后才可入台账。


7. 覆盖矩阵(20 类 · 三态)

# 测试类型 状态 证据
1 单元测试 已发现 后端 311 类 / Jest 355+90
2 测试覆盖率 未发现 无 JaCoCo;N/A
3 变异测试 未发现 无 PIT
4 集成测试 已发现 integration/ 包 + SpringBootTest
5 契约测试 已发现 tests/e2e-live/*contract*、*MapContractTest
6 接口 API 测试 已发现 shop-api / health-contract / 3194 handler
7 系统/端到端 已发现 Playwright live 4 套件 28 例
8 验收 UAT 待核实 无显式 UAT 记录/签署
9 BDD 规格 未发现 无 feature 文件
10 冒烟测试 已发现 tests/e2e/ci-smoke.spec.js
11 回归测试 已发现 CI test-blocking 两级门禁
12 探索性测试 未发现 无 charter/记录
13 性能测试 未发现 无 k6/JMeter;B-60 有慢类观测
14 可靠性测试 未发现 无故障注入
15 安全测试 SAST/DAST 未发现 无扫描器;仅鉴权契约 13 例
16 依赖漏洞扫描 未发现 无 SCA
17 兼容性测试 待核实 仅 Chromium;无多浏览器/机型矩阵
18 可用性测试 未发现 无真实用户可用性证据
19 无障碍测试 未发现 无 axe/WCAG
20 QA 流程与度量 已发现 docs/tdd、CI、台账、blockers

「未发现」仅表示扫描未命中,不等于项目没做;扫描未覆盖处一律「待核实」。


8. SRS / 场景覆盖

维度 数值 说明
SRS 规格章节(docs/superpowers/api/API_REFERENCE.md §4.x) 170 —
被 E2E 用例显式引用的章节 3(§4.43 / §4.44 / §4.49) grep -rhoE '§4\.[0-9]+' tests/ --include=*.spec.js 去重
章节级锚点覆盖率 1.8% G9 未达标
今日 SRS 变更 2 项(HL-03/R2+R3、HL-04/R4,87ffb4e3e / e7c379e17) 已有 TC-HP-U01~03 覆盖,本轮 13/13 绿 → 变更已绑定用例
结构化 TC 台账 784(异常流 474 = 60.5%) docs/tdd/test/doc-case-execution-report.md
用例可自动化推导 253 同上

结论:最新 SRS 变更已覆盖且有实测证据;但全量 SRS 的章节级锚点覆盖仍极低(3/170),SRS 全覆盖目标未达成。


9. 门禁结论

门禁 判据 实测 判定
G1 全量通过率 ≥95% 97.11%(后端 97.03%) ✅
G2 红例数 ≤20 86(后端 74 + langgraph 12) ❌
G3 小程序 Jest 0 失败 354 过 / 1 skip ✅
G4 管理端 Jest 0 失败 90/90 ✅
G5 编译与完整性 0 错 + 无静默丢失 317 源 0 错;311/311 XML ✅
G6 浏览器 E2E 全绿 28/28 ✅
G7 langgraph 0 失败 12 失败 ❌
G8 鉴权契约 全绿 13/13(B-61 闭环) ✅
G9 SRS 锚点覆盖 ≥60% 1.8%(3/170) ❌
G10 节点分派 langgraph 派 251 251:9000 CLOSED,本机兜底 ❌
G11 CI 硬门禁 流水线可绿 CI 存在;langgraph-blocking-pytest 因 12 红会阻断 ❌
G12 未实测项标注 全标注 已标注(见 §10) ✅

总判定:⛔ 不通过(有条件) — 8 项达标 / 5 项未达标(含 1 项不可自主闭环的分派环境)。

使绿优先级(按性价比)

序 动作 预期收益 归属
P-1 修 auditLogAspect→auditLogService 注入链(补 @MockBean) 8 例转绿 测试
P-2 CfCommissionServiceSettleTest 档位查询补桩 8 例 测试
P-3 Mockito 误用族(matcher/doNothing/verify)修订 8 例 测试
P-4 夹具 NPE 13 例补桩 13 例 测试
P-5 MindFortune 401 口径(/api/mind/ 入清单) 1 例 + 安全口径 研发
P-6 langgraph analyze thread_id(B-65) 2 例 + 1 端点可用 研发
P-7 251 放通 9000 或提供 SSH 凭据 G10 运维
P-8 剩余 23 例断言逐例定性 23 例 测试

10. 未实测项(如实标注)

  • langgraph 远程派发(251 节点):251:9000/8000 CLOSED、22 拒绝公钥/口令 → 本机 venv 兜底,非 251 环境结果。
  • 后端全量未带 clean:复用 target/,但以 311/311 新 XML + 时间戳过滤统计,无旧报告混入。
  • JaCoCo 覆盖率 / PIT 变异 / 压测 / DAST / SCA:本机无工具且 review 档不装依赖 → 未实测。
  • 无障碍 / 多浏览器兼容 / 真实用户可用性:无资产、无环境。
  • UAT / BDD / 探索性测试:无记录,标「待核实」。
  • 恒等式「早退截断 12」未逐类取证。