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

test(interface): 接口冒烟闭环 2026-11-01 00:54 — 通过率 45% (fix=0 reg=0); 测试用例 360/387 完成(文档化202)

E2E Test Bot 1 неделя назад
Родитель
Сommit
762d25cc40
4 измененных файлов с 195 добавлено и 27 удалено
  1. 5 5
      INTERFACE_TEST_REPORT.md
  2. 1 2
      interface_test_extra_cases.tsv
  3. 188 19
      playwright_smoke.log
  4. 1 1
      playwright_smoke_report.md

+ 5 - 5
INTERFACE_TEST_REPORT.md

@@ -1,10 +1,10 @@
-# CFC 接口冒烟测试报告 (20261031_232536)
+# CFC 接口冒烟测试报告 (20261101_004830)
 
-- 目标: cfc.iwintrue.com  用例总数: **543**
-- 业务成功率(BIZ_OK): **247/543 = 45%**
+- 目标: cfc.iwintrue.com  用例总数: **542**
+- 业务成功率(BIZ_OK): **246/542 = 45%**
 
 ## 分类汇总
-- BIZ_OK: 247
+- BIZ_OK: 246
 - BIZ_FAIL: 292
 - NOT_FOUND: 2
 - CONN_ERR: 2
@@ -22,7 +22,7 @@
 - 自动化用例总数(可执行 `test()`):**387**(api 层 56 / 角色分包 52 / DOM 层 279)
 - 文档化用例(设计层 TC-xxxx):**202**
 - 已完成(自动化且未被跳过):**360/387 = 93%**
-- 已实跑通过:接口冒烟 BIZ_OK **247** 端点 + API e2e 末次 **0** 通过 / 0 fixme
+- 已实跑通过:接口冒烟 BIZ_OK **246** 端点 + API e2e 末次 **0** 通过 / 0 fixme
 
 ### 未完成 / 未开始的原因(共 4 类)
 1. [279 项] DOM 型 E2E 无法执行(CFC-ENV-001):279 个用例已编写,但远程 cfc.iwintrue.com 为纯 Spring Boot API 后端、未部署 uni-app H5 / cfc-web 前端,浏览器型用例无法运行,未开始执行。

+ 1 - 2
interface_test_extra_cases.tsv

@@ -1,2 +1 @@
-auto	auto	POST	/api/octopus/effect/family/list	false	false
-auto	auto	POST	/api/pearl/family/resources	false	false
+auto	auto	POST	/api/coupon/available-templates	false	false

+ 188 - 19
playwright_smoke.log

@@ -30,7 +30,60 @@ Running 58 tests using 1 worker
 [27/58] [desktop] › e2e\api\family-member-api.spec.js:39:3 › 【API级】家庭成员管理全流程 › [场景1] 获取成员列表 - 期望返回成员数据
 [28/58] [desktop] › e2e\api\family-member-api.spec.js:46:3 › 【API级】家庭成员管理全流程 › [场景1b] 越权访问他人家庭 - 期望 403 拒绝
 [29/58] [desktop] › e2e\api\family-member-api.spec.js:54:3 › 【API级】家庭成员管理全流程 › [场景2] 添加新家庭成员 - 期望添加成功并返回完整信息
