ZCLAW 全系统功能测试设计规格书
日期: 2026-04-17
类型: 全系统功能测试 (Full System Functional Test)
执行方式: AI Agent 自动执行 (Chrome DevTools MCP + Tauri MCP + HTTP)
验证深度: 深度验证 (结构完整性 + 数据合理性 + 状态一致性 + 错误合理性 + 跨系统流通)
1. 背景与目标
1.1 为什么需要这次测试
ZCLAW 已完成发布前稳定化阶段的核心功能开发,系统包含:
- 10 个 Rust Crates (~77K 行)
- 190 个 Tauri 命令 (104 个有前端 invoke 调用)
- 137 个 SaaS HTTP 端点 (.route())
- 14 层 Runtime 中间件 + 10 层 SaaS HTTP 中间件
- 9 个 Hands + 75 个 Skills + 17 个 Pipeline 模板
之前的 E2E 测试 (04-16, 22 条, 77% 通过率) 覆盖有限,且主要是冒烟级别验证。本测试方案旨在:
- 全面覆盖 — 10 个子系统逐一验证,不留盲区
- 深度断言 — 不仅验证"能运行",还验证"数据真实、逻辑正确、状态一致"
- 跨系统流通 — 验证数据在系统间的端到端流转,而非孤立功能点
1.2 先决条件
| 条件 |
状态 |
| PostgreSQL 运行 + SaaS 后端 (8080 端口) |
已就绪 |
| Tauri 桌面端 (1420 端口) |
已就绪 |
| Admin V2 开发服务器 (5173 端口) |
已就绪 |
| 至少一个 LLM Provider + 有余额的 API Key |
已就绪 |
1.3 不覆盖范围
| 排除项 |
原因 |
| Model Groups 7 个端点 |
前端无调用方 |
| Account API Keys (/keys) |
与 /tokens 重叠,疑似孤儿 |
| A2A Multi-Agent 5 个命令 |
feature-gated 禁用 |
| Webhook 系统 |
已 deprecated |
| 负载/压力测试 |
非功能测试范畴 |
2. 测试架构
2.1 三层结构
2.2 断言标准(深度验证)
每条链路的断言覆盖以下维度:
| 维度 |
验证内容 |
| 结构完整性 |
响应包含所有必填字段、字段类型正确 |
| 数据合理性 |
token 用量 > 0、时间戳在合理范围、ID 格式正确 |
| 状态一致性 |
创建后能查询到、删除后不存在、更新后值已变更 |
| 错误合理性 |
错误响应包含明确 message、HTTP 状态码正确、不泄露内部信息 |
| 跨系统流通 |
聊天后记忆被提取、计费记录增加、审计日志有记录 |
3. Layer 0: 基础设施健康检查 (5 条)
| # |
链路 |
验证方式 |
预期 |
| L0-01 |
PostgreSQL 连接 |
SELECT 1 via SaaS health |
200 + {"status": "ok"} |
| L0-02 |
SaaS 后端健康 |
GET /api/health |
200 + 服务信息 |
| L0-03 |
Admin V2 加载 |
浏览器导航到 localhost:5173 |
页面标题含 "ZCLAW" + 无 JS 错误 |
| L0-04 |
Tauri 桌面端运行 |
Chrome DevTools 连接 localhost:1420 |
页面可见 + 无白屏 |
| L0-05 |
LLM Provider 可达 |
GET /api/v1/relay/models |
返回至少 1 个可用模型 |
4. Layer 1: 子系统垂直测试
V1: 认证与安全 (12 条)
| # |
链路 |
深度验证点 |
| V1-01 |
注册新用户 |
用户名/邮箱/密码校验规则生效;响应含 account_id(非空) + JWT(可解码) + refresh_token;GET /auth/me 返回 status=active + role=user + totp_enabled=false |
| V1-02 |
重复注册拒绝 |
相同用户名→409 + 明确 message;相同邮箱→409;用户名<3字符→400;密码<8字符→400 |
| V1-03 |
登录获取 Token |
响应含 access_token + refresh_token;JWT 解码后 sub=account_id, role 正确, pwv=1;HttpOnly cookie 设置正确 |
| V1-04 |
错误密码锁定 |
连续 5 次错误密码→账户锁定 15 分钟;第 6 次尝试→423 + "账户已锁定";正确密码在锁定期内也不可登录 |
| V1-05 |
Token 刷新轮换 |
用 refresh_token 换新 token 对;旧 refresh_token 立即失效(二次使用→401);新 token 的 jti 不同 |
| V1-06 |
密码修改使旧 Token 失效 |
修改密码后 pwv 递增;旧 JWT 访问受保护端点→401;重新登录后正常 |
| V1-07 |
登出撤销 |
登出后 refresh_token 失效;access_token 仍在有效期但 refresh 不可用 |
| V1-08 |
TOTP 设置与验证 |
setup 返回 secret+QR;verify 成功后 totp_enabled=true;login 需额外 totp_code |
| V1-09 |
API Token CRUD |
创建→返回明文 token(仅一次);列表→hash 不含明文;用 token 调 API→成功;撤销→不可用 |
| V1-10 |
权限中间件 |
user 角色访问 admin 端点→403;admin 角色→成功;无 token→401 |
| V1-11 |
限流验证 |
登录接口 >5次/分钟→429;注册 >3次/小时→429;公共接口 >20次/分钟→429 |
| V1-12 |
并发会话 |
同一账户多设备同时登录;各设备 token 独立有效;一处修改密码全部失效 |
V2: 聊天流与流式响应 (10 条)
| # |
链路 |
深度验证点 |
| V2-01 |
KernelClient 流式聊天 |
发消息→收到 text_delta 事件流;最终消息完整(非截断);token 统计 input>0, output>0;消息持久化到 IndexedDB |
| V2-02 |
SaaS Relay SSE 流式 |
走 Relay 路径→SSE 格式正确(data: [DONE]);Admin Usage 页可见新增 token 记录;GET /relay/tasks 返回对应任务记录 |
| V2-03 |
模型切换后聊天 |
切换到不同模型→发送消息→验证响应确实来自新模型;模型字段正确 |
| V2-04 |
流式取消 |
发消息→中途 cancelStream→收到已生成部分+取消标记;不产生完整 token 计费;session 状态恢复为 idle |
| V2-05 |
多轮对话上下文 |
连续 3 轮对话;第 3 轮能引用第 1 轮内容;上下文窗口不溢出 |
| V2-06 |
错误恢复 |
模拟 401→自动 token 刷新→重试成功;模拟网络断开→优雅降级+重连 |
| V2-07 |
thinking_delta 处理 |
模型返回 thinking 内容→前端正确展示折叠/展开;thinking 不计入 output token 统计 |
| V2-08 |
tool_call 事件流 |
LLM 调用工具→收到 tool_call 事件→工具执行→tool_result 事件→最终回复包含工具结果 |
| V2-09 |
Hand 触发事件流 |
触发 Hand→handStart 事件→handEnd 事件+结果;消息列表含 role=hand 消息 |
| V2-10 |
消息持久化验证 |
发送 5 条消息→刷新页面→消息恢复完整(含时间戳、角色、内容);IDB 中数据结构正确 |
V3: 管家模式与行业路由 (10 条)
| # |
链路 |
深度验证点 |
| V3-01 |
关键词分类命中 |
发送医疗相关查询→ButlerRouter 分类为 healthcare;响应 system prompt 包含 <butler-context> XML 块 |
| V3-02 |
行业关键词动态加载 |
Admin 创建自定义行业+关键词→Tauri 加载→查询命中该行业关键词→分类正确 |
| V3-03 |
未命中默认行为 |
发送无关查询→无 <butler-context> 注入→正常对话流程不受影响 |
| V3-04 |
多关键词饱和度 |
连续命中 3+关键词→饱和度达到 1.0→分类置信度最高 |
| V3-05 |
痛点记录 |
用户表达痛点→butler_record_pain_point→痛点存入 SQLite→list 可查询 |
| V3-06 |
方案生成 |
累积足够痛点→butler_generate_solution→返回结构化方案(标题+描述+步骤) |
| V3-07 |
简洁/专业模式切换 |
切换到简洁模式→UI 隐藏高级选项→对话风格变化(管家更主动) |
| V3-08 |
跨会话连续性 |
新会话→管家引用上次痛点→通过 Tauri 命令 butler_list_pain_points 查询痛点数据并验证正确 |
| V3-09 |
冷启动体验 |
新用户首次聊天→管家自我介绍+引导→不出现空白或错误 |
| V3-10 |
4 内置行业覆盖 |
分别用医疗/数据报告/政策合规/会议协调关键词查询→4 个行业各至少命中一次 |
V4: 记忆管道 (8 条)
| # |
链路 |
深度验证点 |
| V4-01 |
对话后记忆提取 |
3 轮对话含明确偏好→对话结束后触发 extraction→SQLite 中有新记忆记录 |
| V4-02 |
FTS5 全文检索 |
存入 3 条记忆(A="我喜欢 Python 编程", B="我偏好 Rust 开发", C="今天天气很好")→搜索"编程语言"→viking_find 返回 [A, B];A/B 排在 C 之前 |
| V4-03 |
TF-IDF 语义评分 |
存入多条不同主题记忆→查询特定主题→viking_find 返回按 TF-IDF 相似度排序;语义最相关的排在首位 |
| V4-04 |
记忆注入系统提示 |
用户有偏好记忆→新对话→system prompt 中包含 ## 用户偏好 段+记忆内容 |
| V4-05 |
Token 预算约束 |
大量记忆→注入后不超过 500 token 预算;低分记忆被截断 |
| V4-06 |
记忆去重 |
重复表达相同偏好→不产生重复记录;或旧记录更新而非新增 |
| V4-07 |
Agent 级记忆隔离 |
Agent A 的记忆不出现在 Agent B 的上下文中;切换 Agent 后记忆正确加载 |
| V4-08 |
记忆统计 |
memory_stats 返回正确的记忆总数/各类型计数/存储大小 |
V5: Hands 自主能力 (10 条)
| # |
链路 |
深度验证点 |
| V5-01 |
Browser Hand 执行 |
触发 browser_hand→创建浏览器实例→导航到 URL→返回页面内容;hand_run_status 正确流转 |
| V5-02 |
Researcher Hand |
触发 researcher→返回研究报告结构(摘要+来源+建议);执行时间合理 |
| V5-03 |
Speech Hand + TTS |
触发 speech→文本生成→浏览器 TTS 播放(检查 speechSynthesis.speak 调用) |
| V5-04 |
Quiz Hand |
触发 quiz→返回题目结构(题干+选项+答案);格式可解析 |
| V5-05 |
Slideshow Hand |
触发 slideshow→返回幻灯片数据(标题+内容+布局) |
| V5-06 |
Hand 审批流程 |
needs_approval 的 Hand→审批前状态=pending→approve 后执行→状态=completed |
| V5-07 |
Hand 并发限制 |
同一 Hand 并发触发超过 semaphore 限制→排队等待;不崩溃 |
| V5-08 |
Hand 依赖检查 |
Clip Hand 无 FFmpeg→check_dependencies 返回缺失依赖→graceful 错误消息 |
| V5-09 |
Hand 列表与注册 |
hand_list 返回 9 个启用的 Hand;每个含 name+description+tool_count |
| V5-10 |
Hand 审计日志 |
Hand 执行后→Admin 日志审计页可见对应记录(action=hand_execute, target=hand_name) |
V6: SaaS Relay 与 Token 池 (10 条)
| # |
链路 |
深度验证点 |
| V6-01 |
Relay 聊天完成 |
POST /relay/chat/completions→SSE 流返回;GET /relay/tasks 返回该任务且状态为 completed |
| V6-02 |
Token 池轮换 |
provider_keys 有多个 key→连续请求→RPM/TPM 跟踪正确→key 自动轮换 |
| V6-03 |
Key 限流生效 |
单个 key 达到 RPM 限制→自动切换到下一个 key;所有 key 耗尽→返回 429 |
| V6-04 |
Relay 任务列表 |
完成多次 relay→list_tasks 返回历史;分页正确;状态字段准确 |
| V6-05 |
Relay 失败重试 |
使用 intentionally invalid API key 创建 provider→通过 relay 发送聊天→期望失败→使用有效 key 调用 retry 端点→验证成功 |
| V6-06 |
可用模型列表 |
list_available_models 返回当前 key 池支持的模型;不含已禁用模型 |
| V6-07 |
配额检查 |
用户配额已满→relay 请求→被 quota middleware 拦截→返回 429 + quota exceeded |
| V6-08 |
Key 创建/切换/删除 |
Admin CRUD provider_key→创建后可见→toggle 禁用→删除后不可用 |
| V6-09 |
Usage 记录完整性 |
relay 请求→GET /usage 返回新增记录→account_id, model, input_tokens, output_tokens 全部正确 |
| V6-10 |
Relay 超时处理 |
长时间请求→15s 超时→返回 timeout 错误(非 hang) |
V7: Admin 后台全页面 (15 条)
| # |
链路 |
深度验证点 |
| V7-01 |
Dashboard 统计数据 |
加载 Dashboard→stats 数值与 DB 一致(用户数/请求数/收入);图表渲染完整 |
| V7-02 |
账户管理 CRUD |
列表→分页+搜索→创建账户→编辑角色/状态→状态切换(冻结/解冻)→DB 同步 |
| V7-03 |
模型服务配置 |
列表 providers→添加 provider→配置 key→关联模型→切换回桌面端→模型可选 |
| V7-04 |
计费套餐管理 |
查看 plans→切换用户订阅→GET /billing/subscriptions/:userId 返回更新后的订阅→用户下次登录新配额生效 |
| V7-05 |
知识库管理 |
创建分类→添加知识条目→编辑→版本历史→搜索功能→返回匹配结果 |
| V7-06 |
知识库分析 |
knowledge/analytics 返回 overview+trends+top_items+quality+gaps 各端点数据合理 |
| V7-07 |
结构化数据源 |
上传 Excel→解析为 structured_rows→SQL 查询返回结果→删除后不可查 |
| V7-08 |
Prompt 模板管理 |
创建 prompt→编辑→查看版本→回滚到旧版本→版本号正确 |
| V7-09 |
角色权限矩阵 |
创建角色→配置权限→分配给用户→用户权限生效(可访问/不可访问的端点) |
| V7-10 |
行业配置管理 |
创建行业+关键词→配置 pain_seeds→关联到用户→用户查询命中该行业 |
| V7-11 |
Agent 模板管理 |
创建模板→配置 soul/scenarios→分配给用户→用户端创建 Agent 基于→Agent 配置正确 |
| V7-12 |
定时任务管理 |
创建 cron 任务→列表显示→下次执行时间计算正确→手动触发→结果记录 |
| V7-13 |
Relay 监控 |
查看任务列表→按状态筛选→查看任务详情→包含完整的 input/output/error |
| V7-14 |
日志审计 |
操作日志列表→按时间/用户/操作类型筛选→日志详情含 IP+UA+变更详情 |
| V7-15 |
Config 同步 |
修改配置→同步到桌面端→桌面端 configStore 更新→sync_logs 有记录 |
V8: 模型配置与计费 (10 条)
| # |
链路 |
深度验证点 |
| V8-01 |
Provider CRUD |
创建 provider→设置 base_url + api_key + rate_limits→列表可见→更新→删除 |
| V8-02 |
模型 CRUD |
创建模型→关联 provider→设置 max_tokens/temperature→列表可见→参数正确 |
| V8-03 |
Key 池管理 |
Provider 下添加多个 key→各 key 独立 RPM/TPM 跟踪→禁用某 key→请求不再使用 |
| V8-04 |
计费套餐定义 |
plans 列表含 Free/Pro/Team;每个 plan 含 features+limits JSON 结构完整 |
| V8-05 |
订阅切换 |
用户从 Free→Pro→配额限制更新;Pro→Free→超出 Free 配额的请求被拒绝 |
| V8-06 |
用量实时递增 |
每次聊天→GET /billing/usage 返回递增后的 used_tokens;数值与 GET /usage 统计一致 |
| V8-07 |
支付流程 |
创建支付→返回支付链接→mock-pay 确认→支付状态变为 paid→订阅生效 |
| V8-08 |
发票生成 |
支付完成后→GET /billing/invoices/:id/pdf 返回有效 PDF (Content-Type: application/pdf) |
| V8-09 |
模型白名单 |
Free plan 只能用指定模型→请求不在白名单的模型→被拒绝 |
| V8-10 |
Token 配额耗尽 |
配额用完→后续请求→429 + 明确的 quota exceeded 信息→不扣除额外费用 |
V9: Pipeline 与工作流 (8 条)
| # |
链路 |
深度验证点 |
| V9-01 |
Pipeline 模板列表 |
pipeline_templates 返回 17 个模板;每个含 name+description+steps;YAML 格式有效 |
| V9-02 |
Pipeline 创建与执行 |
从模板创建 pipeline→执行→progress 事件流→result 包含各步骤输出 |
| V9-03 |
Pipeline DAG 验证 |
创建含依赖的 pipeline→验证 DAG 无环→执行顺序正确(依赖先完成) |
| V9-04 |
Pipeline 取消 |
执行中 pipeline→cancel→已完成的步骤保留结果+未开始的不执行 |
| V9-05 |
Pipeline 错误处理 |
某步骤失败→pipeline 状态=failed→错误信息含失败步骤名+原因 |
| V9-06 |
工作流 CRUD |
创建 workflow→编辑步骤→保存→列表可见→删除后不可见 |
| V9-07 |
工作流执行 |
执行 workflow→各节点按序执行→最终输出正确→运行历史可查 |
| V9-08 |
意图路由 |
发送自然语言描述→route_intent→匹配到正确的 pipeline 模板 |
V10: 技能系统 (7 条)
| # |
链路 |
深度验证点 |
| V10-01 |
技能列表 |
skill_list 返回已加载技能;每个含 name+description+triggers;非空 |
| V10-02 |
语义路由 |
发送匹配某技能 trigger 的查询→SkillIndex 中间件匹配→执行对应技能 |
| V10-03 |
技能执行 |
skill_execute→返回结构化结果;执行时间合理;无 panic |
| V10-04 |
技能 CRUD |
skill_create→列表可见→skill_update→字段更新→skill_delete→不可见 |
| V10-05 |
技能刷新 |
添加新 SKILL.md→skill_refresh→列表增加;移除 SKILL.md→刷新后减少 |
| V10-06 |
技能与聊天集成 |
聊天中触发技能→tool_call 事件→技能执行→结果注入对话 |
| V10-07 |
技能按需加载 |
无技能配置时→SkillIndex 中间件不注册;有技能时→正常注册 |
5. Layer 2: 跨系统横向验证 (24 条)
设计原则:每个角色走完一条完整的端到端旅程,每一步的输出是下一步的输入。
R1: 医院行政 (日常使用全链路)
| # |
链路 |
跨系统验证点 |
| R1-01 |
新用户注册→管家冷启动 |
注册→登录→首次打开桌面端→管家自我介绍+引导→无报错;saasStore 写入账户信息→connectionStore 选择连接模式→KernelClient 初始化 |
| R1-02 |
医疗排班对话→管家路由→记忆 |
发"这周排班太乱了"→ButlerRouter 分类 healthcare→<butler-context> 注入→管家主动追问→痛点记录到 VikingStorage→SQLite 可查 |
| R1-03 |
第二次对话→记忆注入+痛点回访 |
新会话→系统提示含 ## 用户偏好 段(上次偏好)→管家主动问"排班问题解决了吗"→记忆提取闭环完成 |
| R1-04 |
请求研究报告→Hand 触发→计费 |
发"帮我调研一下智能排班系统"→触发 Researcher Hand→Hand 执行返回结果→GET /usage 返回新增 token 记录→GET /billing/usage 返回递增配额 |
| R1-05 |
管家生成方案→痛点闭环 |
累积痛点足够→butler_generate_solution→返回结构化方案→用户查看→butler_update_proposal_status(accepted)→痛点状态变为 addressed |
| R1-06 |
审计验证全旅程 |
Admin 审计日志页可见全旅程日志→上述所有操作均有记录(注册/登录/聊天/Hand 触发/方案生成);日志含正确的时间戳+操作类型+目标 |
R2: IT 管理员 (后台配置全链路)
| # |
链路 |
跨系统验证点 |
| R2-01 |
Admin 登录→Provider+Key 配置 |
Admin 登录→添加 Provider(DeepSeek)+API Key→GET /providers/:id/keys 返回新 key→key 的 RPM/TPM 初始值为 0 |
| R2-02 |
配置模型→桌面端同步 |
创建模型(deepseek-v3)→关联 Provider→Admin 可见→切换到桌面端→模型列表含新模型→发起聊天→模型字段正确 |
| R2-03 |
配额+计费联动 |
创建计费套餐→给用户分配→desktop 端 saasStore 更新订阅信息→用户发消息→quota 检查通过→聊天后 usage 递增→Admin 端 Usage 页数据同步 |
| R2-04 |
知识库→行业→管家路由 |
Admin 创建行业"教育"+关键词+pain_seeds→关联到用户→触发 Tauri 命令 viking_load_industry_keywords 加载→用户发教育相关查询→ButlerRouter 命中自定义行业 |
| R2-05 |
Agent 模板→用户端创建 |
Admin 创建 Agent 模板(含 soul+scenarios)→分配给用户→用户端 AgentTemplates 可见→创建 Agent→配置从模板加载→聊天使用新 Agent 人格 |
| R2-06 |
定时任务→执行→审计 |
创建 cron 定时任务→等待触发(或手动触发)→GET /scheduler/tasks/:id 返回结果记录→操作日志有执行记录→状态流转 pending→running→completed |
R3: 开发者 (API + 工作流全链路)
| # |
链路 |
跨系统验证点 |
| R3-01 |
API Token 认证→Relay 调用 |
创建 API Token→用 token 调 POST /relay/chat/completions→SSE 响应正确→GET /relay/tasks 有记录→GET /usage 有 token 统计 |
| R3-02 |
多模型切换→Token 池→用量 |
连续用 3 个不同模型调 Relay→key 池自动选择对应 Provider→usage 按模型分别记录→Admin Usage 页可按 model 分组查看 |
| R3-03 |
Pipeline 创建→执行→结果 |
从模板创建 pipeline→执行→progress 实时推送→result 包含完整输出→pipeline_runs 历史可查 |
| R3-04 |
技能触发→工具调用→结果 |
通过 API 触发技能→tool_call 执行→tool_result 返回→对话中包含工具输出 |
| R3-05 |
浏览器 Hand→自动化流程 |
通过 API 触发 Browser Hand→执行导航+点击+提取→结果返回→审计日志记录 |
| R3-06 |
API 限流+权限→错误处理 |
超出 RPM→429 + Retry-After header;用 user 角色 token 调 admin 端点→403;过期 token→401 + 明确 message |
R4: 普通用户 (注册→首次体验→持续使用)
| # |
链路 |
跨系统验证点 |
| R4-01 |
注册→邮箱验证→首次登录 |
注册→邮箱格式被验证→密码强度校验→注册成功→自动登录→JWT + refresh_token 存储→saasStore 初始化 |
| R4-02 |
首次聊天→模型选择→流式体验 |
无历史对话→选择模型→发消息→流式响应→消息持久化到 IDB→关闭重开→消息恢复 |
| R4-03 |
多轮对话→记忆积累→个性化 |
在 3 个独立对话会话中分别表达偏好(不模拟时间流逝)→每轮对话后记忆提取→第 4 个会话聊天→记忆检索返回至少 1 个先前偏好→系统提示含偏好段 |
| R4-04 |
触发 Hand→审批→结果查看 |
需要审批的操作→Hand 状态 pending→用户审批→执行→结果展示→操作日志记录 |
| R4-05 |
配额用尽→升级提示 |
Free 配额耗尽→聊天返回 429→UI 显示升级提示→引导到计费页→支付后继续使用 |
| R4-06 |
安全设置→密码修改→TOTP |
修改密码→旧 session 失效→重新登录→设置 TOTP→下次登录需要验证码→设备信任管理 |
6. 执行策略
6.1 执行顺序与依赖
6.2 测试数据策略
| 策略 |
说明 |
| 隔离前缀 |
所有测试创建的数据加前缀 e2e_test_ |
| 测试账户 |
V1 阶段创建:e2e_admin, e2e_user, e2e_dev |
| 幂等性 |
每条链路可独立重跑;检查"已存在则跳过" |
| 清理策略 |
不自动删除数据(保留用于分析),标注为测试数据 |
| 时间锚点 |
记录测试开始时间戳,断言基于 > 开始时间 过滤 |
6.3 断言失败分级
| 级别 |
含义 |
处理 |
| CRITICAL |
系统核心功能不可用 |
立即停止当前 Phase,报告根因 |
| HIGH |
功能可用但数据不正确 |
标记失败,继续执行,汇总报告 |
| MEDIUM |
非关键字段缺失或格式不完美 |
记录警告,不阻断 |
| LOW |
UI 细节问题、性能轻微波动 |
记录观察,不影响判定 |
6.4 链路超时与重试
| 参数 |
值 |
| 单条链路超时 |
120 秒 |
| LLM 响应等待超时 |
60 秒 |
| 页面加载超时 |
15 秒 |
| 截图等待 |
2 秒 |
| 失败重试 |
不重试(记录原始失败,保留现场) |
7. 结果报告
7.1 单条链路结果格式
7.2 汇总报告结构
| 指标 |
说明 |
| 总链路数 |
129 (5 + 100 + 24) |
| 通过率 |
PASS / 总数 × 100% |
| 各 Phase 通过率 |
Phase 0/1/2/3 分别统计 |
| CRITICAL 失败数 |
需立即修复 |
| Bug 清单 |
按 CRITICAL/HIGH/MEDIUM/LOW 分级 |
| 覆盖热力图 |
10 子系统 × 4 角色 矩阵 |
| SaaS API 覆盖率 |
已测试端点 / 总端点 |
| Admin 页面覆盖率 |
已测试页面 / 总页面 |
| Tauri 命令覆盖率 |
已测试命令 / 有前端调用的命令 |
8. 规模汇总
| 维度 |
数量 |
| Layer 0 基础设施 |
5 条 |
| Layer 1 垂直测试 |
100 条 |
| Layer 2 横向验证 |
24 条 |
| 总计 |
129 条 |
| 子系统覆盖 |
10/10 |
| 跨系统角色覆盖 |
4/4 |
| SaaS API 端点覆盖 |
~90/137 |
| Admin 页面覆盖 |
14/17 (Login 由 V1 隐式覆盖, ApiKeys/Usage 待后续补充) |
| Tauri 命令覆盖 |
~60/104 (有前端调用的) |
| 预估执行时间 |
~60 分钟 |
9. 前次 Bug 回归验证
以下为 04-16 E2E 报告中发现的 Bug,在本测试方案中的对应覆盖:
| Bug ID |
描述 |
对应测试链路 |
回归验证点 |
| BUG-01 |
Agent 创建返回 HTTP 502 |
V7-11 (Agent 模板管理) + R2-05 (Agent 模板→用户端创建) |
验证 Agent 创建返回 201 (非 502);Agent 配置从模板正确加载 |
| BUG-02 |
8 条历史消息显示"重试"按钮 |
V2-10 (消息持久化验证) |
验证历史消息不包含"重试"伪影;刷新后消息状态正确恢复 |
| BUG-03 |
Key Pool exhaustion — "所有 Key 均在冷却中" |
V6-03 (Key 限流生效) + V6-02 (Token 池轮换) |
验证所有 key 耗尽场景返回 429 + 明确 message;key 冷却后自动恢复 |