触发:定时自动化「作为测试负责人执行自动化测试闭环(全部用例通过 + 覆盖 SRS/场景 + 浏览器走 cfc.iwintrue.com + langgraph 派 251)」。 执行档:
review(离线)——不联网装依赖、不启停服务、不改生产代码;本轮未改任何测试文件(仅复跑验证 R88 定向修复)。 基线:cfclub@547c64e01(=origin/cfclub,含 R88 后 2 个上游提交:a17220c6chub 迁移方案文档、547c64e01chore bump)。 工作区:已跟踪文件 0 修改(git status --porcelain | grep -v '^??'= 0)→ 各套件直接在本工作区跑,无需隔离树。 原始日志:_mvn_r89_backend.log(后端全量)·_jest_frontend_r89.log/_jest_web_r89.log(Jest)·_pytest_lg_r89.log(langgraph)·_e2e_{admin,frontend,shop,health}_r89.log(浏览器 E2E)·_r89_agg.json(后端聚合)
| 套件 | 命令 | 结果 | 通过率 | 退出码 |
|---|---|---|---|---|
| cfc-backend(全量单元+集成) | mvn -o -B test(JDK1.8.0_25 + Maven 3.6.1) |
311 类 / 2628 例 / 35F / 31E / 4S → 2558 过 | 97.34% | 1(有红) |
| cfc-frontend(Jest) | npx jest --silent |
21 suites · 354 passed / 1 skipped / 355 | 99.72% | 0 |
| cfc-web(Jest,研发实现合入后复跑) | npx jest --silent(v2) |
17 suites · 116 passed / 116 | 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 |
合计 3171 例 / 3088 过 = 97.38%(剔除 5 skip 后 97.54%);红例 78(后端 66 + langgraph 12)。
| 指标 | 值 | 说明 |
|---|---|---|
| 测试类 / 用例 | 311 / 2628 | surefire XML 实测,含参数化展开 |
| 失败 / 错误 / 跳过 | 35 / 31 / 4 | @Disabled 4 例 |
| 红类 / 红例 | 24 / 66 | 逐类见 §3 |
| 完整性 | 311/311 XML | 无静默丢失、无 0 字节 XML |
| Maven 总时长 | 44:39 | XML 耗时总和 2515.5s |
| 项 | R88 实测 | 本轮 R89 实测 | Δ |
|---|---|---|---|
| 后端用例 | 2628 | 2628 | 0 |
| 后端通过率 | 97.03% | 97.34% | +0.31pp |
| 后端红例 | 74 | 66 | −8 |
| 后端红类 | 27 | 24 | −3 |
| cfc-web 用例 | 90 | 116 | +26(研发新增契约测试) |
| cfc-web 红例 | 0 | 0(复跑确认) | 21 红 → 0(研发实现合入后全绿) |
| 浏览器 E2E | 28/28 | 28/28 | 0(零回归) |
| langgraph | 32/44 | 32/44 | 0(B-54/B-65 持续) |
本轮核心变化(测试结果有变化,需通知研发):
- 后端 −8 红:R88 §6.1 定向复跑修复的 3 个契约红类(
GuideFamilyTaskControllerTest5 +GuideRolePermissionTest2 +FamilyControllerTest1 = 8),本轮全量 clean 复跑正式确认转绿——R88 的预测(74→66、97.03%→97.34%)精确兑现,「定向绿不入基线」纪律解除,8 例可入台账。- cfc-web +26 例契约测试 · 研发实现已闭环:研发于 13:51~14:17 合入 5 个 TDD-RED 契约 spec(S-cfc-72~76),R88 基线(
49d7bccac)不含这些 spec,故 R88 显示 90/90;本轮按新基线测得 116 例。首跑(合入前基线)21 红(TDD-RED 预期红,原 90 例零回归)→ 研发窗口内合入实现(e777224fcS-cfc-77 +ef3e81fecS-cfc-78)→ 复跑确认 116/116 全绿,S-cfc-72~76 契约全部闭环。
| 目标 | 结果 | 说明 |
|---|---|---|
| cfc.iwintrue.com:443 | OPEN | /admin 200;/frontend 200(本轮用 LIVE_BASE_URL=https://...) |
| 192.168.16.189:4090 | OPEN(HTTP 200) | 浏览器节点可用;本轮全部浏览器任务在本机串行执行(workers:1),未并发 |
| 192.168.16.204:4090 | CLOSED(HTTP 000) | 本轮不可用(未参与) |
| 192.168.16.251:9000 / :8000 | CLOSED | langgraph 服务未监听 → 无法按指令派发 251,降级本机 venv 直跑(标注未实测项) |
| 192.168.16.251:22 | OPEN 但凭据被拒 | 无可用凭据,不可远程执行 |
分派结论:langgraph 派 251 未达成(B-55 延续第 N 轮);浏览器任务按「每节点单任务」在本机单节点串行完成 4 个套件,未触发并发。
| 异常类型 | 例数 |
|---|---|
| 空类型(Mockito verify / 断言未细分) | 19 |
expected(AssertionError 族) |
17 |
| NullPointerException | 13 |
Failed to load ApplicationContext |
8 |
No value present |
4 |
JSON path "$.data" |
2 |
JSON path "$.code" expected |
1 |
Status expected |
1 |
| 退款冷静期断言 | 1 |
| 归因桶 | 例数 | 判定依据 | 归属 |
|---|---|---|---|
| A-1 本轮已修(契约/装置漂移) | 8(已转绿) | R88 §6.1 定向复跑修复的 GuideFamilyTaskControllerTest 5 + GuideRolePermissionTest 2 + FamilyControllerTest 1,本轮全量 clean 复跑确认 |
测试侧(已闭环) |
| A-2 上下文加载失败(auditLogAspect) | 8 | AdminFamilyOverviewControllerTest 3E / FamilyAdminOverviewServiceTest 3E / UserServiceFamilyNameLinkTest 2E → Failed to load ApplicationContext |
测试侧(P-1,需补 @MockBean) |
| A-3 CfCommission settle 打桩 | 8 | CfCommissionServiceSettleTest 8 例 verify 未触发 |
测试侧(P-2) |
| A-4 夹具 NPE | 13 | FamilyJoinRequestServiceReferrerBindTest 4 + FortuneServiceTest 2 + GrowthRecordSyncFlowTest 2 + ProductOrderServiceFulfillmentMultiModeTest 3 + ServiceRoleApproveTest 2 |
测试侧(P-4) |
| A-5 Optional 空值 | 4 | DimensionScoreServiceImplTest 4 例 No value present |
测试侧(P-3 族) |
| A-6 Mockito 误用 / 多模式 | 9 | ProductOrderServiceFulfillmentMultiModeTest 6E + ProductOrderServiceUpdateExpressFieldTest 3F |
测试侧(P-3) |
| A-7 断言基线未细分 | 14 | 剩余 expected/Status/JSON path 等,需逐例判定 |
待核实(P-8) |
| P-1 产品缺口 | 1 | MindFortuneControllerTest 期望 code=401 实得 400 → /api/mind/ 未入 LOGIN_REQUIRED_PATHS |
研发 |
| E-1 环境/数据 | 1 | GuideModuleIntegrationTest 空类型 |
环境 |
量化结论:A 类合计 60 例(含已修 8)、产品 1、环境 1、待核实 14。 对比 R88:A-1 已闭环(−8);A-2~A-6(测试侧 41 例)与 P-1(研发 1 例)本轮未动(无新增测试侧改动),红例 74→66 的 −8 全部来自 A-1。
CfCommissionServiceSettleTest 8 · EnergySystemFlowTest 6F · ProductOrderServiceFulfillmentMultiModeTest 6E · FamilyJoinRequestServiceReferrerBindTest 4E · DimensionScoreServiceImplTest 4E · PlannerBindInviteFlowTest 5 · ArticleWorkflowTest 3F · GrowthRecordSyncFlowTest 3 · AdminFamilyOverviewControllerTest 3E · FamilyAdminOverviewServiceTest 3E · ProductOrderServiceUpdateExpressFieldTest 3F · DimensionRegistryMapContractTest 3F · FortuneServiceTest 2E · UserServiceFamilyNameLinkTest 2E · ServiceRoleApproveTest 2E · MindFortuneControllerTest 1F(产品)· MembershipPaySwitchTest 1F · PaymentServiceORDRoutingTest 1F · TaskPlanServiceTest 1F · TeamProfitCronContractTest 1F · DailyCheckinStreakFlowTest 1E · GuideModuleIntegrationTest 1E · OrchestrationEngineTest 1F · OrchestrationIntegrationTest 1F
R88 27 类 → R89 24 类:消失的 3 类 =
GuideFamilyTaskControllerTest+GuideRolePermissionTest+FamilyControllerTest(8 红转绿确认);无新增红类、无回归。
与 R88 一致:12 红 / 44 收集(修后基线,无新增、无减少)。
| 类 | 例数 | 归因 | 类型 |
|---|---|---|---|
test_auto_tag.py |
5 | 依赖 /api/v1/chat(RAG/chromadb)→ 环境 |
环境(B-54) |
test_intent.py |
4 | prompt_service 连 localhost:9082 失败 + 意图分类降级 |
环境(需本机后端 + LLM) |
test_analyze.py |
2 | ValueError: Checkpointer requires ... thread_id → 恒 500 |
产品缺陷(B-65) |
test_chat.py |
1 | 500,ImportError: chromadb_rust_bindings DLL 缺失 |
环境(B-54) |
B-64(test_memory 4 绿)、B-66(test_report_parse 5 绿)本轮保持绿;B-65(产品 2)与 B-54(环境 10)未变。
| 套件 | 用例 | 结果 | 耗时 |
|---|---|---|---|
| admin-desktop | TC-A-U01 登录页渲染 / U02 滑块人机验证 / U03 未登录拦截 / U04 真实登录进主框架 / U05 核心菜单 | 5/5 | 2.3m |
| frontend-mobile | TC-F-U01 首页渲染 / U02 五维沙盘 / U03 TabBar 健康 / U04 TabBar 成长 / U05 未登录「我的」鉴权引导 / U06 关键资源无 failed | 6/6 | 49.2s |
| shop-api | TC-S-U01 price asc / U02 price desc / U03 默认排序 / U04 非法排序列白名单拦截 | 4/4 | 10.5s |
| health-contract | TC-H-U01~U10 华为/小米 10 端点 401 + TC-HP-U01~03 健康方案 3 端点 401 | 13/13 | 5.6s |
B-61 闭环保持:TC-HP-U01~03 全部 401
{"code":401,"message":"请先登录"},健康方案鉴权门禁连续第 9 轮零回归。
本轮测试侧无代码改动(纯复跑验证 R88 定向修复)。cfc-web 存在一次窗口内实时变化:
e777224fc(S-cfc-77 admin.familyCoupon.backToList)+ ef3e81fec(S-cfc-78 reportEntry/planEntry/createdAtDisplay/actionMenu),随远端提交于 15:57 前合入主链。_jest_web_r89_v2.log):17 suites · 116 passed / 116 = 100%,21 红全部转绿。契约闭环证据:S-cfc-72~76 由 RED → GREEN,研发实现合入 + 全量复跑确认,测试侧零改动即可全绿(契约驱动生效)。
| 门禁 | 判据 | 实测 | 结论 |
|---|---|---|---|
| G1 总通过率 ≥95% | 97.38% | ≥95% | ✅ |
| G2 零红例 | 78 红 | 0 | ❌ |
| G5 前端 Jest | 354/355(1 skip) | 无红 | ✅ |
| G6 浏览器 E2E | 28/28 | 100% | ✅ |
| G7 langgraph 零红 | 12 红 | 0 | ❌ |
| G8 B-61 健康鉴权契约 | 13/13 | 闭环 | ✅ |
| G9 SRS 锚点覆盖 | 3/170 | ≥目标 | ❌ |
| G10 langgraph 派 251 | 未达成 | 达成 | ❌ |
| G11 CI 流水线门禁 | 被 langgraph 阻断 | 通过 | ❌ |
| G4 管理端 Jest(含契约) | 116/116 | 全绿 | ✅ |
总判定:⛔ 不通过(有条件)——9 项达标 / 2 项未达标(G2/G7 与 R88 相同的持续项)+ G9/G10/G11 受 SRS 锚点 / langgraph 派发 / CI 阻断。
| 优先级 | 动作 | 预计绿 | 归属 |
|---|---|---|---|
| P-1 | AdminFamilyOverviewControllerTest/FamilyAdminOverviewServiceTest/UserServiceFamilyNameLinkTest 补 @MockBean(auditLogAspect 注入链) |
+8 | 测试侧 |
| P-2 | CfCommissionServiceSettleTest 打桩 cfBalanceService.earnByRule(...)(档位/规则查询 stub) |
+8 | 测试侧 |
| P-3 | Mockito 误用族(ProductOrderServiceFulfillmentMultiModeTest 6E + ProductOrderServiceUpdateExpressFieldTest 3F) |
+9 | 测试侧 |
| P-4 | 夹具 NPE 补齐(FamilyJoinRequestServiceReferrerBindTest 4 + FortuneServiceTest 2 + GrowthRecordSyncFlowTest 2 + ProductOrderServiceFulfillmentMultiModeTest 3 + ServiceRoleApproveTest 2) |
+13 | 测试侧 |
| P-5 | /api/mind/ 入 LOGIN_REQUIRED_PATHS(MindFortuneControllerTest 期望 401) |
+1 | 研发 |
| P-6 | langgraph test_analyze.py thread_id 参数化修复 |
+2 | 研发 |
| P-7 | 251 放通 9000/8000(langgraph 派发前置) | 解锁 G10 | 运维 |
| P-8 | 剩余 14 例断言定性(expected/Status/JSON path 逐例判定装置 vs 产品) |
+14 | 测试侧 |
若 P-1~P-4 + P-8 全绿(44 例):后端 → 2558+44 = 2602/2628 = 99.01%,总通过率 → (3067+44)/3171 = 98.12%;叠加 P-5(研发 1 例)→ 后端 99.05%、总 98.15%。
/api/mind/ 401、B-65 langgraph analyze 500);P-7 运维侧 251 放通。