+  1) [desktop] › e2e\api\family-member-api.spec.js:54:3 › 【API级】家庭成员管理全流程 › [场景2] 添加新家庭成员 - 期望添加成功并返回完整信息 
+
+    TimeoutError: apiRequestContext.post: Timeout 60000ms exceeded.
+    Call log:
+      - → POST http://cfc.iwintrue.com/api/family/member/add
+        - user-agent: Playwright/1.61.1 (x64; windows 10.0) node/22.22
+        - accept: */*
+        - accept-encoding: gzip,deflate,br
+        - Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoicGFyZW50Iiwicm9sZXMiOlsicGFyZW50Il0sInVzZXJJZCI6ODE4NDIsInN1YiI6IjgxODQyIiwiaWF0IjoxNzkzNDY1NTA4LCJleHAiOjE3OTYwNTc1MDh9.KnqWLd_BBn-uRrUl8M7FCyowtmjdT6-60OlAyE-cZAM
+        - content-type: application/json
+        - content-length: 96
+
+
+       at helpers\api.js:57
+
+      55 |   const headers = {};
+      56 |   if (token) headers.Authorization = 'Bearer ' + token;
+    > 57 |   const res = await request.post(path, { data: body || {}, headers, timeout: API_TIMEOUT_MS });
+         |                             ^
+      58 |   const raw = await res.text();
+      59 |   let json = null;
+      60 |   try {
+        at apiPost (D:\cfc\tests\e2e\helpers\api.js:57:29)
+        at createManualChild (D:\cfc\tests\e2e\api\family-member-api.spec.js:26:21)
+        at D:\cfc\tests\e2e\api\family-member-api.spec.js:55:21
+
+    Error Context: .api-artifacts\api-family-member-api-【API-a369c-场景2-添加新家庭成员---期望添加成功并返回完整信息-desktop\error-context.md
+
+
 [30/58] [desktop] › e2e\api\family-member-api.spec.js:63:3 › 【API级】家庭成员管理全流程 › [场景2b] 添加成员时昵称为空 - 期望返回错误提示
+  2) [desktop] › e2e\api\family-member-api.spec.js:63:3 › 【API级】家庭成员管理全流程 › [场景2b] 添加成员时昵称为空 - 期望返回错误提示 
+
+    Error: direct-register 应当成功(code=200)
+
+    expect(received).toBe(expected) // Object.is equality
+
+    Expected: 200
+    Received: undefined
+
+       at helpers\api.js:32
+
+      30 |   });
+      31 |   const body = await res.json().catch(() => ({}));
+    > 32 |   expect(body.code, 'direct-register 应当成功(code=200)').toBe(200);
+         |                                                       ^
+      33 |   const d = body.data || {};
+      34 |   expect(typeof d.token, '响应应包含 token').toBe('string');
+      35 |   return {
+        at registerRole (D:\cfc\tests\e2e\helpers\api.js:32:55)
+        at D:\cfc\tests\e2e\api\family-member-api.spec.js:20:11
+
+    Error Context: .api-artifacts\api-family-member-api-【API-f34f8-程-场景2b-添加成员时昵称为空---期望返回错误提示-desktop\error-context.md
+
+
 [31/58] [desktop] › e2e\api\family-member-api.spec.js:74:3 › 【API级】家庭成员管理全流程 › [场景2c] 添加成员时辈分等级为空 - 期望返回错误提示
 [32/58] [desktop] › e2e\api\family-member-api.spec.js:85:3 › 【API级】家庭成员管理全流程 › [场景2d] 添加成员时辈分等级非法 - 期望返回错误提示
 [33/58] [desktop] › e2e\api\family-member-api.spec.js:98:3 › 【API级】家庭成员管理全流程 › [场景3] 查看家庭成员列表 - 期望返回所有成员及关系信息
@@ -42,22 +95,101 @@ Running 58 tests using 1 worker
 [39/58] [desktop] › e2e\api\family-member-api.spec.js:192:3 › 【API级】家庭成员管理全流程 › [场景6b] 非管理员尝试踢人 - 期望权限不足拒绝
 [40/58] [desktop] › e2e\api\family-member-api.spec.js:202:3 › 【API级】家庭成员管理全流程 › [场景7] 完整家庭成员管理流程 - 期望全流程成功
 [41/58] [desktop] › e2e\api\nonfunc-perf-compat.spec.js:56:1 › [TC-G-N03] 非微信H5兜底登录:手机号注册登录路径 UA 无关
+  3) [desktop] › e2e\api\nonfunc-perf-compat.spec.js:56:1 › [TC-G-N03] 非微信H5兜底登录:手机号注册登录路径 UA 无关 ───
+
+    Error: register(parent) 失败: {}
+
+      43 |     await new Promise((r) => setTimeout(r, 500));
+      44 |   }
+    > 45 |   throw new Error(`register(${role}) 失败: ${JSON.stringify(lastErr)}`);
+         |         ^
+      46 | }
+      47 |
+      48 | // 4 类客户端 UA
+        at register (D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:45:9)
+        at D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:57:17
+
+    Error Context: .api-artifacts\api-nonfunc-perf-compat--TC-G-N03-非微信H5兜底登录:手机号注册登录路径-UA-无关-desktop\error-context.md
+
+
 [42/58] [desktop] › e2e\api\nonfunc-perf-compat.spec.js:63:1 › [TC-G-N02/P-N06/C-N03/T-N04/S-N03/X-N07] 多端 UA 兼容:同请求不同客户端返回一致
+  4) [desktop] › e2e\api\nonfunc-perf-compat.spec.js:63:1 › [TC-G-N02/P-N06/C-N03/T-N04/S-N03/X-N07] 多端 UA 兼容:同请求不同客户端返回一致 
+
+    Error: register(parent) 失败: {}
+
+      43 |     await new Promise((r) => setTimeout(r, 500));
+      44 |   }
+    > 45 |   throw new Error(`register(${role}) 失败: ${JSON.stringify(lastErr)}`);
+         |         ^
+      46 | }
+      47 |
+      48 | // 4 类客户端 UA
+        at register (D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:45:9)
+        at D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:64:17
+
+    Error Context: .api-artifacts\api-nonfunc-perf-compat--T-ade8e-X-N07-多端-UA-兼容:同请求不同客户端返回一致-desktop\error-context.md
+
+
 [43/58] [desktop] › e2e\api\nonfunc-perf-compat.spec.js:79:1 › [TC-A-N04/X-N02] 限流熔断稳定性:爆发请求下系统不死(不出现 5xx 雪崩)
-[desktop] › e2e\api\nonfunc-perf-compat.spec.js:79:1 › [TC-A-N04/X-N02] 限流熔断稳定性:爆发请求下系统不死(不出现 5xx 雪崩)
-[限流] 状态分布=[200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200] 其中429=0
+  5) [desktop] › e2e\api\nonfunc-perf-compat.spec.js:79:1 › [TC-A-N04/X-N02] 限流熔断稳定性:爆发请求下系统不死(不出现 5xx 雪崩) 
+
+    Error: register(parent) 失败: {}
+
+      43 |     await new Promise((r) => setTimeout(r, 500));
+      44 |   }
+    > 45 |   throw new Error(`register(${role}) 失败: ${JSON.stringify(lastErr)}`);
+         |         ^
+      46 | }
+      47 |
+      48 | // 4 类客户端 UA
+        at register (D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:45:9)
+        at D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:80:17
+
+    Error Context: .api-artifacts\api-nonfunc-perf-compat--T-4e03c-熔断稳定性:爆发请求下系统不死(不出现-5xx-雪崩)-desktop\error-context.md
+
 
 [44/58] [desktop] › e2e\api\nonfunc-perf-compat.spec.js:92:1 › [TC-P-N02/X-N01] 并发不串数据:并行 AI 请求各自独立响应
+  6) [desktop] › e2e\api\nonfunc-perf-compat.spec.js:92:1 › [TC-P-N02/X-N01] 并发不串数据:并行 AI 请求各自独立响应 ─
+
+    Error: register(parent) 失败: {}
+
+      43 |     await new Promise((r) => setTimeout(r, 500));
+      44 |   }
+    > 45 |   throw new Error(`register(${role}) 失败: ${JSON.stringify(lastErr)}`);
+         |         ^
+      46 | }
+      47 |
+      48 | // 4 类客户端 UA
+        at register (D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:45:9)
+        at D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:93:17
+
+    Error Context: .api-artifacts\api-nonfunc-perf-compat--T-9a7ce-X-N01-并发不串数据:并行-AI-请求各自独立响应-desktop\error-context.md
+
+
 [45/58] [desktop] › e2e\api\nonfunc-perf-compat.spec.js:106:1 › [响应时间基线] 已登录家庭列表单请求耗时冒烟 ≤ 8s
-[desktop] › e2e\api\nonfunc-perf-compat.spec.js:106:1 › [响应时间基线] 已登录家庭列表单请求耗时冒烟 ≤ 8s
-[耗时] 家庭列表 94ms
+  7) [desktop] › e2e\api\nonfunc-perf-compat.spec.js:106:1 › [响应时间基线] 已登录家庭列表单请求耗时冒烟 ≤ 8s ──────────
+
+    Error: register(parent) 失败: {}
+
+      43 |     await new Promise((r) => setTimeout(r, 500));
+      44 |   }
+    > 45 |   throw new Error(`register(${role}) 失败: ${JSON.stringify(lastErr)}`);
+         |         ^
+      46 | }
+      47 |
+      48 | // 4 类客户端 UA
+        at register (D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:45:9)
+        at D:\cfc\tests\e2e\api\nonfunc-perf-compat.spec.js:107:17
+
+    Error Context: .api-artifacts\api-nonfunc-perf-compat--响应时间基线-已登录家庭列表单请求耗时冒烟-≤-8s-desktop\error-context.md
+
 
 [46/58] [desktop] › e2e\api\nonfunc-perf-compat.spec.js:117:6 › [TC-C-N01/X-N04] 任务打卡幂等:重复提交不重复计分(需任务流夹具)
 [47/58] [desktop] › e2e\api\nonfunc-perf-compat.spec.js:122:6 › [TC-X-N03] 活动名额并发不超卖:100 名额 / 瞬时 500 请求(需活动夹具 + 压测授权)
 [48/58] [desktop] › e2e\api\nonfunc-security.spec.js:50:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问能量概览被拒(401/403)
-  1) [desktop] › e2e\api\nonfunc-security.spec.js:50:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问能量概览被拒(401/403) 
+  8) [desktop] › e2e\api\nonfunc-security.spec.js:50:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问能量概览被拒(401/403) 
 
-    Error: 能量概览未授权应 401/403,实际 code=500 msg=memberId不能为空
+    Error: 能量概览未授权应 401/403,实际 code=502 msg=NON_JSON_RESPONSE
 
     expect(received).toBeTruthy()
 
@@ -76,9 +208,9 @@ Running 58 tests using 1 worker
 
 
 [49/58] [desktop] › e2e\api\nonfunc-security.spec.js:55:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问家庭成员列表被拒(401/403)
-  2) [desktop] › e2e\api\nonfunc-security.spec.js:55:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问家庭成员列表被拒(401/403) 
+  9) [desktop] › e2e\api\nonfunc-security.spec.js:55:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问家庭成员列表被拒(401/403) 
 
-    Error: 成员列表未授权应 401/403,实际 code=200 msg=success
+    Error: 成员列表未授权应 401/403,实际 code=502 msg=NON_JSON_RESPONSE
 
     expect(received).toBeTruthy()
 
@@ -97,9 +229,9 @@ Running 58 tests using 1 worker
 
 
 [50/58] [desktop] › e2e\api\nonfunc-security.spec.js:60:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权调用 AI 健康教练被拒(401/403)
-  3) [desktop] › e2e\api\nonfunc-security.spec.js:60:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权调用 AI 健康教练被拒(401/403) 
+  10) [desktop] › e2e\api\nonfunc-security.spec.js:60:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权调用 AI 健康教练被拒(401/403) 
 
-    Error: AI 教练未授权应 401/403,实际 code=200 msg=success
+    Error: AI 教练未授权应 401/403,实际 code=502 msg=NON_JSON_RESPONSE
 
     expect(received).toBeTruthy()
 
@@ -118,8 +250,36 @@ Running 58 tests using 1 worker
 
 
 [51/58] [desktop] › e2e\api\nonfunc-security.spec.js:66:3 › 非功能/安全接口冒烟 › [TC-P-N09] IDOR:越权访问他人家庭成员列表 → 403
+  11) [desktop] › e2e\api\nonfunc-security.spec.js:66:3 › 非功能/安全接口冒烟 › [TC-P-N09] IDOR:越权访问他人家庭成员列表 → 403 
+
+    TimeoutError: apiRequestContext.post: Timeout 15000ms exceeded.
+    Call log:
+      - → POST http://cfc.iwintrue.com/api/auth/direct-register
+        - user-agent: Playwright/1.61.1 (x64; windows 10.0) node/22.22
+        - accept: */*
+        - accept-encoding: gzip,deflate,br
+        - content-type: application/json
+        - content-length: 59
+
+
+       at helpers\api.js:28
+
+      26 |  */
+      27 | async function registerRole(request, role, nickname) {
+    > 28 |   const res = await request.post('/api/auth/direct-register', {
+         |                             ^
+      29 |     data: { phone: randPhone(), role, nickname: nickname || 'QA-' + role },
+      30 |   });
+      31 |   const body = await res.json().catch(() => ({}));
+        at registerRole (D:\cfc\tests\e2e\helpers\api.js:28:29)
+        at getParent (D:\cfc\tests\e2e\api\nonfunc-security.spec.js:38:25)
+        at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:67:17
+
+    Error Context: .api-artifacts\api-nonfunc-security-非功能-安-31e4e-N09-IDOR:越权访问他人家庭成员列表-→-403-desktop\error-context.md
+
+
 [52/58] [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403)
-  4) [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403) 
+  12) [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403) 
 
     Error: 后台接口未授权应 401/403,实际 code=500 msg=手机号和验证码不能为空
 
