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

test(tdd): 补充写操作 E2E 全量结果与 F2(commission update config 400)\n\n- test_blockers.md: §5 写操作全量 7通过/5失败;新增 F2;标注 2 个真实写操作成功(活动审批/佣金结算退款)已对测试环境产生数据变更\n- automation-status.md: 同步侧车进度(admin-activity-review 通过 / admin-butler-review·admin-commission-config 失败)

E2E Test Bot 1 неделя назад
Родитель
Сommit
5a147887c8
2 измененных файлов с 41 добавлено и 10 удалено
  1. 7 5
      docs/tdd/test/automation-status.md
  2. 34 5
      docs/tdd/test/test_blockers.md

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

@@ -21,10 +21,10 @@
 | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
 | 结构化测试用例(md) | 9 | 678 | 0 | 678 | 678 | 0 | 0 | 0 | 0 |
 | 用户场景(md) | 8 | 0 | 0 | 8 | 8 | 0 | 0 | 0 | 0 |
-| Playwright(e2e/integration) | 70 | 411 | 70 | 0 | 67 | 0 | 2 | 1 | 0 |
+| Playwright(e2e/integration) | 70 | 410 | 70 | 0 | 67 | 0 | 1 | 2 | 0 |
 | Python(pytest) | 11 | 47 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
-| Java后端测试 | 185 | 1390 | 185 | 0 | 185 | 0 | 0 | 0 | 0 |
-| **合计** | — | **2526** | **266** | **686** | 949 | 0 | 2 | 1 | 0 |
+| Java后端测试 | 187 | 1395 | 187 | 0 | 187 | 0 | 0 | 0 | 0 |
+| **合计** | — | **2530** | **268** | **686** | 951 | 0 | 1 | 2 | 0 |
 
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 
@@ -717,7 +717,7 @@
 | `tests/e2e/activity-registration.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/admin-activity-review.spec.js` | 2 | 已自动化(e2e) | 通过 | — |
 | `tests/e2e/admin-butler-review.spec.js` | 6 | 已自动化(e2e) | 失败 | — |
