| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- Running 58 tests using 1 worker
- [1/58] [desktop] › e2e\api\api-smoke.spec.js:18:3 › API级冒烟(远程后端) › 自注册链路可用(拿到有效 token)
- [2/58] [desktop] › e2e\api\api-smoke.spec.js:24:3 › API级冒烟(远程后端) › 家庭成员列表接口可调用 (code=200)
- [3/58] [desktop] › e2e\api\api-smoke.spec.js:30:3 › API级冒烟(远程后端) › 能量概览接口可调用 (code=200)
- [4/58] [desktop] › e2e\api\api-smoke.spec.js:36:3 › API级冒烟(远程后端) › 成员列表参数校验生效(越权家庭 → 403)
- [5/58] [desktop] › e2e\api\article-api.spec.js:26:3 › 【API级】文章管理全流程 › [场景1] 查看文章列表 - 期望返回文章列表
- [6/58] [desktop] › e2e\api\article-api.spec.js:35:3 › 【API级】文章管理全流程 › [场景2] 文章分类 - 期望分类列表可用
- [7/58] [desktop] › e2e\api\article-api.spec.js:43:3 › 【API级】文章管理全流程 › [场景3] 查看文章详情 - 期望返回文章内容
- [8/58] [desktop] › e2e\api\article-api.spec.js:59:3 › 【API级】文章管理全流程 › [场景4] 我的文章 - 期望返回登录用户发布记录
- [9/58] [desktop] › e2e\api\article-api.spec.js:67:3 › 【API级】文章管理全流程 › [场景5] 发布文章缺少标题 - 期望返回错误提示
- [10/58] [desktop] › e2e\api\article-api.spec.js:73:3 › 【API级】文章管理全流程 › [场景5b] 精选文章 - 期望可获取
- [11/58] [desktop] › e2e\api\article-api.spec.js:81:3 › 【API级】文章管理全流程 › [场景6] 家长角色发布文章 - 期望受权限/审核流程约束
- [12/58] [desktop] › e2e\api\contact-api.spec.js:41:3 › 【API级】联系人管理全流程 › [场景1] 创建联系人 - 期望创建成功
- [13/58] [desktop] › e2e\api\contact-api.spec.js:51:3 › 【API级】联系人管理全流程 › [场景2] 通讯录导入 - 期望导入成功
- [14/58] [desktop] › e2e\api\contact-api.spec.js:64:3 › 【API级】联系人管理全流程 › [场景3] 记录互动 - 期望记录成功
- [15/58] [desktop] › e2e\api\contact-api.spec.js:77:3 › 【API级】联系人管理全流程 › [场景4] 编辑联系人 - 期望更新成功
- [16/58] [desktop] › e2e\api\contact-api.spec.js:88:3 › 【API级】联系人管理全流程 › [场景4b] 删除联系人 - 期望从列表中移除
- [17/58] [desktop] › e2e\api\contact-api.spec.js:103:3 › 【API级】联系人管理全流程 › [场景5b] 越权操作他人联系人 - 期望被拒绝
- [18/58] [desktop] › e2e\api\energy-api.spec.js:34:3 › 【API级】能量系统收支全流程 › [场景1] 获取家庭能量沙盘 - 期望返回五维能量数据
- [19/58] [desktop] › e2e\api\energy-api.spec.js:41:3 › 【API级】能量系统收支全流程 › [场景1b] 未加入家庭/越权访问 - 期望返回错误提示
- [20/58] [desktop] › e2e\api\energy-api.spec.js:55:3 › 【API级】能量系统收支全流程 › [场景2] 任务完成能量发放 - 期望能量增加且流水记录
- [21/58] [desktop] › e2e\api\energy-api.spec.js:77:3 › 【API级】能量系统收支全流程 › [场景2c] 已知缺陷复现 - 期望当前返回 500 服务器内部错误
- [22/58] [desktop] › e2e\api\energy-api.spec.js:89:3 › 【API级】能量系统收支全流程 › [场景2b] 能量发放缺参 - 期望返回错误提示
- [23/58] [desktop] › e2e\api\energy-api.spec.js:97:3 › 【API级】能量系统收支全流程 › [场景3] 能量兑换心愿 - 期望参数校验生效且未扣减能量
- [24/58] [desktop] › e2e\api\energy-api.spec.js:121:3 › 【API级】能量系统收支全流程 › [场景4] 查询能量流水 - 期望返回分页记录
- [25/58] [desktop] › e2e\api\energy-api.spec.js:131:3 › 【API级】能量系统收支全流程 › [场景5] 获取五维能量概览 - 期望返回五维汇总数据
- [26/58] [desktop] › e2e\api\energy-api.spec.js:146:3 › 【API级】能量系统收支全流程 › [场景6] 完整能量收支流程 - 期望全流程成功
- [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] 查看家庭成员列表 - 期望返回所有成员及关系信息
- [34/58] [desktop] › e2e\api\family-member-api.spec.js:120:3 › 【API级】家庭成员管理全流程 › [场景4] 更新成员关系/昵称 - 期望更新成功并返回新信息
- [35/58] [desktop] › e2e\api\family-member-api.spec.js:138:3 › 【API级】家庭成员管理全流程 › [场景4c] 已知缺陷复现 - nickname 未生效但 gender/birthday 生效
- [36/58] [desktop] › e2e\api\family-member-api.spec.js:158:3 › 【API级】家庭成员管理全流程 › [场景5] 切换到成员视角 - 期望返回切换凭证
- [37/58] [desktop] › e2e\api\family-member-api.spec.js:167:3 › 【API级】家庭成员管理全流程 › [场景5b] 切换到本人视角 - 期望返回错误提示
- [38/58] [desktop] › e2e\api\family-member-api.spec.js:179:3 › 【API级】家庭成员管理全流程 › [场景6] 移除家庭成员 - 期望成员从家庭中移除
- [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 雪崩)
- 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
- 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
- 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)
- 12) [desktop] › e2e\api\nonfunc-security.spec.js:75:3 › 非功能/安全接口冒烟 › [TC-A-N05] 非管理员访问后台接口被拒(401/403)
- Error: 后台接口未授权应 401/403,实际 code=500 msg=手机号和验证码不能为空
- expect(received).toBeTruthy()
- Received: false
- 75 | test('[TC-A-N05] 非管理员访问后台接口被拒(401/403)', async ({ request }) => {
- 76 | const r = await apiPost(request, '/api/admin-auth/login', {}, null);
- > 77 | expect([401, 403].includes(r.code), `后台接口未授权应 401/403,实际 code=${r.code} msg=${r.message}`).toBeTruthy();
- | ^
- 78 | });
- 79 |
- 80 | // —— 双角色铁律 / 权限提升防护(TC-C-N07)——
- at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:77:96
- Error Context: .api-artifacts\api-nonfunc-security-非功能-安-1d575-A-N05-非管理员访问后台接口被拒-401-403--desktop\error-context.md
- [53/58] [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=用户不存在
- expect(received).toBeTruthy()
- Received: false
- 81 | test('[TC-C-N07] 角色切换接口未授权被拒(401/403)', async ({ request }) => {
- 82 | const r = await apiPost(request, '/api/auth/switch-role', { role: 'parent' }, null);
- > 83 | expect([401, 403].includes(r.code), `切换角色未授权应 401/403,实际 code=${r.code} msg=${r.message}`).toBeTruthy();
- | ^
- 84 | });
- 85 |
- 86 | test('[TC-C-N07] 权限提升防护:家长不可切换为未持有角色', async ({ request }) => {
- at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:83:96
- Error Context: .api-artifacts\api-nonfunc-security-非功能-安-7e22b--C-N07-角色切换接口未授权被拒-401-403--desktop\error-context.md
- [54/58] [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.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.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);
- > 90 | expect(r.data && r.data.token, `家长不应越权切到 admin(实际 data=${JSON.stringify(r.data)})`).toBeFalsy();
- | ^
- 91 | });
- 92 |
- 93 | test('[TC-C-N07] 角色切换自身合法角色正常(基线)', async ({ request }) => {
- at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:90:89
- Error Context: .api-artifacts\api-nonfunc-security-非功能-安全接口冒烟-TC-C-N07-权限提升防护:家长不可切换为未持有角色-desktop\error-context.md
- [55/58] [desktop] › e2e\api\nonfunc-security.spec.js:93:3 › 非功能/安全接口冒烟 › [TC-C-N07] 角色切换自身合法角色正常(基线)
- [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)
- 15) [desktop] › e2e\api\nonfunc-security.spec.js:121:3 › 非功能/安全接口冒烟 › [TC-P-N11] 报告上传非 PDF/恶意内容被拒(非 200)
- Error: expect(received).toBeTruthy()
- Received: false
- 129 | // 安全合规行为:拒绝为 4xx(400/401/403/405/413/415/422)。非 200 即视为未成功落库。
- 130 | expect(status, `报告上传非 PDF 应被拒(4xx),实际 HTTP ${status}`).not.toBe(200);
- > 131 | expect([400, 401, 403, 405, 413, 415, 422].includes(status)).toBeTruthy();
- | ^
- 132 | });
- 133 | });
- 134 |
- at D:\cfc\tests\e2e\api\nonfunc-security.spec.js:131:66
- Error Context: .api-artifacts\api-nonfunc-security-非功能-安-18c8a-N11-报告上传非-PDF-恶意内容被拒-非-200--desktop\error-context.md
- 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)
- 4 skipped
- 10 did not run
- 29 passed (3.3m)
|