@@ -140,7 +300,7 @@ Running 58 tests using 1 worker
 
 
 [53/58] [desktop] › e2e\api\nonfunc-security.spec.js:81:3 › 非功能/安全接口冒烟 › [TC-C-N07] 角色切换接口未授权被拒(401/403)
-  5) [desktop] › e2e\api\nonfunc-security.spec.js:81:3 › 非功能/安全接口冒烟 › [TC-C-N07] 角色切换接口未授权被拒(401/403) 
+  13) [desktop] › e2e\api\nonfunc-security.spec.js:81:3 › 非功能/安全接口冒烟 › [TC-C-N07] 角色切换接口未授权被拒(401/403) 
 
     Error: 切换角色未授权应 401/403,实际 code=500 msg=用户不存在
 
@@ -161,13 +321,13 @@ Running 58 tests using 1 worker
 
 
 [54/58] [desktop] › e2e\api\nonfunc-security.spec.js:86:3 › 非功能/安全接口冒烟 › [TC-C-N07] 权限提升防护:家长不可切换为未持有角色
-  6) [desktop] › e2e\api\nonfunc-security.spec.js:86:3 › 非功能/安全接口冒烟 › [TC-C-N07] 权限提升防护:家长不可切换为未持有角色 
+  14) [desktop] › e2e\api\nonfunc-security.spec.js:86:3 › 非功能/安全接口冒烟 › [TC-C-N07] 权限提升防护:家长不可切换为未持有角色 
 