-| `tests/e2e/admin-commission-config.spec.js` | 4 | 已自动化(e2e) | 通过 | — |
+| `tests/e2e/admin-commission-config.spec.js` | 4 | 已自动化(e2e) | 失败 | — |
 | `tests/e2e/admin-ecom-supplier.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/admin-menu-survey.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/admin-panel.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — |
@@ -726,7 +726,7 @@
 | `tests/e2e/api/api-smoke.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/api/article-api.spec.js` | 7 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/api/contact-api.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — |
-| `tests/e2e/api/energy-api.spec.js` | 9 | 已自动化(e2e) | 未跟踪 | — |
+| `tests/e2e/api/energy-api.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/api/family-member-api.spec.js` | 14 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/api/nonfunc-perf-compat.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — |
 | `tests/e2e/api/nonfunc-security.spec.js` | 11 | 已自动化(e2e) | 未跟踪 | — |
@@ -812,6 +812,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorLoginRequiredTest.java` | 5 | 已自动化(@Test) | 未跟踪 | JwtInterceptorLoginRequired |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionControllerTest.java` | 1 | 已自动化(@Test) | 未跟踪 | AttributionController |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionSurveyRoutingTest.java` | 3 | 已自动化(@Test) | 未跟踪 | AttributionSurveyRouting |
+| `cfc-backend/src/test/java/com/etotem/cfc/controller/EnergyControllerGrantEnergyTest.java` | 3 | 已自动化(@Test) | 未跟踪 | EnergyControllerGrantEnergy |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthCheckinCfEarnCallSiteTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthCheckinCfEarnCallSite |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthPlanDeleteControllerTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthPlanDeleteController |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerListPaginationTest.java` | 4 | 已自动化(@Test) | 未跟踪 | HealthReportControllerListPagination |
@@ -902,6 +903,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` | 5 | 已自动化(@Test) | 未跟踪 | CommissionServiceReferralF24 |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ConsigneeServiceBackfill |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | EnergyServiceFamily |
+| `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceGrantEnergyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | EnergyServiceGrantEnergy |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceWealthIncomeTest.java` | 4 | 已自动化(@Test) | 未跟踪 | EnergyServiceWealthIncome |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyAdminOverviewServiceTest.java` | 3 | 已自动化(@Test) | 未跟踪 | FamilyAdminOverviewService |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyJoinRequestServiceReferrerBind |

+ 34 - 5
docs/tdd/test/test_blockers.md

@@ -8,7 +8,7 @@
 **部分可推进。** 本 Agent 沙箱已具备 `node v22.22.2` + `@playwright/test` 模块,测试目标环境 `cfc.iwintrue.com` 可达(0.08s 响应);但:
 
 - **纯测试基础设施**(Playwright chromium 浏览器)缺失 → 测试侧可直接修复(见 T1,已执行安装)。
-- **实际 E2E 执行的硬阻碍**是「测试环境管理员凭证缺失」(R3,研发/运维侧)——依赖登录的 admin E2E 在登录步即失败。
+- **实际 E2E 执行的硬阻碍**曾是「测试环境管理员凭证缺失」(R3)——依赖登录的 admin E2E 在登录步即失败;**已于 2026-11-01 解决**(确认测试账号 `13800138000`,实跑 E2E 登录+鉴权+API 可达,见 §4–§5)。
 - **Java 单测 / Python pytest** 在本沙箱无执行器(`mvn` / `pytest` 均缺失),按用户说明在**本机**执行,不属阻碍测试工作的研发/设计问题,不计入本分派。
 - **研发侧存在结构性缺口**(覆盖缺口 R1、契约不一致 R2、无 CI R4),需提交研发。
 
@@ -27,7 +27,7 @@
 | 编号 | 阻碍 | 证据 | 对测试工作的影响 | 建议研发动作 |
 |---|---|---|---|---|
 | R1 | 后端 Controller 测试覆盖缺口巨大 | 357 个 Controller / 1933 个 handler 仅覆盖 199(**10.3%**);`admin` 模块 120 个中 103 个完全无测试(见 `discovery.md`) | 核心管理接口无回归保护,测试覆盖目标无法达成 | 按 `runbook.md` §2 缺口 backlog 补 `admin`(P0)→`guide`/`family`(P1)→`mind`/`assessment`(P2) 的单测与接口测试 |
-| R2 | API 契约疑似不一致 | 此前发现 `/api/articles/report-reading-time` 返回 `biz=500` 但 `message="success"`(字段语义矛盾) | 自动化断言无法稳定判定成功/失败,易误报 | 研发在 `cfc.iwintrue.com` 复测确认,明确 `biz` 与 `message` 语义并修复或文档化契约 |
+| R2 | API 契约疑似不一致 | 此前发现 `/api/articles/report-reading-time` 返回 `biz=500` 但 `message="success"`(字段语义矛盾);执行 E2E 进一步暴露:① butler 列表返回 `data.list` 而 activity 列表返回 `data.records`(F1);② `POST /api/admin/commission/config` 更新配置返回 **400**(F2,真实接口响应) | 自动化断言无法稳定判定成功/失败,易误报;写操作 E2E 大面积受 envelope 不一致牵连 | 研发在 `cfc.iwintrue.com` 复测确认,明确 `biz` 与 `message` 语义并修复或文档化契约;统一列表 envelopes(F1);排查 commission update config 400(F2) |
 | R3 | 测试环境无可用测试管理员账号 | `tests/e2e/admin-activity-review.spec.js` 等依赖 `/api/admin-auth/login-by-password` 登录取 `Bearer` token;仓库内已硬编码测试账号 `13800138000` | E2E 在登录步即失败,**无法推进带登录态的端到端测试** | **已解决(2026-11-01):已确认测试账号 `13800138000`,实跑 E2E 登录+鉴权+API 全部可达** |
 | R4 | 无 CI 流水线 / 无测试门禁 | 仓库无 `.github/workflows` 等 CI 配置;测试未纳入合并门禁 | 回归无自动拦截,已写测试随改动腐化 | 建 CI:`mvn test` + `pytest` + `playwright`(接 `cfc.iwintrue.com`)作为合并门禁 |
 
@@ -54,8 +54,37 @@
 
 **失败根因(F1,契约不一致的确切实例,归属 R2)**:两个管家列表用例断言 `j.data.records`,但接口实际返回 `{"list":[],"page":1,"size":10,"total":0}`——即 **butler 列表返回 `data.list`,而 activity 列表返回 `data.records`**,后端列表接口 envelopes 不统一。需研发确认 butler 列表应返回 `records` 还是测试应改为 `list`。
 
-## 5. 下一步
+## 5. 写操作 E2E 执行结果(全量,2026-11-01 22:35)
 
-- **测试侧**:R3 已解决,T1/T2/T3 已执行;T4 已临时绕过(建议研发加跳过开关)。可对 `cfc.iwintrue.com` 跑更多只读/读写入 E2E(写操作如 review/assign/update 待你确认后再跑,以免在测试环境产生副作用)。
-- **研发侧**:请研发认领 R1–R2、R4,并确认 **F1(butler 列表 envelope 不一致)** 的正确形态。
+- 范围:对 `cfc.iwintrue.com` 跑 3 个 admin spec **全部 12 个用例**(含写操作),使用测试账号 `13800138000` + 临时无重置配置(`playwright.config.noreset.js`)。
+- 结果:**7 通过 / 5 失败**(耗时 45.8s)。
+
+| 文件 | 用例 | 结果 | 是否真实写请求 |
+|---|---|---|---|
+| admin-activity-review | login and list draft | ✅ | 只读 |
+| admin-activity-review | review action | ✅ | **写操作成功**(已审批活动,测试环境产生数据变更) |
+| admin-butler-review | service records exist | ✅ | 只读 |
+| admin-butler-review | settlements endpoint reachable | ✅ | 只读 |
+| admin-butler-review | list pending | ❌ | 否(卡在 `data.records` 断言) |
+| admin-butler-review | list approved for assignment | ❌ | 否 |
+| admin-butler-review | review action (approve) | ❌ | 否(写请求未发出) |
+| admin-butler-review | assign member to approved butler | ❌ | 否(写请求未发出) |
+| admin-commission-config | get config | ✅ | 只读 |
+| admin-commission-config | records | ✅ | 只读 |
+| admin-commission-config | update config | ❌ | **POST 已发出,服务端返回 400**(真实接口响应,需研发确认是接口缺陷还是用例 payload 问题) |
+| admin-commission-config | settle and refund | ✅ | **写操作成功**(已结算+退款,测试环境产生数据变更) |
+
+**失败根因归类**:
+- **F1(envelope 不一致,归属 R2)**:butler 4 个失败(`list pending` / `list approved` / `review action(approve)` / `assign member`)全部因断言 `data.records` 但接口返回 `data.list`——写请求(approve/assign)在取数列表阶段即报错,**未对测试环境产生副作用**。
+- **F2(commission 配置更新返回 400,归属 R2)**:`POST /api/admin/commission/config` 返回 400(非 200),是真实接口响应。需研发确认:接口缺陷(update 路径/参数校验)还是测试用例 payload 缺字段。
+
+**已对测试环境产生的真实数据变更(`cfc.iwintrue.com`,按用户授权执行)**:
+- activity `review action`:成功审批/驳回某活动记录。
+- commission `settle and refund`:成功对某佣金记录执行结算 + 退款。
+> 如测试数据需回滚,请在 `cfc.iwintrue.com` 测试库处理。
+
+## 6. 下一步
+
+- **测试侧**:R3 已解决,T1/T2/T3 已执行,T4 已临时绕过(建议研发加 `SKIP_DB_RESET` 开关);写操作 E2E 已按授权跑完(见 §5)。可继续扩大 E2E 覆盖(其余 64 个 `e2e/*.spec.js`)或转向 Java 单测 / Python pytest(本机执行)。
+- **研发侧**:请认领 R1、R2(含 **F1** butler envelope 不一致、**F2** commission update config 400)、R4,并确认 F1/F2 的正确形态。
 - **本机执行项**(Java 单测 / Python pytest):按 `runbook.md` §3.1–§3.3 在开发机执行,结果回填 `.tdd/test-progress.json` 后刷新共享台账。