Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
移除不再使用的数据脱敏功能,包括: 1. 删除data_masking模块 2. 清理loop_runner中的unmask逻辑 3. 移除前端saas-relay-client.ts中的mask/unmask实现 4. 更新中间件层数从15层降为14层 5. 同步更新相关文档(CLAUDE.md、TRUTH.md、wiki等) 此次变更简化了系统架构,移除了不再需要的敏感数据处理逻辑。所有相关测试证据和截图已归档。
651 lines
32 KiB
Markdown
651 lines
32 KiB
Markdown
# ZCLAW 功能链路穷尽测试方案
|
||
|
||
> **方案**: B+C 混合 — 状态机转换测试(主体)+ 3 角色冒烟测试(补充)
|
||
> **范围**: 33 条功能链路,345 个测试场景,分 5 批执行
|
||
> **执行方式**: 通过 Tauri MCP 模拟真实用户操作(找碴模式)
|
||
|
||
## Context
|
||
|
||
基于 wiki/feature-map.md 的 33 条功能链路,设计穷尽测试。目标不是"页面能打开就算通过",而是验证完整数据流、边界条件、错误恢复、降级机制、跨链路交互。通过 Tauri MCP 工具(query_page/click/type_text/execute_js/take_screenshot/wait_for)执行。
|
||
|
||
## 状态模型(12 核心状态)
|
||
|
||
```
|
||
FRESH → CONFIGURED → CONNECTED_LOCAL
|
||
↓ ↓
|
||
LOGGED_OUT → LOGGED_IN → CONNECTED_SAAS
|
||
↓ ↓
|
||
TOKEN_EXPIRED DEGRADED
|
||
↓ ↓
|
||
LOGGED_IN ←───────┘
|
||
↓
|
||
CHATTING → STREAM_COMPLETE
|
||
|
||
附加: ADMIN_MODE / BUTLER_SIMPLE / BUTLER_PRO / PIPELINE_RUN
|
||
```
|
||
|
||
| 状态 | 验证方式 |
|
||
|------|----------|
|
||
| FRESH | `!connectionStore.connectionState` |
|
||
| CONNECTED_LOCAL | `connectionState === 'connected' && mode === 'tauri'` |
|
||
| LOGGED_IN | `saasStore.token && !saasDegraded` |
|
||
| CONNECTED_SAAS | `connectionState === 'connected' && mode === 'saas'` |
|
||
| DEGRADED | `saasStore.saasReachable === false` |
|
||
| CHATTING | `streamStore.isStreaming === true` |
|
||
| STREAM_COMPLETE | `streamStore.isStreaming === false && lastMessage.role === 'assistant'` |
|
||
|
||
---
|
||
|
||
## Batch 1:核心聊天(F-01~F-05,52 场景)
|
||
|
||
### F-01 发送消息(11 场景)
|
||
|
||
| ID | 类别 | 场景 | From → To | 验证点 |
|
||
|----|------|------|-----------|--------|
|
||
| F01-01 | normal | 发送简单中文"你好" | CONNECTED → CHATTING → COMPLETE | 用户气泡出现、AI 流式响应、streaming 动画、完成状态 |
|
||
| F01-02 | normal | 发送英文长消息(500字) | CONNECTED → COMPLETE | 完整接收不截断、token 计数更新 |
|
||
| F01-03 | normal | 发送含代码请求 | CONNECTED → COMPLETE | AI 返回代码块、语法高亮正确 |
|
||
| F01-04 | boundary | 空消息 | CONNECTED → CONNECTED | 发送按钮禁用/无反应 |
|
||
| F01-05 | boundary | 连续快速发送 5 条 | CHATTING → CHATTING | 排队机制正常/提示等待/不丢消息 |
|
||
| F01-06 | boundary | 超长消息(10000字) | CONNECTED → COMPLETE | 不崩溃/不截断或合理提示 |
|
||
| F01-07 | error | 网络中断后发送 | CONNECTED → ERROR → CONNECTED | 错误提示友好、不丢失用户输入、可重试 |
|
||
| F01-08 | error | 模型不可用 | CONNECTED → ERROR → CONNECTED | 400 错误提示明确、自动建议可用模型 |
|
||
| F01-09 | degradation | SaaS 不可达降级 | SAAS → DEGRADED → LOCAL | 自动降级到本地、提示降级状态 |
|
||
| F01-10 | cross | 发送中切换 Agent | CHATTING → COMPLETE → 切换 | 当前流正常完成/新 Agent 独立会话 |
|
||
| F01-11 | cross | 发送后检查记忆触发 | COMPLETE → MEMORY | Memory 中间件触发提取、记忆统计增加 |
|
||
|
||
### F-02 流式响应(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F02-01 | normal | 正常流式逐字显示 | 文字逐字出现、光标闪烁、最后停止 |
|
||
| F02-02 | normal | Thinking 模式展示 | thinking 内容折叠、思考→回答分离 |
|
||
| F02-03 | normal | 工具调用流式展示 | ToolStart/ToolEnd 事件正确渲染 |
|
||
| F02-04 | normal | Hand 触发流式展示 | HandStart/HandEnd 事件、进度指示 |
|
||
| F02-05 | boundary | 极短响应(<5字) | 短响应不吞字、完整显示 |
|
||
| F02-06 | boundary | 超长响应(>5000字) | 不截断、不重复、滚动正常 |
|
||
| F02-07 | boundary | 中英日韩混合内容 | Unicode 正确渲染、不乱码 |
|
||
| F02-08 | error | 流式中途 500 错误 | 错误提示友好、部分内容保留 |
|
||
| F02-09 | error | 流式中途超时 | 超时守护触发(5min)、提示超时、可重试 |
|
||
| F02-10 | cross | 流式中取消再重新发送 | 新流正常开始、不受旧流影响 |
|
||
|
||
### F-03 模型切换(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F03-01 | normal | 切换到另一个模型 | 模型名更新、下次消息用新模型 |
|
||
| F03-02 | normal | 切换后发送验证 | 确认使用新模型响应 |
|
||
| F03-03 | normal | 列出所有可用模型 | SaaS 白名单模型完整列表 |
|
||
| F03-04 | boundary | 快速切换 10 次 | 最后一次生效、不崩溃 |
|
||
| F03-05 | boundary | 无可用模型 | 清空 Provider Key → 模型列表为空、友好提示 |
|
||
| F03-06 | error | 切换到未启用模型 | SaaS 返回 400、提示错误 |
|
||
| F03-07 | error | 模型别名不匹配 | 用非精确 ID → 400、提示精确 ID |
|
||
| F03-08 | degradation | SaaS 不可达时切换 | 降级模式下使用本地模型列表 |
|
||
| F03-09 | cross | 切换模型+发消息+检查 token | token 计数正确归属新模型 |
|
||
| F03-10 | cross | 会话中切换模型不丢上下文 | 3轮→切换→再聊→上下文保留 |
|
||
|
||
### F-04 上下文管理(11 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F04-01 | normal | 单会话上下文连续(5轮) | AI 记得前文、不丢上下文 |
|
||
| F04-02 | normal | 切换回来恢复会话 | 切走→切回→消息历史完整 |
|
||
| F04-03 | normal | 跨会话持久化 | 发消息→关闭→重开→IndexedDB 保留 |
|
||
| F04-04 | boundary | 超长上下文(50轮) | Compaction 触发、不崩溃 |
|
||
| F04-05 | boundary | 上下文窗口满 | 自动压缩、保留关键信息 |
|
||
| F04-06 | error | 消息存储失败 | IndexedDB 空间满→优雅降级、不丢对话 |
|
||
| F04-07 | cross | 多 Agent 会话隔离 | Agent A 聊 X → Agent B 聊 Y → 回到 A → 不混 |
|
||
| F04-08 | cross | 会话标题自动生成 | 新会话聊 2 轮→Title 中间件生成标题 |
|
||
| F04-09 | cross | 记忆注入影响上下文 | 有历史记忆→新会话→system prompt 含相关记忆 |
|
||
| F04-10 | cross | 大上下文+模型切换 | 20轮后切换模型→上下文完整 |
|
||
| F04-11 | cross | 跨会话记忆检索增强 | 昨天聊 X→今天问 X→IdentityRecall 检索到 |
|
||
|
||
### F-05 取消流式(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F05-01 | normal | 流式中点击取消 | 流立即停止、已接收内容保留 |
|
||
| F05-02 | normal | 取消后发新消息 | 新消息正常发送、不受旧流影响 |
|
||
| F05-03 | normal | 取消后消息标记 | 消息标记为"已取消"/不完整状态 |
|
||
| F05-04 | boundary | 流刚完成时取消 | 无副作用、消息完整 |
|
||
| F05-05 | boundary | 连续取消 3 次 | 每次取消立即生效、不卡死 |
|
||
| F05-06 | boundary | 取消正在 tool call 的流 | 工具执行正确中断、状态清理 |
|
||
| F05-07 | error | 取消失败(网络已断) | 不崩溃、超时后自动清理 |
|
||
| F05-08 | cross | 取消+Token 统计 | 已消耗 token 正确计入 |
|
||
| F05-09 | cross | 取消+记忆提取 | 已接收部分可能触发提取 |
|
||
| F05-10 | cross | 取消+上下文保留 | 新消息引用已接收内容→AI 知道 |
|
||
|
||
---
|
||
|
||
## Batch 2:Agent + 认证(F-06~F-09, F-17~F-19,72 场景)
|
||
|
||
### F-06 创建 Agent(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F06-01 | normal | 正常创建 Agent | 侧边栏出现新 Agent、可选中 |
|
||
| F06-02 | normal | 自定义名称+模型+提示 | 配置正确保存、生效 |
|
||
| F06-03 | boundary | 重复名称 | 允许或提示冲突、不崩溃 |
|
||
| F06-04 | boundary | 超长名称(100字) | 正确处理、截断或提示 |
|
||
| F06-05 | boundary | 特殊字符名称(emoji/中文/<>) | 不崩溃、显示正确 |
|
||
| F06-06 | boundary | 空系统提示 | 使用默认提示、不崩溃 |
|
||
| F06-07 | error | 创建失败 | 错误提示、不产生幽灵 Agent |
|
||
| F06-08 | cross | 创建后立即发消息 | 新 Agent 独立会话、响应正常 |
|
||
| F06-09 | cross | 创建+记忆隔离 | 新 Agent 记忆统计为 0 |
|
||
| F06-10 | cross | 创建后列表刷新 | 侧边栏排序/数量正确 |
|
||
|
||
### F-07 切换 Agent(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F07-01 | normal | 正常切换 | Agent 选中、会话切换 |
|
||
| F07-02 | normal | 切换后发消息 | 使用新 Agent 的配置 |
|
||
| F07-03 | normal | 切换后上下文独立 | 不混入其他 Agent 的对话 |
|
||
| F07-04 | boundary | 快速连续切换 10 次 | 最后一次生效、不崩溃 |
|
||
| F07-05 | boundary | 切到刚创建的 Agent | 空会话、正常使用 |
|
||
| F07-06 | boundary | 切回默认 Agent | 原有会话恢复 |
|
||
| F07-07 | boundary | 仅 1 个 Agent 时 | 无切换选项或自身 |
|
||
| F07-08 | cross | 流式中切换 | 当前流完成/新 Agent 独立 |
|
||
| F07-09 | cross | 不同模型 Agent | 各用各的模型 |
|
||
| F07-10 | cross | 记忆不混淆 | Agent A 记忆不出现在 B |
|
||
|
||
### F-08 配置 Agent(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F08-01 | normal | 改名称 | 侧边栏+详情同步更新 |
|
||
| F08-02 | normal | 改模型 | 下次消息用新模型 |
|
||
| F08-03 | normal | 改系统提示 | AI 行为改变 |
|
||
| F08-04 | boundary | 空名称 | 校验提示、不允许保存 |
|
||
| F08-05 | boundary | 超长系统提示(5000字) | 正确保存或提示限制 |
|
||
| F08-06 | boundary | 特殊字符提示 | 不注入/不崩溃 |
|
||
| F08-07 | error | 保存失败 | 不丢原配置、提示重试 |
|
||
| F08-08 | cross | 配置后立即生效 | 不需重启/下条消息生效 |
|
||
| F08-09 | cross | 已有对话不受影响 | 历史消息不变 |
|
||
| F08-10 | cross | 配置+记忆联动 | 改系统提示不影响已有记忆 |
|
||
|
||
### F-09 删除 Agent(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F09-01 | normal | 正常删除 | 确认弹窗→删除→列表更新 |
|
||
| F09-02 | normal | 删除当前 Agent | 自动切换到默认 |
|
||
| F09-03 | normal | 删除有对话的 Agent | 级联删除 sessions/messages |
|
||
| F09-04 | boundary | 取消删除 | 弹窗取消→无变化 |
|
||
| F09-05 | boundary | 删除最后一个(仅默认) | 不允许删除或保护 |
|
||
| F09-06 | error | 删除失败 | 提示错误、Agent 仍存在 |
|
||
| F09-07 | cross | 删除后记忆级联 | Agent 记忆一同清除 |
|
||
| F09-08 | cross | 删除使用中的 Agent | 正确处理、不崩溃 |
|
||
| F09-09 | cross | 批量删除 3 个 | 逐个确认或批量确认 |
|
||
| F09-10 | cross | 删除后切换到默认 | 会话为空、正常可用 |
|
||
|
||
### F-17 注册(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F17-01 | normal | 正常注册 | 成功→自动登录→进入聊天 |
|
||
| F17-02 | normal | 邮箱格式校验 | 无效邮箱→提示错误 |
|
||
| F17-03 | normal | 密码强度校验 | 弱密码→提示要求 |
|
||
| F17-04 | boundary | 已存在邮箱 | 提示已注册、建议登录 |
|
||
| F17-05 | boundary | 254 字符邮箱 | RFC 5322 校验 |
|
||
| F17-06 | boundary | 特殊字符密码 | 允许/正确存储 |
|
||
| F17-07 | error | 空字段提交 | 校验提示 |
|
||
| F17-08 | cross | 注册后自动登录 | token 存储+模型列表加载 |
|
||
| F17-09 | cross | 注册限流(3次/小时) | 超限提示 |
|
||
| F17-10 | cross | 注册后立即发消息 | 全链路正常 |
|
||
|
||
### F-18 登录(12 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F18-01 | normal | 正常登录 | token 存储+进入聊天 |
|
||
| F18-02 | normal | 错误密码 | 提示密码错误 |
|
||
| F18-03 | normal | 不存在用户 | 提示用户不存在 |
|
||
| F18-04 | boundary | 密码错误 5 次 | 账户锁定 15 分钟 |
|
||
| F18-05 | boundary | 锁定后等待 15 分钟 | 可重新登录 |
|
||
| F18-06 | normal | 登录后 token 存储 | OS keyring 有值 |
|
||
| F18-07 | normal | 登录后模型列表加载 | SaaS 白名单模型显示 |
|
||
| F18-08 | boundary | 多设备登录 | 允许/不互踢 |
|
||
| F18-09 | cross | 登录限流(5次/分钟) | 超限提示 |
|
||
| F18-10 | cross | 记住登录状态 | 重启后不需重新登录 |
|
||
| F18-11 | cross | 登录后 UI 状态 | 模式/主题/设置恢复 |
|
||
| F18-12 | cross | 登录+降级模式切换 | SaaS 模式↔本地模式 |
|
||
|
||
### F-19 Token 刷新(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F19-01 | normal | 正常刷新 | 新 token 对+旧 token 失效 |
|
||
| F19-02 | normal | access 过期自动刷新 | 无感刷新+继续对话 |
|
||
| F19-03 | boundary | 刷新时发送消息 | 不丢失+正确处理 |
|
||
| F19-04 | boundary | refresh token 单次使用 | 二次使用被拒 |
|
||
| F19-05 | error | 刷新失败 | 重新登录提示 |
|
||
| F19-06 | cross | 刷新后继续对话 | 上下文完整 |
|
||
| F19-07 | cross | 并发请求触发刷新 | 不重复刷新+不竞态 |
|
||
| F19-08 | cross | 刷新+用量统计正确 | token 不丢失 |
|
||
| F19-09 | cross | 刷新+旧 token 失效 | DB 中旧 token 已撤销 |
|
||
| F19-10 | cross | 刷新+cookie 更新 | HttpOnly cookie 更新 |
|
||
|
||
---
|
||
|
||
## Batch 3:Hands + 记忆(F-10~F-16,74 场景)
|
||
|
||
### F-10 触发 Hand(11 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F10-01 | normal | 触发 Browser Hand | HandStart→执行→HandEnd 正确 |
|
||
| F10-02 | normal | 触发 Collector Hand | 数据收集+结果返回 |
|
||
| F10-03 | normal | 触发 Researcher Hand | 深度研究+结果返回 |
|
||
| F10-04 | normal | LLM 自动触发 Hand | 对话中 LLM 决定调用 Hand |
|
||
| F10-05 | normal | 手动触发 Hand | 自动化面板→选择→执行 |
|
||
| F10-06 | boundary | 触发+流式展示 | 进度指示+结果渲染 |
|
||
| F10-07 | boundary | 触发失败 | 错误提示+可重试 |
|
||
| F10-08 | error | 无权限触发 | 提示权限不足 |
|
||
| F10-09 | error | 依赖缺失(WebDriver/FFmpeg) | 明确提示缺什么 |
|
||
| F10-10 | cross | 并发触发 2 个 Hand | 队列或并行+不冲突 |
|
||
| F10-11 | cross | 触发+记忆存储 | Hand 结果存入记忆 |
|
||
|
||
### F-11 Hand 审批(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F11-01 | normal | 审批通过 | 审批→执行→结果返回 |
|
||
| F11-02 | normal | 审批拒绝 | 拒绝→提示取消 |
|
||
| F11-03 | boundary | 审批超时 | 超时后自动取消或提示 |
|
||
| F11-04 | boundary | 审批弹窗展示 | 需求信息完整+操作按钮 |
|
||
| F11-05 | error | 审批后执行失败 | 错误提示+可重试 |
|
||
| F11-06 | cross | 审批+流式中 | 不影响当前流 |
|
||
| F11-07 | cross | 多 Hand 同时审批 | 各自独立 |
|
||
| F11-08 | cross | 审批日志记录 | 操作日志有记录 |
|
||
| F11-09 | cross | 审批+用量统计 | token 正确计入 |
|
||
| F11-10 | cross | 审批+记忆提取 | 结果触发记忆 |
|
||
|
||
### F-12 Hand 结果查看(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F12-01 | normal | 正常查看结果 | 聊天中结果展示 |
|
||
| F12-02 | normal | 结果详情弹窗 | 完整数据展示 |
|
||
| F12-03 | boundary | 失败结果展示 | 错误信息清晰 |
|
||
| F12-04 | boundary | 结果含附件 | 附件可查看/下载 |
|
||
| F12-05 | boundary | 结果含数据表格 | 表格正确渲染 |
|
||
| F12-06 | normal | 历史 Hand 结果 | 历史列表可查看 |
|
||
| F12-07 | error | 结果持久化失败 | 不丢结果+提示 |
|
||
| F12-08 | cross | 结果+重新执行 | 可重新运行 |
|
||
| F12-09 | cross | 结果+记忆提取 | 结果触发记忆存储 |
|
||
| F12-10 | cross | 结果+上下文引用 | 后续对话可引用 Hand 结果 |
|
||
|
||
### F-13 Browser 自动化(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F13-01 | normal | 打开网页 | URL 加载+截图返回 |
|
||
| F13-02 | normal | 截图操作 | 截图正确+展示 |
|
||
| F13-03 | normal | 点击操作 | 元素点击+页面变化 |
|
||
| F13-04 | normal | 填表操作 | 表单填写+提交 |
|
||
| F13-05 | normal | 搜索操作 | 搜索+结果返回 |
|
||
| F13-06 | boundary | 多步骤操作 | 步骤链正确执行 |
|
||
| F13-07 | error | 页面超时 | 超时提示+可重试 |
|
||
| F13-08 | error | WebDriver 未连接 | 明确提示+连接指引 |
|
||
| F13-09 | cross | 结果在聊天展示 | 格式正确+可交互 |
|
||
| F13-10 | cross | 结果+记忆存储 | 浏览器内容存入记忆 |
|
||
|
||
### F-14 记忆搜索(11 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F14-01 | normal | 搜索中文关键词 | FTS5+TF-IDF 结果正确 |
|
||
| F14-02 | normal | 搜索英文关键词 | 结果正确 |
|
||
| F14-03 | normal | 搜索代码片段 | 关键词优先策略 |
|
||
| F14-04 | boundary | 模糊搜索 | 部分匹配返回 |
|
||
| F14-05 | boundary | 无结果搜索 | 提示无结果 |
|
||
| F14-06 | boundary | 精确匹配 | 高分结果排前 |
|
||
| F14-07 | boundary | 排序验证 | TF-IDF 权重排序正确 |
|
||
| F14-08 | normal | 分类过滤 | Preference/Knowledge/Experience 分开 |
|
||
| F14-09 | cross | Agent 隔离 | 只返回当前 Agent 记忆 |
|
||
| F14-10 | cross | 分页/大量结果 | 不崩溃+可翻页 |
|
||
| F14-11 | cross | 搜索性能 | <500ms 返回 |
|
||
|
||
### F-15 记忆自动注入(11 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F15-01 | normal | 自动提取偏好 | "我喜欢深色主题"→偏好记忆 |
|
||
| F15-02 | normal | 自动提取知识 | "Python 3.12 新特性是..."→知识记忆 |
|
||
| F15-03 | normal | 自动提取经验 | "上次部署失败了因为..."→经验记忆 |
|
||
| F15-04 | boundary | Token 预算控制 | 不超过 system prompt 预算 |
|
||
| F15-05 | boundary | 注入格式正确 | 结构化上下文块格式 |
|
||
| F15-06 | boundary | 流式中注入 | 不影响当前流 |
|
||
| F15-07 | error | 注入溢出 | 超预算时截断+不崩溃 |
|
||
| F15-08 | cross | 去重 | 不重复注入相同记忆 |
|
||
| F15-09 | cross | Agent 隔离 | 各 Agent 独立注入 |
|
||
| F15-10 | cross | 跨会话注入 | 新会话→检索旧记忆→注入 |
|
||
| F15-11 | cross | 进化引擎联动 | 积累→模式检测→进化建议 |
|
||
|
||
### F-16 记忆手动管理(11 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F16-01 | normal | 查看统计 | 总数/分类数/容量 |
|
||
| F16-02 | normal | 导出全部 | JSON 格式+完整 |
|
||
| F16-03 | normal | 导入记忆 | 正确导入+去重 |
|
||
| F16-04 | normal | 删除单条 | 删除后列表更新 |
|
||
| F16-05 | normal | 删除全部 | 确认→清空+统计归零 |
|
||
| F16-06 | boundary | 查看详情 | 完整内容+元数据 |
|
||
| F16-07 | error | 编辑记忆 | 不崩溃 |
|
||
| F16-08 | cross | 批量操作 | 多选删除 |
|
||
| F16-09 | cross | 存储路径显示 | SQLite 路径正确 |
|
||
| F16-10 | cross | 容量限制 | 大量记忆不崩溃 |
|
||
| F16-11 | cross | 数据完整性 | 导出→删除→导入→一致 |
|
||
|
||
---
|
||
|
||
## Batch 4:SaaS + 管家(F-20~F-25,64 场景)
|
||
|
||
### F-20 订阅管理(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F20-01 | normal | 查看计划列表 | 显示所有计费计划 |
|
||
| F20-02 | normal | 查看当前订阅 | 计划名+到期日+用量 |
|
||
| F20-03 | normal | 升级计划 | Free→Pro→配额增加 |
|
||
| F20-04 | normal | 降级计划 | Pro→Free→配额减少 |
|
||
| F20-05 | boundary | 免费计划限制 | 超配额→提示升级 |
|
||
| F20-06 | boundary | 计划对比 | 功能差异清晰 |
|
||
| F20-07 | error | 订阅过期 | 提示续费+降级处理 |
|
||
| F20-08 | cross | 订阅+用量展示 | 用量数据一致 |
|
||
| F20-09 | cross | 订阅+模型限制 | 低级计划模型受限 |
|
||
| F20-10 | cross | Admin 管理订阅 | Admin 可修改用户订阅 |
|
||
|
||
### F-21 支付计费(12 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F21-01 | normal | 正常支付流程 | 选择计划→支付→确认 |
|
||
| F21-02 | normal | 支付宝模拟 | mock 路由→回调→成功 |
|
||
| F21-03 | normal | 微信模拟 | mock 路由→回调→成功 |
|
||
| F21-04 | boundary | 支付失败 | 回调失败→提示+可重试 |
|
||
| F21-05 | normal | 支付回调验证 | 签名/金额校验 |
|
||
| F21-06 | normal | 发票生成 | 自动生成+可查看 |
|
||
| F21-07 | normal | 发票 PDF | 下载 PDF 内容正确 |
|
||
| F21-08 | cross | 用量统计 | 请求/token 计数正确 |
|
||
| F21-09 | cross | 配额耗尽 | 超额→提示升级 |
|
||
| F21-10 | cross | 配额实时递增 | 每次请求+1 |
|
||
| F21-11 | cross | 聚合器数据 | aggregate_usage Worker 数据 |
|
||
| F21-12 | cross | 支付+订阅联动 | 支付成功→订阅状态更新 |
|
||
|
||
### F-22 Admin 后台(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F22-01 | normal | Dashboard 展示 | 统计数据正确+图表 |
|
||
| F22-02 | normal | 账号管理 CRUD | 列表/创建/编辑/禁用 |
|
||
| F22-03 | normal | 模型服务配置 | Provider/模型/Key CRUD |
|
||
| F22-04 | normal | API 密钥管理 | 加密存储+启停+删除 |
|
||
| F22-05 | normal | 知识库管理 | 分类/条目/搜索 |
|
||
| F22-06 | normal | 行业配置 | 4 内置行业+自定义 |
|
||
| F22-07 | normal | 计费管理 | 计划/订阅/用量 |
|
||
| F22-08 | normal | 角色权限 | RBAC+权限模板 |
|
||
| F22-09 | normal | 操作日志 | 查询+筛选+分页 |
|
||
| F22-10 | normal | Agent 模板 | 模板 CRUD+分配 |
|
||
|
||
### F-23 简洁/专业模式(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F23-01 | normal | 默认简洁模式 | 隐藏高级功能 |
|
||
| F23-02 | normal | 切换到专业模式 | 显示完整功能面板 |
|
||
| F23-03 | normal | 切回简洁模式 | 重新隐藏高级功能 |
|
||
| F23-04 | boundary | 简洁模式功能验证 | 只展示聊天+基础操作 |
|
||
| F23-05 | boundary | 专业模式功能验证 | 所有面板可用 |
|
||
| F23-06 | boundary | 聊天中切换 | 不影响当前对话 |
|
||
| F23-07 | cross | 切换+设置保留 | 模式切换后设置不变 |
|
||
| F23-08 | cross | 首次启动默认模式 | 简洁模式为默认 |
|
||
| F23-09 | cross | 模式+行业联动 | 行业配置在两种模式都生效 |
|
||
| F23-10 | cross | 模式+记忆展示 | 专业模式显示更多记忆信息 |
|
||
|
||
### F-24 行业配置(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F24-01 | normal | 选择医疗行业 | 关键词加载+管家面板更新 |
|
||
| F24-02 | normal | 选择教育行业 | 关键词加载+模板推荐 |
|
||
| F24-03 | normal | 选择电商行业 | 关键词加载 |
|
||
| F24-04 | normal | 自定义行业 | 关键词自定义+保存 |
|
||
| F24-05 | boundary | 行业关键词匹配 | ButlerRouter 检测行业关键词 |
|
||
| F24-06 | cross | 行业+管家联动 | 行业 prompt 注入 system prompt |
|
||
| F24-07 | cross | 行业+痛点联动 | 行业相关痛点分类 |
|
||
| F24-08 | cross | 行业+Pipeline 联动 | 推荐行业相关模板 |
|
||
| F24-09 | cross | 行业切换 | 切换行业→关键词更新 |
|
||
| F24-10 | cross | 行业+记忆 | 行业相关记忆优先检索 |
|
||
|
||
### F-25 痛点积累(12 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F25-01 | normal | 自动提取痛点 | 聊天中抱怨→痛点提取 |
|
||
| F25-02 | normal | 痛点列表展示 | 管家面板显示痛点 |
|
||
| F25-03 | normal | 痛点积累到阈值 | 多次抱怨→积累计数 |
|
||
| F25-04 | normal | 方案生成 | 阈值触发→生成解决建议 |
|
||
| F25-05 | normal | 方案状态更新 | 接受/拒绝/搁置 |
|
||
| F25-06 | boundary | 痛点+行业联动 | 行业分类痛点 |
|
||
| F25-07 | cross | 痛点跨会话 | 昨天痛点今天可见 |
|
||
| F25-08 | cross | 痛点+记忆 | 痛点存入记忆系统 |
|
||
| F25-09 | cross | 痛点去重 | 相同痛点不重复记录 |
|
||
| F25-10 | cross | 痛点+经验 | pain→solution→outcome 链 |
|
||
| F25-11 | cross | 痛点+冷启动 | 新用户首次痛点提取 |
|
||
| F25-12 | cross | 痛点+用户画像 | 画像反映痛点偏好 |
|
||
|
||
---
|
||
|
||
## Batch 5:Pipeline + 配置 + 安全(F-26~F-33,83 场景)
|
||
|
||
### F-26 选择模板(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F26-01 | normal | 列出所有模板 | 18 个 YAML 模板 |
|
||
| F26-02 | normal | 按行业过滤 | 医疗/教育/电商等 |
|
||
| F26-03 | normal | 模板详情 | 步骤+依赖+参数 |
|
||
| F26-04 | normal | 模板参数展示 | 输入/输出定义 |
|
||
| F26-05 | boundary | 模板预览 | YAML 解析正确 |
|
||
| F26-06 | boundary | 模板搜索 | 关键词匹配 |
|
||
| F26-07 | error | YAML 解析错误 | 不崩溃+提示 |
|
||
| F26-08 | cross | Pipeline 意图匹配 | 自然语言→模板推荐 |
|
||
| F26-09 | cross | 模板+行业联动 | 行业模板优先 |
|
||
| F26-10 | cross | 模板收藏 | 收藏+列表 |
|
||
|
||
### F-27 参数配置(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F27-01 | normal | 正常配置参数 | 保存成功 |
|
||
| F27-02 | normal | 必填项校验 | 空必填→提示 |
|
||
| F27-03 | normal | 参数类型校验 | 数字/字符串/枚举 |
|
||
| F27-04 | boundary | 默认值填充 | 预填默认值 |
|
||
| F27-05 | boundary | 参数说明 | 每个参数有说明 |
|
||
| F27-06 | error | 配置保存失败 | 不丢原配置 |
|
||
| F27-07 | cross | 配置+预览 | 预览显示参数效果 |
|
||
| F27-08 | cross | 配置重置 | 恢复默认 |
|
||
| F27-09 | cross | 配置+验证 | 提交前验证 |
|
||
| F27-10 | cross | 配置导入导出 | JSON/YAML 导出+导入 |
|
||
|
||
### F-28 执行工作流(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F28-01 | normal | 正常执行 | DAG 排序+逐步执行+完成 |
|
||
| F28-02 | normal | DAG 排序正确 | 依赖关系满足 |
|
||
| F28-03 | normal | 并行步骤 | 无依赖步骤并行 |
|
||
| F28-04 | error | 步骤失败 | 失败步骤+后续处理 |
|
||
| F28-05 | error | 步骤超时 | 超时处理+可重试 |
|
||
| F28-06 | normal | 取消执行 | 取消+状态更新 |
|
||
| F28-07 | normal | 执行进度 | 实时进度展示 |
|
||
| F28-08 | normal | 执行结果 | 结果数据完整 |
|
||
| F28-09 | cross | 执行+Hand 触发 | 步骤触发 Hand |
|
||
| F28-10 | cross | 执行+记忆存储 | 结果存入记忆 |
|
||
|
||
### F-29 模型设置(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F29-01 | normal | 配置 API Key | 8 Provider 配置 |
|
||
| F29-02 | normal | 选择 Provider | 下拉选择 |
|
||
| F29-03 | normal | 测试连接 | 验证 Key 有效 |
|
||
| F29-04 | normal | 模型参数 | 温度/max_tokens 等 |
|
||
| F29-05 | boundary | 多 Provider | 同时配置多个 |
|
||
| F29-06 | normal | 配置持久化 | 重启后保留 |
|
||
| F29-07 | normal | 配置热重载 | 不需重启生效 |
|
||
| F29-08 | cross | 配置+降级 | Provider 不可用→降级 |
|
||
| F29-09 | cross | 配置校验 | 无效 Key→提示 |
|
||
| F29-10 | cross | 配置导入导出 | TOML 导出+导入 |
|
||
|
||
### F-30 工作区配置(11 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F30-01 | normal | 基本配置 | 工作区路径等 |
|
||
| F30-02 | normal | 环境变量 | ${VAR} 插值 |
|
||
| F30-03 | normal | 数据目录 | 路径设置 |
|
||
| F30-04 | normal | 日志级别 | debug/info/warn/error |
|
||
| F30-05 | boundary | 配置文件路径 | 正确读写 |
|
||
| F30-06 | error | 配置写入失败 | 不丢原配置 |
|
||
| F30-07 | cross | TOML 格式 | 格式一致 |
|
||
| F30-08 | cross | 特殊字符 | 路径含空格/中文 |
|
||
| F30-09 | cross | 配置同步 | 多设备同步 |
|
||
| F30-10 | cross | 配置重置 | 恢复默认 |
|
||
| F30-11 | cross | 配置+环境变量插值 | ${VAR_NAME} 解析 |
|
||
|
||
### F-31 数据隐私(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F31-01 | normal | 清除对话历史 | 确认→清除+统计归零 |
|
||
| F31-02 | normal | 导出数据 | JSON 格式+完整 |
|
||
| F31-03 | normal | 记忆管理 | 查看/删除/导出 |
|
||
| F31-04 | boundary | 删除确认 | 二次确认弹窗 |
|
||
| F31-05 | normal | 删除持久化验证 | SQLite/IndexedDB 数据清除 |
|
||
| F31-06 | normal | 导出格式 | 格式正确+可解析 |
|
||
| F31-07 | cross | 导出完整性 | 消息+记忆+配置完整 |
|
||
| F31-08 | cross | 清除+Agent 联动 | 清除指定 Agent 数据 |
|
||
| F31-09 | cross | 清除+记忆联动 | 清除对话+保留/清除记忆 |
|
||
| F31-10 | cross | 数据统计 | 清除后统计更新 |
|
||
|
||
### F-32 JWT 认证(12 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F32-01 | normal | 获取 JWT | 登录→token 存储 |
|
||
| F32-02 | normal | JWT 过期处理 | 自动刷新或提示重新登录 |
|
||
| F32-03 | normal | JWT 刷新 | 新 token+旧 token 失效 |
|
||
| F32-04 | normal | pwv 失效机制 | 改密码→旧 JWT 全部失效 |
|
||
| F32-05 | boundary | cookie 双通道 | Tauri keyring + HttpOnly cookie |
|
||
| F32-06 | normal | Keyring 存储 | Win DPAPI 存储 |
|
||
| F32-07 | normal | refresh token 单次使用 | 二次使用被拒 |
|
||
| F32-08 | normal | refresh token 撤销 | logout→DB 中标记 |
|
||
| F32-09 | boundary | 并发 JWT 验证 | 不竞态 |
|
||
| F32-10 | cross | JWT+角色权限 | Claims.role 正确 |
|
||
| F32-11 | cross | JWT+限流 | 超限返回 429 |
|
||
| F32-12 | cross | JWT+多设备 | 多设备 token 独立 |
|
||
|
||
### F-33 TOTP 2FA(10 场景)
|
||
|
||
| ID | 类别 | 场景 | 验证点 |
|
||
|----|------|------|--------|
|
||
| F33-01 | normal | 设置 2FA | QR 码生成+密钥加密存储 |
|
||
| F33-02 | normal | QR 码生成 | 可扫描+格式正确 |
|
||
| F33-03 | normal | 验证码验证 | 正确 TOTP→通过 |
|
||
| F33-04 | normal | 禁用 2FA | 需密码确认→禁用 |
|
||
| F33-05 | boundary | 错误验证码 | 提示错误 |
|
||
| F33-06 | boundary | 过期验证码 | 提示过期 |
|
||
| F33-07 | cross | 2FA+登录流程 | 密码→TOTP→进入 |
|
||
| F33-08 | cross | 2FA+密码确认 | 禁用需密码 |
|
||
| F33-09 | cross | 2FA 密钥加密 | AES-256-GCM 加密 |
|
||
| F33-10 | cross | 2FA+多设备 | 各设备独立密钥 |
|
||
|
||
---
|
||
|
||
## 3 角色冒烟测试
|
||
|
||
### 角色 1:新用户"小王"(首次使用)
|
||
|
||
| 步骤 | 操作 | 验证点 |
|
||
|------|------|--------|
|
||
| 1 | 打开应用→看到冷启动引导 | 引导消息出现+4阶段流程 |
|
||
| 2 | 注册账号→登录 | token 存储+进入简洁模式 |
|
||
| 3 | 第一次发消息"你好" | 流式响应正常 |
|
||
| 4 | 切换到专业模式 | 功能面板展示 |
|
||
| 5 | 创建新 Agent→和它对话 | Agent 独立会话 |
|
||
| 6 | 设置>查看记忆 | 确认自动提取了偏好 |
|
||
| 7 | 第二天打开(模拟) | 跨会话记忆注入 |
|
||
| 8 | 触发一个 Hand | 审批流程正常 |
|
||
|
||
覆盖: F-17, F-18, F-23, F-01, F-02, F-06, F-14, F-04, F-11
|
||
|
||
### 角色 2:医院行政"李主任"(管家模式)
|
||
|
||
| 步骤 | 操作 | 验证点 |
|
||
|------|------|--------|
|
||
| 1 | 登录→选择"医疗"行业 | 行业关键词加载 |
|
||
| 2 | "帮我整理本周会议纪要" | ButlerRouter 医疗匹配 |
|
||
| 3 | "最近排班总出问题" | 痛点提取触发 |
|
||
| 4 | 连续几天聊排班 | 痛点积累→方案建议 |
|
||
| 5 | "上个月讨论的排班方案" | 跨会话记忆检索 |
|
||
| 6 | 查看管家面板 | 洞察/方案/记忆展示正确 |
|
||
| 7 | 专业模式→选 Pipeline 模板 | 医疗模板推荐 |
|
||
| 8 | 执行 Pipeline | DAG 执行+结果 |
|
||
|
||
覆盖: F-01, F-02, F-23, F-24, F-25, F-14, F-15, F-26, F-28
|
||
|
||
### 角色 3:Admin 运维"张工"(后台管理)
|
||
|
||
| 步骤 | 操作 | 验证点 |
|
||
|------|------|--------|
|
||
| 1 | Admin V2 登录 | Dashboard 统计正确 |
|
||
| 2 | 检查模型服务 | Provider+Key 状态 |
|
||
| 3 | 检查账号管理 | 用户列表+CRUD |
|
||
| 4 | 检查知识库 | CRUD+搜索+pgvector |
|
||
| 5 | 检查行业配置 | 4 内置行业 |
|
||
| 6 | 检查计费 | 订阅+用量+支付 |
|
||
| 7 | 检查角色权限 | RBAC 验证 |
|
||
| 8 | 切回桌面端 | Admin 操作已生效 |
|
||
|
||
覆盖: F-22, F-20, F-21, F-29, F-32, F-33
|
||
|
||
---
|
||
|
||
## 执行计划
|
||
|
||
| 阶段 | 时长 | 内容 |
|
||
|------|------|------|
|
||
| 0 | 15min | 环境检查:PostgreSQL + SaaS + 桌面端 + 连通验证 |
|
||
| 1 | 2-3h | Batch 1 核心聊天(52 场景) |
|
||
| 2 | 2-3h | Batch 2 Agent+认证(72 场景) |
|
||
| 3 | 2-3h | Batch 3 Hands+记忆(74 场景) |
|
||
| 4 | 2-3h | Batch 4 SaaS+管家(64 场景) |
|
||
| 5 | 2-3h | Batch 5 Pipeline+配置+安全(83 场景) |
|
||
| 6 | 2h | 复合转换测试(跨 Batch 交互) |
|
||
| 7 | 1.5h | 3 角色冒烟测试 |
|
||
| 8 | 30min | 报告整理+证据归档 |
|
||
|
||
**总计:~345 个测试场景**
|
||
|
||
每个场景执行流程:
|
||
1. 截图当前状态(before)
|
||
2. 执行操作(click/type/wait)
|
||
3. 等待响应(wait_for + 超时保护)
|
||
4. 验证结果(query_page + execute_js)
|
||
5. 截图最终状态(after)
|
||
6. 记录结果(PASS/FAIL/PARTIAL + 证据路径)
|
||
|
||
## 结果报告
|
||
|
||
输出:`docs/test-evidence/2026-04-XX/FEATURE_CHAIN_EXHAUSTIVE_TEST.md`
|
||
|
||
报告格式:
|
||
- 转换矩阵报告(状态 × 状态 网格)
|
||
- 每条链路 PASS/FAIL/PARTIAL 统计
|
||
- Bug 密度热力图(按状态)
|
||
- 截图证据目录(按场景 ID 命名)
|