-    Error: 家长不应越权切到 admin(实际 data={"token":"eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYWRtaW4iLCJyb2xlcyI6WyJhZG1pbiJdLCJ1c2VySWQiOjgxODMzLCJzdWIiOiI4MTgzMyIsImlhdCI6MTc5MzQ2MDUwNCwiZXhwIjoxNzk2MDUyNTA0fQ.hM0oGttpra_2cku_LxyupwnWM2na2rKMkX6-lKrOfzw","userId":81833,"role":"admin","roles":null,"familyId":3077,"nickname":"QA-SEC","phone":"13790845473","currentMemberId":null,"isNewUser":false,"openid":null,"needsRoleSelect":null,"needsFamily":false,"teacherStatus":"pending","teacherRejectReason":null,"hasTeacherRole":false,"vendorType":null,"activityProviderStatus":null})
+    Error: 家长不应越权切到 admin(实际 data={"token":"eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYWRtaW4iLCJyb2xlcyI6WyJhZG1pbiJdLCJ1c2VySWQiOjgxODQ2LCJzdWIiOiI4MTg0NiIsImlhdCI6MTc5MzQ2NTY2MSwiZXhwIjoxNzk2MDU3NjYxfQ.vr6Gtig0-5c8D82bkEETxmeFkWCA-QNEOBMpJFI-pW4","userId":81846,"role":"admin","roles":null,"familyId":3093,"nickname":"QA-SEC","phone":"13191822207","currentMemberId":null,"isNewUser":false,"openid":null,"needsRoleSelect":null,"needsFamily":false,"teacherStatus":"pending","teacherRejectReason":null,"hasTeacherRole":false,"vendorType":null,"activityProviderStatus":null})
 
     expect(received).toBeFalsy()
 
