# AuraK 完整测试框架 > 版本: v2.0 · 更新: 2026-06-16 > 覆盖: 用户管理 / 权限系统 / 考核评估 / 并发场景 / UI验证 --- ## 一、测试架构总览 ``` ┌────────────────────────────────────────────────────────────────────┐ │ AuraK 测试框架 │ ├────────────────────────────────────────────────────────────────────┤ │ │ │ Phase 0: 系统测试 (System Tests) │ │ ├── test-systematic.mjs 142项 · 全角色全维度 │ │ └── test-full-coverage.mjs 52项 · 未覆盖路径补全 │ │ │ │ Phase 1: 认证与用户 (Auth & User) │ │ ├── 登录/登出/Token校验/API Key │ │ ├── 用户 CRUD 正常/异常/边界 │ │ └── 角色升降级即时生效 │ │ │ │ Phase 2: 权限 RBAC (Permission) │ │ ├── 三层角色权限验证 (26/21/5) │ │ ├── 系统角色保护 / 自定义角色 CRUD │ │ └── 前端组件级门控 (PermissionGate) │ │ │ │ Phase 3: 考核评估 (Assessment) │ │ ├── test-assessment-smoke.mjs 29项 · 烟雾测试 │ │ ├── test-e2e-assessment-full-flow.mjs 29项 · 端到端全流程 │ │ ├── test-p2-advanced.mjs 20项 · P2 高级功能 │ │ ├── test-concurrent-assessments.mjs · 20人并发考核 │ │ └── test-multiround.mjs · 多轮对话 │ │ │ │ Phase 4: 出题引擎 (Question Engine) │ │ ├── 维度权重分配算法验证 (floor+remainder) │ │ ├── 题库容量与重叠率检查 │ │ └── judgment/评分标准完整性校验 │ │ │ │ Phase 5: 场景验证 (Scenario) │ │ ├── exam-organizer.mjs · 考试组织者全流程 │ │ └── test-permission-flow.mjs · 三层角色权限验证 │ │ │ │ Phase 6: 缺陷回归 (Regression) │ │ ├── shuffleArray bug 回归 │ │ ├── 系统角色权限不可改 (isSystem 保护) │ │ └── 获取 /users/:id 端点缺失修复 │ │ │ └────────────────────────────────────────────────────────────────────┘ ``` ## 二、各 Phase 详细说明 ### Phase 0 — 系统测试 (System Tests) **执行周期**: 每次代码变更后必跑 | 脚本 | 项数 | 通过率 | 说明 | |------|:----:|:------:|------| | `test-systematic.mjs` | 142 | ✅ 142/142 | 全角色(SA/TA/USER) × 全维度(身份/CRUD/RBAC/UI/用户故事) | | `test-full-coverage.mjs` | 52 | ✅ 52/52 | 未覆盖路径: 角色权限边界 × 模板极值 × 异常链 × 跨功能交互 | **测试范围**: ``` 1. 环境准备 4项 2. 身份认证 15项 (登录/错误密码/空凭据/篡改JWT/API Key) 3. 用户CRUD正常 11项 (创建/查询/编辑/升降级/删除/登录失效) 4. 用户CRUD异常 17项 (重复/空/短密码/emoji/不存在/越权) 5. 边界测试 7项 (并发同名/超长/空权限/幂等删除) 6. 权限矩阵RBAC 49项 (三层权限数/S应有/TA应有/USER无/API校验证/系统保护) 7. 租户隔离 1项 8. 缺陷回归 5项 9. 前端UI一致性 22项 (登录页/导航/设置Tab/弹窗/权限矩阵/三角色限制) 10. 用户故事完整 14项 (SA/TA/USER闭环/升降级即时/系统不可破坏) ``` --- ### Phase 1 — 认证与用户系统 #### 1.1 身份认证 (Authentication) | # | 测试点 | 输入 | 预期 | |---|--------|------|------| | A-01 | 正常密码登录 | admin / admin123 | 200 + access_token | | A-02 | 错误密码 | admin / wrong | 401 | | A-03 | 空密码 | admin / "" | 401 | | A-04 | 不存在用户 | nobody / x | 401 | | A-05 | 空JSON body | {} | 401 | | A-06 | 空body | (empty) | 400/401 | | A-07 | 无Authorization头 | — | 401 | | A-08 | 无效Bearer | "Bearer invalid" | 401 | | A-09 | 篡改JWT | 伪造token | 401 | | A-10 | API Key获取 | Bearer token | 200 + apiKey | | A-11 | JWT payload校验 | — | 含 id, role, tenantId | | A-12 | USER登录 | user1/pass123 | 200 | | A-13 | TA登录 | ta_admin/pass123 | 200 | #### 1.2 用户 CRUD (User Create/Read/Update/Delete) **正常路径**: | # | 操作 | 预期 | |---|------|------| | U-01 | SA创建用户(含displayName) | 201 + user.id | | U-02 | TA创建用户(本租户) | 201 | | U-03 | 用户加入租户 | 201 | | U-04 | 按ID查询用户 | 200 + 用户数据 | | U-05 | 用户列表含新用户 | 列表中可找到 | | U-06 | 编辑用户displayName | 200 | | U-07 | 提升 USER→TENANT_ADMIN | 200 + 权限从5→21 | | U-08 | 降级 TENANT_ADMIN→USER | 200 + 权限从21→5 | | U-09 | 删除用户 | 200 | | U-10 | 删除后不可查询 | 404 | | U-11 | 删除后无法登录 | 401 | **异常路径**: | # | 操作 | 预期 | |---|------|------| | U-12 | 重复用户名 | 409 | | U-13 | 空用户名 | 400 | | U-14 | 密码太短(5位) | 400 | | U-15 | 缺password | 400 | | U-16 | 密码6位(边界) | 201 | | U-17 | 编辑不存在用户 | 404 | | U-18 | 编辑 admin 账号 | 400 | | U-19 | 删自己 | 400 | | U-20 | 删不存在用户 | 404 | | U-21 | 删 admin 账号 | 400 | | U-22 | USER 删用户 | 403 | | U-23 | TA 删用户 | 403 | | U-24 | 非法角色值 | 400 | | U-25 | 改不存成员 | 400 | --- ### Phase 2 — 权限系统 (RBAC) #### 2.1 三层角色权限矩阵 | 权限 | SUPER_ADMIN | TENANT_ADMIN | USER | |------|:-----------:|:------------:|:----:| | user:view | ✅ | ✅ | ❌ | | user:create | ✅ | ✅ | ❌ | | user:edit | ✅ | ✅ | ❌ | | user:delete | ✅ | ❌ | ❌ | | user:role | ✅ | ❌ | ❌ | | tenant:view | ✅ | ✅ | ❌ | | tenant:create | ✅ | ❌ | ❌ | | tenant:delete | ✅ | ❌ | ❌ | | tenant:members | ✅ | ✅ | ❌ | | kb:view | ✅ | ✅ | ✅ | | kb:create | ✅ | ✅ | ✅ | | kb:edit | ✅ | ✅ | ✅ | | kb:delete | ✅ | ✅ | ❌ | | assess:view | ✅ | ✅ | ✅ | | assess:manage | ✅ | ✅ | ❌ | | assess:template | ✅ | ✅ | ❌ | | assess:bank | ✅ | ✅ | ❌ | | model:view | ✅ | ✅ | ❌ | | model:config | ✅ | ✅ | ❌ | | plugin:view | ✅ | ✅ | ✅ | | plugin:manage | ✅ | ✅ | ❌ | | settings:view | ✅ | ✅ | ❌ | | settings:system | ✅ | ❌ | ❌ | | **权限总数** | **26** | **21** | **5** | #### 2.2 角色 CRUD | # | 操作 | 预期 | |---|------|------| | R-01 | SA列出角色 | 200 + 3系统角色 | | R-02 | TA列出角色 | 200 | | R-03 | USER列出角色 | 403 | | R-04 | 创建自定义角色 | 201 | | R-05 | 重复角色名 | 400 | | R-06 | 编辑自定义角色名 | 200 | | R-07 | 编辑系统角色名 | 400 | | R-08 | 删除自定义角色 | 200 | | R-09 | 删除系统角色 | 400 | | R-10 | 删除已删角色 | 404 | | R-11 | 角色设权限 | 200 | | R-12 | 角色读权限 | 200 | | R-13 | 空权限数组 | 200 | | R-14 | 无效权限key | 400 | | R-15 | 系统角色权限不可改 | 400 (isSystem保护) | #### 2.3 前端权限门控 | # | 角色 | 可见Tab | |---|------|---------| | F-01 | SUPER_ADMIN | 用户管理 ✅ / 权限管理 ✅ / 租户管理 ✅ | | F-02 | TENANT_ADMIN | 用户管理 ❌(仅SA可见) / 权限管理 ✅ / 租户管理 ❌ | | F-03 | USER | 用户管理 ❌ / 权限管理 ❌ / 租户管理 ❌ | --- ### Phase 3 — 考核评估系统 (Assessment) #### 3.1 烟雾测试 (Smoke Test) — `test-assessment-smoke.mjs` | # | 检查项 | 说明 | |---|--------|------| | S-01 | admin 登录 | 管理员身份验证 | | S-02 | ta_admin 登录 | 租管身份验证 | | S-03 | user1 登录 | 用户身份验证 | | S-04 | 模板列表可获取 | API 可用 | | S-05 | 至少一个模板 | 系统有默认模板 | | S-06 | 技术人员模板存在 | 核心模板存在 | | S-07 | 非技术人员模板存在 | 备选模板存在 | | S-08 | attemptLimit 未锁定 | 非1(admin不被锁) | | S-09 | 题库可获取 | 题库 API 正常 | | S-10 | 题库有题目 | 题库非空 | | S-11 | 启动考核正常 | start API 正常 | | S-12 | 出题成功 | 异步出题完成 | | S-13 | 包含 PROMPT 维度 | 维度覆盖正确 | | S-14 | 包含 LLM 维度 | 维度覆盖正确 | | S-15 | 答题提交正常 | 4题全部成功 | | S-16 | 评分状态正常 | 评分不报错 | | S-17 | 证书可获取 | 证书 API 正常 | | S-18 | 证书含等级 | 等级判定正常 | | S-19 | 证书含总分 | 分数计算正常 | | S-20 | USER 创建模板被拒 | 权限隔离生效 | | S-21 | TA 可查看模板 | TA 权限正确 | | S-22 | USER 可查看题库 | 读权限开放 | | S-23 | USER 不能查看他人回顾 | 数据隔离生效 | | S-24 | 考核页渲染 | 前端页面加载 | | S-25 | 模板按钮可见 | UI 元素渲染 | | S-26 | 开始评估按钮可见 | UI 交互可用 | | S-27 | 点击开始无报错 | 前端无崩溃 | | S-28 | 题目已加载 | 题目显示到页面 | #### 3.2 端到端全流程 (E2E Full Flow) — `test-e2e-assessment-full-flow.mjs` | 阶段 | 测试项 | 详细验证 | |------|--------|---------| | **模板校验** | 维度配置 | 技术人员模板有 PROMPT/LLM/IDE/DEV_PATTERN | | | attemptLimit | 非1锁定状态 | | | 题数合理 | ≥4题 | | **题库校验** | 技术人员题库 | 有MC和SA题 | | | PROMPT/LLM/IDE/DEV_PATTERN | 每维度≥10/10/4/4题 | | | 评分标准 | 全部简答题有judgment | | | 非技术人员题库 | 有题且无IDE/DEV_PATTERN | | **API考核** | 创建考生 | POST /users | | | 启动考核 | POST /assessment/start | | | 异步出题 | 等待 /state 返回 questions | | | 维度分布 | 含PROMPT和LLM | | | 答题 | 4题全部成功 | | | 证书 | 可获取+含等级+含分数+含维度得分 | | | 历史记录 | 考核列表有记录 | | **非技术模板** | 启动 | 正常 | | | 出题 | 无IDE/DEV_PATTERN | | | 维度 | 仅PROMPT/LLM | | **前端 UI** | 登录 | 页面登录成功 | | | 模板选择 | 按钮可见可点 | | | 答题(MC+SA) | 最多4题含追问 | | | 结果 | 显示等级/分数 | | | 截图 | e2e-assessment-result.png | #### 3.3 P2 高级功能 (Advanced Features) — `test-p2-advanced.mjs` | # | 功能 | 测试 | 结果 | |---|------|------|:----:| | P-01 | attemptLimit 写入 | 设2→读取=2 | ✅ | | P-02 | reviewMode 写入 | 设after_completion→读取 | ✅ | | P-03 | shuffleQuestions 写入 | 设true→读取 | ✅ | | P-04 | 尝试次数限制 | 超限后拒绝 | ✅ | | P-05 | 预约开始 | 未到时间拒绝 | ✅ | | P-06 | 预约结束 | 已过时间拒绝 | ✅ | | P-07 | 答题回顾API | 返回含正确答案 | ✅ | | P-08 | 回顾含解析 | judgment字段可见 | ✅ | | P-09 | shuffleQuestions生效 | flag=true时启用 | ✅ | | P-10 | 模板配置恢复 | 恢复后正常 | ✅ | | **总计** | **20项** | **全部通过** | **✅** | #### 3.4 多轮对话 (Multi-round) — `test-multiround.mjs` | # | 场景 | 说明 | |---|------|------| | M-01 | 选择题答题 | 检测选项按钮→点击→确认答案 | | M-02 | 简答题答题 | textarea输入→发送按钮 | | M-03 | AI追问 | 简答后textarea重现→输入追问回答 | | M-04 | 4题全流程 | 完整完成4题混合题型 | #### 3.5 出题算法验证 ``` 验证: floor + remainder 分配法 → 总和恒等于题数 技术人员模板(30/30/20/20): 20题 → PROMPT:6 + LLM:6 + IDE:4 + DEV_PATTERN:4 = 20 ✅ 10题 → PROMPT:3 + LLM:3 + IDE:2 + DEV_PATTERN:2 = 10 ✅ 5题 → PROMPT:2 + LLM:1 + IDE:1 + DEV_PATTERN:1 = 5 ✅ 4题 → PROMPT:2 + LLM:2 + IDE:0 + DEV_PATTERN:0 = 4 ✅ (旧算法: 4题 = 1+1+1+1=4❌) 非技术人员模板(50/30/20): 10题 → PROMPT:5 + LLM:3 + WORK_CAP:2 = 10 ✅ ``` --- ### Phase 4 — 场景测试 (Scenario) #### 4.1 考试组织者场景 — `exam-organizer.mjs` ``` 流程: 管理员登录 → 创建4个考生(初/中/高级+初级) → 4考生依次参加考核(UI操作,含MC+SA+追问) → 查看考核结果统计 ``` #### 4.2 并发考核场景 — `test-concurrent-assessments.mjs` | # | 场景 | 结果 | |---|------|:----:| | C-01 | 20人并发创建账号 | ✅ 全部成功 | | C-02 | 20人并发启动考核 | ✅ 全部成功, Session ID 唯一 | | C-03 | 异步出题完成率 | ✅ 20/20, 每题20题 | | C-04 | 各会话题数一致 | ✅ 均为20题 | | C-05 | 维度分布正确 | ✅ IDE:4/LLM:6/PROMPT:6/DEV_PATTERN:4 | | C-06 | 并发提交答案 | ✅ 6人×4题全部成功 | | C-07 | 题目重叠率 | ⚠️ 10.5%(题库281题不够400槽位) | --- ### Phase 5 — 缺陷回归 (Regression) | # | 缺陷 | 发现者 | 修复状态 | |---|------|--------|:--------:| | REG-01 | shuffleArray 返回新数组但调用处用const未接收 | 代码审查 | ✅ 已修 | | REG-02 | 系统角色权限可被修改(setRolePermissions缺isSystem检查) | 全量回归测试 | ✅ 已修 | | REG-03 | GET /users/:id 端点不存在 | 系统性测试 | ✅ 已修 | | REG-04 | DTO中perQuestionTimeLimit边界值校验缺失 | 边界测试 | ✅ 已修 | | REG-05 | P2字段(attemptLimit等)在startSession中未正确映射 | P2测试 | ✅ 已修 | --- ## 三、测试脚本索引 ### 3.1 脚本一览 | 脚本 | 行数 | 测试类型 | 运行时间 | 依赖 | 说明 | |------|:----:|:--------:|:--------:|:----|------| | `test-systematic.mjs` | 480+ | API+UI | ~60s | 前后端 | **必跑** 全角色全维度 | | `test-full-coverage.mjs` | 350+ | API | ~5s | 后端 | 未覆盖路径补全 | | `test-e2e-assessment-full-flow.mjs` | 300+ | API+UI | ~90s | 前后端 | **新** 考核端到端全流程 | | `test-assessment-smoke.mjs` | 280+ | API+UI | ~75s | 前后端 | **新** 快速烟雾测试 | | `test-p2-advanced.mjs` | 200+ | API | ~30s | 后端 | P2高级功能专项 | | `test-concurrent-assessments.mjs` | 230+ | API | ~100s | 后端 | 20人并发考核 | | `test-user-lifecycle.mjs` | 400+ | API+UI | ~30s | 前后端 | 用户全生命周期+异常 | | `test-permission-flow.mjs` | 200+ | API+UI | ~40s | 前后端 | 三层角色权限验证 | | `test-multiround.mjs` | 230+ | UI | ~60s | 前后端 | 考核多轮对话 | | `test-question-distribution.mjs` | 70+ | UI | ~30s | 前后端 | 出题分布验证 | | `exam-organizer.mjs` | 300+ | API+UI | ~180s | 前后端 | 考试组织场景 | ### 3.2 推荐执行策略 ``` 快速检查 (~2min): node test-assessment-smoke.mjs # 29项烟雾测试 node test-full-coverage.mjs # 52项全量回归 完整检查 (~6min): node test-systematic.mjs # 142项系统测试 node test-e2e-assessment-full-flow.mjs # 29项端到端 node test-p2-advanced.mjs # 20项P2专项 深度检查 (~10min): 完整检查 + node test-concurrent-assessments.mjs # 20人并发 node exam-organizer.mjs # 考试组织场景 node test-multiround.mjs # 多轮对话 ``` --- ## 四、测试结果汇总 | 测试套件 | 通过 | 失败 | 通过率 | 最新运行 | |---------|:---:|:----:|:------:|:--------:| | 系统性测试 (142项) | 142 | 0 | 100% | 2026-06-09 | | 全量回归 (52项) | 52 | 0 | 100% | 2026-06-09 | | 烟雾测试 (29项) | 29 | 0 | 100% | 2026-06-16 | | 端到端全流程 (29项) | 29 | 0 | 100% | 2026-06-16 | | P2专项 (20项) | 20 | 0 | 100% | 2026-06-09 | | 并发测试 (20人) | — | — | ✅ | 2026-06-08 | | 用户生命周期 (42项) | 42 | 0 | 100% | 2026-06-09 | | **总计** | **~314** | **0** | **100%** | | --- ## 五、测试发现并修复的缺陷清单 | # | 缺陷 | 模块 | 严重度 | 修复PR | |---|------|------|:------:|--------| | 1 | shuffleArray 返回值未接收 | question-bank.service | 🔴 | c57c302 | | 2 | 系统角色权限可被随意修改 | permission.service | 🔴 | a7e7c85 | | 3 | GET /users/:id 缺失 | user.controller | 🟡 | 7e74165 | | 4 | P2模板字段未映射到 session | assessment.service | 🟡 | d15e881 | | 5 | 出题分配Math.round合计偏差 | question-bank.service | 🟡 | 1aee7e0 | | 6 | questionCount=0/50未做DAO校验 | dto/create-template.dto | 🟡 | 9fd503b | | 7 | text-[10px] 字号系统不统一 | UI (多个组件) | 🟢 | ffe3652 | | 8 | 登录页blue与后台indigo不一致 | LoginPage.tsx | 🟢 | ffe3652 | | 9 | 操作列 opacity-0 完全隐藏 | SettingsView.tsx | 🟢 | c166d29 | | 10 | 编辑弹窗 max-w-md 过窄 | SettingsView.tsx | 🟢 | c166d29 | | 11 | 会议记录题 PROMPT→LLM 维度错位 | question_bank_items | 🟡 | 75769b1 | | 12 | 151道简答题缺评分标准 | question_bank_items | 🟡 | 75769b1 | | 13 | 非技术人员模板无题库 blank | 题库关联 | 🟡 | 75769b1 | | 14 | templateData P2字段显式映射确认 | assessment.service | 🟡 | d15e881 |