|
|
@@ -30,7 +30,53 @@ 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] 添加新家庭成员 - 期望添加成功并返回完整信息
|
|
|
+
|
|
|
+ Error: 添加成员应成功
|
|
|
+
|
|
|
+ expect(received).toBe(expected) // Object.is equality
|
|
|
+
|
|
|
+ Expected: 200
|
|
|
+ Received: 502
|
|
|
+
|
|
|
+ 30 | ctx.token
|
|
|
+ 31 | );
|
|
|
+ > 32 | expect(r.code, '添加成员应成功').toBe(200);
|
|
|
+ | ^
|
|
|
+ 33 | expect(r.data && r.data.id, '应返回成员ID').toBeTruthy();
|
|
|
+ 34 | return { id: r.data.id, nickname: r.data.nickname || nickname };
|
|
|
+ 35 | }
|
|
|
+ at createManualChild (D:\cfc\tests\e2e\api\family-member-api.spec.js:32:31)
|
|
|
+ at D:\cfc\tests\e2e\api\family-member-api.spec.js:55:15
|
|
|
+
|
|
|
+ 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,24 +88,163 @@ 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
|
|
|
-[耗时] 家庭列表 63ms
|
|
|
+ 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)
|
|
|
+ 8) [desktop] › e2e\api\nonfunc-security.spec.js:50:3 › 非功能/安全接口冒烟 › [TC-G-N04] 未授权访问能量概览被拒(401/403)
|
|
|
+
|
|
|
+ Error: 能量概览未授权应 401/403,实际 code=502 msg=NON_JSON_RESPONSE
|
|
|
+
|
|
|
+ expect(received).toBeTruthy()
|
|
|
+
|
|
|
+ Received: false
|
|
|
+
|
|
|
+ 50 | test('[TC-G-N04] 未授权访问能量概览被拒(401/403)', async ({ request }) => {
|
|
|
+ 51 | const r = await apiPost(request, '/api/energy/overview', {}, null);
|
|
|
+ > 52 | expect([401, 403].includes(r.code), `能量概览未授权应 401/403,实际 code=${r.code} msg=${r.message}`).toBeTruthy();
|
|
|
+ | ^
|
|
|
+ 53 | });
|
|
|
+ 54 |
|
|
|
+ 55 | test('[TC-G-N04] 未授权访问家庭成员列表被拒(401/403)', async ({ request }) => {
|
|
|
+ at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:52:96
|
|
|
+
|
|
|
+ Error Context: .api-artifacts\api-nonfunc-security-非功能-安-bdecd--G-N04-未授权访问能量概览被拒-401-403--desktop\error-context.md
|
|
|
+
|
|
|
+
|
|
|
[49/58] [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=502 msg=NON_JSON_RESPONSE
|
|
|
+
|
|
|
+ expect(received).toBeTruthy()
|
|
|
+
|
|
|
+ Received: false
|
|
|
+
|
|
|
+ 55 | test('[TC-G-N04] 未授权访问家庭成员列表被拒(401/403)', async ({ request }) => {
|
|
|
+ 56 | const r = await apiPost(request, '/api/family/member/list', {}, null);
|
|
|
+ > 57 | expect([401, 403].includes(r.code), `成员列表未授权应 401/403,实际 code=${r.code} msg=${r.message}`).toBeTruthy();
|
|
|
+ | ^
|
|
|
+ 58 | });
|
|
|
+ 59 |
|
|
|
+ 60 | test('[TC-G-N04] 未授权调用 AI 健康教练被拒(401/403)', async ({ request }) => {
|
|
|
+ at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:57:96
|
|
|
+
|
|
|
+ Error Context: .api-artifacts\api-nonfunc-security-非功能-安-ab6c7--N04-未授权访问家庭成员列表被拒-401-403--desktop\error-context.md
|
|
|
+
|
|
|
+
|
|
|
[50/58] [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=502 msg=NON_JSON_RESPONSE
|
|
|
+
|
|
|
+ expect(received).toBeTruthy()
|
|
|
+
|
|
|
+ Received: false
|
|
|
+
|
|
|
+ 60 | test('[TC-G-N04] 未授权调用 AI 健康教练被拒(401/403)', async ({ request }) => {
|
|
|
+ 61 | const r = await apiPost(request, '/api/ai/health-coach/send', { query: '你好' }, null);
|
|
|
+ > 62 | expect([401, 403].includes(r.code), `AI 教练未授权应 401/403,实际 code=${r.code} msg=${r.message}`).toBeTruthy();
|
|
|
+ | ^
|
|
|
+ 63 | });
|
|
|
+ 64 |
|
|
|
+ 65 | // —— IDOR 横向越权(TC-P-N09 / TC-X-N05):携带本人 token 越权访问他人 familyId → 403 ——
|
|
|
+ at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:62:97
|
|
|
+
|
|
|
+ Error Context: .api-artifacts\api-nonfunc-security-非功能-安-d1d5f-04-未授权调用-AI-健康教练被拒-401-403--desktop\error-context.md
|
|
|
+
|
|
|
+
|
|
|
[51/58] [desktop] › e2e\api\nonfunc-security.spec.js:66:3 › 非功能/安全接口冒烟 › [TC-P-N09] IDOR:越权访问他人家庭成员列表 → 403
|
|
|
[52/58] [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403)
|
|
|
- 1) [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403)
|
|
|
+ 11) [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403)
|
|
|
|
|
|
Error: 后台接口未授权应 401/403,实际 code=500 msg=手机号和验证码不能为空
|
|
|
|
|
|
@@ -85,7 +270,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)
|
|
|
- 2) [desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200)
|
|
|
+ 12) [desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200)
|
|
|
|
|
|
Error: expect(received).toBeTruthy()
|
|
|
|
|
|
@@ -103,8 +288,19 @@ Running 58 tests using 1 worker
|
|
|
Error Context: .api-artifacts\api-nonfunc-security-非功能-安-18c8a-N11-报告上传非-PDF-恶意内容被拒-非-200--desktop\error-context.md
|
|
|
|
|
|
|
|
|
- 2 failed
|
|
|
+ 12 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:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403)
|
|
|
[desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200)
|
|
|
- 5 skipped
|
|
|
- 51 passed (47.1s)
|
|
|
+ 4 skipped
|
|
|
+ 10 did not run
|
|
|
+ 32 passed (1.8m)
|