-    Received: "eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYWRtaW4iLCJyb2xlcyI6WyJhZG1pbiJdLCJ1c2VySWQiOjgxODMzLCJzdWIiOiI4MTgzMyIsImlhdCI6MTc5MzQ2MDUwNCwiZXhwIjoxNzk2MDUyNTA0fQ.hM0oGttpra_2cku_LxyupwnWM2na2rKMkX6-lKrOfzw"
+    Received: "eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYWRtaW4iLCJyb2xlcyI6WyJhZG1pbiJdLCJ1c2VySWQiOjgxODQ2LCJzdWIiOiI4MTg0NiIsImlhdCI6MTc5MzQ2NTY2MSwiZXhwIjoxNzk2MDU3NjYxfQ.vr6Gtig0-5c8D82bkEETxmeFkWCA-QNEOBMpJFI-pW4"
 
       88 |     const ctx = await getParent(request);
       89 |     const r = await apiPost(request, '/api/auth/switch-role', { role: 'admin' }, ctx.token);
@@ -185,7 +345,7 @@ Running 58 tests using 1 worker
 [56/58] [desktop] › e2e\api\nonfunc-security.spec.js:101:3 › 非功能/安全接口冒烟 › [TC-P-N10] AI 健康教练 XSS:query 注入脚本不回显原始脚本且不错 500
 [57/58] [desktop] › e2e\api\nonfunc-security.spec.js:109:3 › 非功能/安全接口冒烟 › [TC-A-N06] 活动反馈存储型 XSS:提交含脚本 comment,列表不回显原始脚本
 [58/58] [desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200)
-  7) [desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200) 
+  15) [desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200) 
 
     Error: expect(received).toBeTruthy()
 
@@ -203,13 +363,22 @@ Running 58 tests using 1 worker
     Error Context: .api-artifacts\api-nonfunc-security-非功能-安-18c8a-N11-报告上传非-PDF-恶意内容被拒-非-200--desktop\error-context.md
 
 
-  7 failed
+  15 failed
+    [desktop] › e2e\api\family-member-api.spec.js:54:3 › 【API级】家庭成员管理全流程 › [场景2] 添加新家庭成员 - 期望添加成功并返回完整信息 
+    [desktop] › e2e\api\family-member-api.spec.js:63:3 › 【API级】家庭成员管理全流程 › [场景2b] 添加成员时昵称为空 - 期望返回错误提示 
+    [desktop] › e2e\api\nonfunc-perf-compat.spec.js:56:1 › [TC-G-N03] 非微信H5兜底登录:手机号注册登录路径 UA 无关 ────
+    [desktop] › e2e\api\nonfunc-perf-compat.spec.js:63:1 › [TC-G-N02/P-N06/C-N03/T-N04/S-N03/X-N07] 多端 UA 兼容:同请求不同客户端返回一致 
+    [desktop] › e2e\api\nonfunc-perf-compat.spec.js:79:1 › [TC-A-N04/X-N02] 限流熔断稳定性:爆发请求下系统不死(不出现 5xx 雪崩) 
+    [desktop] › e2e\api\nonfunc-perf-compat.spec.js:92:1 › [TC-P-N02/X-N01] 并发不串数据:并行 AI 请求各自独立响应 ──
+    [desktop] › e2e\api\nonfunc-perf-compat.spec.js:106:1 › [响应时间基线] 已登录家庭列表单请求耗时冒烟 ≤ 8s ───────────
     [desktop] › e2e\api\nonfunc-security.spec.js:50:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问能量概览被拒(401/403) 
     [desktop] › e2e\api\nonfunc-security.spec.js:55:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问家庭成员列表被拒(401/403) 
     [desktop] › e2e\api\nonfunc-security.spec.js:60:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权调用 AI 健康教练被拒(401/403) 
+    [desktop] › e2e\api\nonfunc-security.spec.js:66:3 › 非功能/安全接口冒烟 › [TC-P-N09] IDOR:越权访问他人家庭成员列表 → 403 
     [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403) 
     [desktop] › e2e\api\nonfunc-security.spec.js:81:3 › 非功能/安全接口冒烟 › [TC-C-N07] 角色切换接口未授权被拒(401/403) 
     [desktop] › e2e\api\nonfunc-security.spec.js:86:3 › 非功能/安全接口冒烟 › [TC-C-N07] 权限提升防护:家长不可切换为未持有角色 
     [desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200) 
-  5 skipped
-  46 passed (1.0m)
+  4 skipped
+  10 did not run
+  29 passed (3.3m)

+ 1 - 1
playwright_smoke_report.md

@@ -1,7 +1,7 @@
 
 ## Playwright E2E 冒烟(api 层,独立,不阻断主闭环)
 - 执行器: /d/cfc/tests/node_modules/.bin/playwright test -c playwright.config.api.js --project=desktop
-- 结果: **46 passed / 7 failed / 5 skipped**
+- 结果: **29 passed / 15 failed / 4 skipped**
 - 覆盖: tests/e2e/api/*.spec.js(含 nonfunc-security 安全契约、nonfunc-perf-compat 性能兼容)
 - 说明: 红用例=已知后端缺口(权限提升/开放端点/上传未校验/缺鉴权过滤器),作持续告警;失败不阻断本闭环。
 - 明细: /d/cfc/playwright_smoke.log