Files
zclaw_openfang/docs/superpowers/specs/2026-04-08-pre-release-functional-test-design.md

20 KiB
Raw Permalink Blame History

ZCLAW 发布前功能测试方案

日期: 2026-04-08 状态: Draft 基于: 两轮头脑风暴产品愿景 + 25 轮 tauri-mcp 测试结果 目标: 全功能可用验证 — 所有 UI 入口点接通真实后端,允许有 bug 但不能 crash


Context

ZCLAW 经过 12 轮审计修复1048 个自动化测试通过25 轮 tauri-mcp 实景测试已完成核心路径验证SSE、多轮对话、话题切换。但在发布前仍有

  1. 未验证的能力Pipeline 实际执行、Hand 触发、Skill 安装/卸载、Agent 完整创建流程、模型切换
  2. 遗留问题6 个 P2/P3Token 计数为 0、Kimi ENTITY bug、配额 429、对话列表冗余等
  3. 产品愿景验证:两轮头脑风暴确立了"成长性问题解决者"定位,需要用真实行业场景验证

本方案旨在通过多角色真实 LLM 交互测试,全面验证系统发布就绪度。


0. 范围澄清

0.1 与 04-05 预发布审计的关系

本方案补充而非替代 2026-04-05-pre-launch-functional-audit-design.md。04-05 方案是模块级功能审计12 模块 T1-T12本方案是角色驱动的端到端集成测试。

04-05 模块 本方案覆盖 状态
T1 Hands 角色 A (Researcher/Collector/Browser) 本方案
T2 Intelligence 角色 B (记忆+反思) 本方案
T3 Chat/SSE 角色 A+B+C 本方案
T4 Agent 角色 B (创建/切换/人格) 本方案
T5 Skills 角色 B (执行+结果) 本方案
T6 Pipeline 角色 A (模板+执行) 本方案
T7 Browser Hand 角色 A (导航+截图) 本方案
T8 Memory 角色 B (VikingPanel) 本方案
T9 Admin V2 不在本方案范围 已有 61 测试覆盖
T10 Security 角色 B (Audit 日志) 部分
T11 SaaS API 角色 B (配额+计费) 部分
T12 E2E 集成 三角色本身就是 E2E 本方案

0.2 前序测试基线

开始本方案前,确认以下自动化测试基线通过:

# Rust 全量(排除 SaaS
cargo test --workspace --exclude zclaw-saas  # 580 tests passing

# SaaS 集成(需 PostgreSQL
cargo test -p zclaw-saas -- --test-threads=1  # 138 tests passing

# 前端
cd desktop && pnpm vitest run  # 330 passed, 1 skipped

# 类型检查
pnpm tsc --noEmit  # 0 errors

0.3 Phase 0环境就绪检查

在 Phase 1 开始前,确认以下环境就绪:

# 检查项 验证方法 通过标准
0.1 Tauri 开发服务 pnpm start:dev 应用窗口正常打开,无白屏
0.2 tauri-mcp 连接 Chrome DevTools MCP 连接 take_snapshot 返回页面结构
0.3 SaaS 后端 Admin 页面可访问 Dashboard 正常加载
0.4 LLM API 冒烟测试 三模型各发一条消息 Kimi/GLM/DeepSeek 均有响应
0.5 自动化基线 运行 §0.2 命令 全部通过

1. 测试策略

1.1 方案选择:角色驱动 + 功能矩阵混合式

以三个不同行业角色为主线驱动测试,同时用功能矩阵确保 100% UI 入口点覆盖:

Phase 1: 基础连接+认证(无角色,通用验证)
Phase 2: 角色 A — 玩具厂老板 + Kimi
Phase 3: 角色 B — 医院行政 + GLM-4-Flash
Phase 4: 角色 C — 高中教师 + DeepSeek-V3
Phase 5: 功能矩阵交叉验证checklist 补漏)
Phase 6: 修复验证 + 发布评估

1.2 测试方式

  • 工具: tauri-mcp / tauri-devtools 真实 LLM 交互
  • 执行方式: 边测边修(发现问题当场修复或记录后当轮修复)
  • 预计总轮次: 60-72 轮Phase 0: ~5, Phase 1: ~10, Phase 2: 18-22, Phase 3: 18-22, Phase 4: 15-18, Phase 5-6: ~5

1.3 配额预算

角色 预计 API 调用 含 Hands/Skills 开销 总计
Phase 0-1 ~15 0 15
角色 A (Kimi) ~22 Researcher(3) + Collector(2) + Browser(2) + Pipeline(3) 32
角色 B (GLM) ~22 Skills(2) + 记忆(1) 25
角色 C (DeepSeek) ~18 Quiz(2) + Slideshow(1) + TTS(1) 22
Phase 5-6 ~5 0 5
总计 ~99

配额策略:

  • 使用付费套餐(非 free plan 100 次限制),或 Admin 后台将测试账号配额提升至 200 次
  • 准备 2 个测试账号,一个主用(配额 200+),一个备用
  • 如果主账号配额耗尽,切换到备用账号继续测试
  • 每个 Phase 结束后检查剩余配额,低于 20 次时切换账号

1.4 测试数据隔离

  • 三个角色使用同一个 SaaS 账号不同的 Agent 分身,状态共享
  • 角色 B 的记忆测试可以观察到角色 A 的对话(验证跨 Agent 记忆隔离)
  • 配额在三个角色间共享,按角色 A → B → C 的顺序消耗
  • 每个 Phase 开始前记录当前对话数和配额余量

2. 测试角色与功能分工

2.1 三个测试角色

角色 身份 LLM 模型 测试重点 预计轮次
A. 玩具厂老板 汕头澄海,盲盒+注塑 Kimi (kimi-for-coding) 核心聊天、HandsResearcher/Collector/Browser、Pipeline 行业模板、配额管理 18-22 轮
B. 医院行政 某三甲医院行政主任 GLM-4-Flash Agent 多分身管理、Skills 调用、记忆系统、SaaS 配额/计费、模型切换 18-22 轮
C. 高中教师 高二语文/班主任 DeepSeek-V3 多轮对话深度、Classroom/Quiz 生成、Slideshow、Speech TTS、对话搜索 15-18 轮

2.2 功能覆盖矩阵

B = 主测,X = 交叉验证

功能域 角色 A 角色 B 角色 C
SaaS 登录/认证 B X X
SSE 流式响应 B X X
多轮对话 B X B
话题切换 B X X
取消流式 X X B
Agent 创建/切换 X B X
Agent 人格编辑 X B X
记忆提取/回顾 X B X
Skills 执行 X B X
Hands 触发 B X X
Pipeline 执行 B X X
Classroom/Quiz X X B
Slideshow X X B
Speech TTS X X B
Browser Hand B X X
模型切换 X B X
对话搜索 X X B
配额/计费 X B X
Thinking 渲染 B X X
离线队列 X B X
侧边栏 Tab 切换 B B B

3. 六阶段执行流程

Phase 1基础连接与认证~10 轮)

目标: 确保所有连接模式可用,不被底层问题干扰后续角色测试

# 测试项 验证方法 Pass 标准
1.1 SaaS 登录 通过 tauri-mcp 发送消息 成功获取 session + 模型列表加载
1.2 会话恢复 重启 Tauri 应用后检查 自动恢复登录态,无需重新认证
1.3 SSE 流式响应 发送简单问题 thinking + content 双流正常渲染
1.4 取消流式 发送长问题后点击取消 状态正确恢复,可立即发新消息
1.5 侧边栏 Tab 切换 逐个点击 Chat/Agent/Memory/Automation/Skills 每个 Tab 内容区正确更新,无白屏
1.6 对话列表 创建新对话 → 切换 → 搜索关键词 CRUD 完整,搜索结果准确
1.7 模型列表加载 打开模型选择器 显示当前 SaaS 账户可用模型
1.8 遗留问题重现 逐个检查上次 6 个 P2/P3 确认已修复/仍存在/部分改善

Pass 条件: 1.1-1.5 全部通过才能进入 Phase 2。1.6-1.8 允许有问题但不阻塞。


Phase 2角色 A — 玩具厂老板 + Kimi18-22 轮)

场景: 汕头澄海玩具厂老板,想开发盲盒产品线,需要市场调研、供应商联系、展会信息。

# 测试项 场景动作 验证点
A1 多轮行业对话 "我想做盲盒,市面上哪些品牌卖得好?" → "这些材质有什么区别?" → "注塑成本怎么算?" 上下文连续、行业知识准确、无信息丢失
A2 话题切换 盲盒 → 供应商采购 → 展会 → 回到盲盒话题 回溯准确,不丢失之前的讨论细节
A3 Hands: Researcher "帮我调研一下 2026 年盲盒市场趋势" 工具调用成功,返回结构化研究报告
A4 Hands: Collector "整理一份注塑机供应商对比表,包含价格和产能" 输出结构化表格,格式正确
A5 Pipeline 执行 触发"市场调研"行业模板 Pipeline 步骤逐步执行,状态跟踪正确,结果可查看
A6 Thinking 渲染 观察含 thinking 的回复 折叠/展开正常thinking 内容完整,不影响 content
A7 长消息处理 "详细列出从设计到量产的完整开模流程" 完整输出,不被截断,段落格式正确
A8 中英文混合 "帮我写一封给 Hasbro 的英文合作邮件" → 后续用中文讨论 语言切换自然,上下文不混乱
A9 数学计算 "月产 5 万个盲盒,每个成本 3.5 元,利润率 40%,月利润多少?" 计算正确70,000 元)
A10 配额边界 持续使用观察配额消耗 接近上限时有友好提示429 响应处理正确
A11 Browser Hand "打开 1688 搜一下注塑机价格" 若 Fantoccini 已安装:触发自动化 + Approval 弹窗;若未安装:标注 KNOWN跳过测试
A12 Kimi ENTITY bug 切换到 Flash 模式测试 检查 __ENTITY_N__ 是否仍出现,评估影响
A13 侧边栏导航 在 Chat ↔ Hands ↔ Pipeline 间频繁切换 内容区更新正确,无白屏或残留

Pass 条件: 核心项 A1-A5 全部通过。A6-A10 为扩展项,允许 <= 2 项失败。A11 Browser Hand 若 Fantoccini 未安装则标注为 KNOWN不计入 Pass/Fail。


Phase 3角色 B — 医院行政 + GLM-4-Flash18-22 轮)

场景: 某三甲医院行政主任,管理多个科室文档,需要 AI 助手处理不同科室事务并记住各科室特殊要求。

# 测试项 场景动作 验证点
B1 Agent 创建 创建"内科助手"、"外科助手"两个分身 Agent 表单完整,保存成功,出现在列表
B2 Agent 人格编辑 给内科助手设置专业人格 + 科室术语 人格 prompt 生效,后续对话体现专业术语
B3 Agent 切换 在两个分身间切换对话 上下文独立不串台,各自记住自己的话题
B4 记忆积累 多次提及"我们医院 ICU 床位 30 张" 后续对话 AI 记住并引用这个事实
B5 记忆回顾 打开 VikingPanel 查看记忆列表 显示已积累的记忆条目,可搜索
B6 Skills 执行 触发文档处理 skill Skill 正确执行并返回结果
B7 模型切换 从 GLM 切到 DeepSeek → 再切回 GLM 切换立即生效,对话不中断,模型特性可感知
B8 SaaS 配额查看 打开账户/计费面板 用量正确显示(验证 Token 计数修复)
B9 离线测试 断网 → 发消息 → 恢复网络 离线队列缓存消息,恢复后自动发送
B10 搜索对话 搜索"ICU"关键词 正确过滤出包含 ICU 的对话
B11 Thinking 模式 开启/关闭 Thinking 状态正确切换,渲染正常
B12 反思系统 多轮对话后检查反思日志 reflection 自动触发并记录,日志可查看
B13 安全面板 打开 Audit 日志 显示操作记录,内容完整

Pass 条件: 核心项 B1-B7 全部通过。B8-B13 为扩展项,允许 <= 2 项失败。B9 离线测试允许有已知限制。


Phase 4角色 C — 高中教师 + DeepSeek-V315-18 轮)

场景: 高二语文老师兼班主任,需要生成测验、制作课件、用语音朗读课文。

# 测试项 场景动作 验证点
C1 深度多轮对话 讨论文言文教学方法 15+ 轮 上下文持续积累无丢失,后续引用前文准确
C2 Quiz 生成 "生成一套《赤壁赋》理解测验10 道选择题" 题目生成完整,格式正确,答案合理
C3 Slideshow "帮我做一页《赤壁赋》赏析幻灯片" 幻灯片生成并预览,可翻页
C4 Speech TTS "朗读《赤壁赋》第一段" 语音合成播放正常,中文发音准确
C5 Quiz 评估 模拟学生答题,系统评分 评分逻辑正确,反馈有针对性
C6 取消流式 在长文生成过程中取消 干净取消UI 状态恢复,可立即继续操作
C7 对话搜索 搜索"赤壁赋" 正确匹配相关对话
C8 新建对话 创建新对话讨论班会方案 独立上下文,不与之前的讨论混淆
C9 跨话题记忆 "上次我们讨论的教学方法叫什么?" 记忆回溯准确,能引用之前对话内容
C10 长文本输出 "写一份完整的家长会发言稿800 字" 完整输出,格式正确,不被截断
C11 DeepSeek 稳定性 持续使用 15+ 轮 无超时、无 crash、无异常中断
C12 Classroom 相关 Classroom 面板查看生成结果 生成历史可查看,可复用
C13 Whiteboard "在白板上画一个文言文知识图谱" 白板渲染正常,可导出(允许标注 demo
C14 记忆飞轮验证 不提关键词,问"我们医院有多少张病床?" 如果角色 B 的记忆跨 Agent 可见则验证飞轮;否则验证本角色记忆

Pass 条件: 核心项 C1-C6 全部通过。C7-C12 为扩展项,允许 <= 2 项失败。C4 TTS 允许有浏览器兼容性限制。


Phase 5功能矩阵交叉验证checklist

逐项检查每个 UI 入口点,确保至少被一个角色覆盖。对照 Phase 2-4 的结果,标记未覆盖项并补充测试。

类别 UI 入口点 覆盖角色 状态
侧边栏 Chat Tab Phase 1
侧边栏 Agent Tab B
侧边栏 Memory Tab B
侧边栏 Automation Tab A
侧边栏 Skills Tab B
聊天区 发送消息 A+B+C
聊天区 取消流式 C
聊天区 Thinking 展开/折叠 A
聊天区 代码块渲染 A (中英文)
聊天区 消息搜索 C
聊天区 对话切换 A+B
聊天区 新建对话 C
Agent 创建 Agent B
Agent 编辑人格 B
Agent 切换 Agent B
Agent 删除 Agent B (必测 — 安全相关)
Hands 列表展示 A
Hands 触发执行 A (Researcher/Collector)
Hands Approval 弹窗 A (Browser)
Hands 执行日志 A
Skills 列表展示 B
Skills 执行 Skill B
Skills 结果展示 B
Pipeline 模板列表 A
Pipeline 执行 Pipeline A
Pipeline 进度跟踪 A
Pipeline 结果查看 A
Memory VikingPanel B
Memory 记忆列表 B
Memory 记忆搜索 B
Browser 创建会话 A
Browser 导航+截图 A
Classroom Quiz 生成 C
Classroom Quiz 评估 C
Slideshow 生成+预览 C
Speech TTS 播放 C
Settings 连接配置 B
Settings 模型选择 B
Settings Autonomy 级别 B (必测 — 安全相关)
SaaS 登录/登出 A+B
SaaS 账户信息 B
SaaS 配额/计费 B
自动化 Triggers A
自动化 Scheduled Tasks A (如时间允许)
安全 Audit 日志 B
安全 Approval 队列 A (Browser)

Phase 6修复验证 + 发布评估

流程:

  1. 汇总 Phase 1-5 所有发现的问题
  2. 按缺陷分级处理:
    • P0: 已在测试过程中立即修复
    • P1: Phase 6 集中修复
    • P2/P3: 记录到发布说明的 known issues
  3. 修复后回归验证(只测修复点相关的功能)
  4. 生成发布评估报告

4. 缺陷分级标准

级别 定义 处理方式 例子
P0 - Crash 应用崩溃、白屏、数据丢失 立即停止测试,当场修复 窗口崩溃、IndexedDB 损坏
P1 - 阻塞 核心功能不可用,无法继续测试 当轮修复后重新验证 SSE 无响应、登录失败、Agent 无法切换
P2 - 功能缺陷 功能可用但结果不正确或不完整 记录Phase 6 统一修复 Token 计数为 0、Pipeline 步骤状态不更新
P3 - 体验问题 功能可用但体验不佳 记录,发布后迭代 对话列表冗余、动画卡顿
KNOWN 已知的外部限制 标注为 known limitation Kimi __ENTITY_N__、模型 API 超时

5. 发布标准Go/No-Go

指标 Go可发布 No-Go不可发布
P0 缺陷 0 >= 1
P1 缺陷 <= 2 且有 workaround >= 3 或无 workaround
核心路径 聊天+Agent+认证 100% 通过 任一核心路径未覆盖
功能矩阵覆盖 >= 90% UI 入口点已测 < 80%
稳定性 单次 50+ 消息无 crash 50 消息内 crash
多模型验证 >= 2 个模型完整通过 仅 1 个模型通过
React 稳定性 无 Maximum update depth 异常 出现无限渲染

6. 测试报告模板

每个角色测试完成后生成一份结构化报告:

## 角色 X 测试报告

### 基本信息
- 角色: [身份描述]
- 模型: [LLM Provider + Model]
- 执行日期: YYYY-MM-DD
- 轮次: X/Y (实际/计划)
- ZCLAW 版本: [git commit hash 前 8 位]
- Tauri 版本: [从 package.json 获取]
- OS: [Windows 11 / macOS / Linux]
- WebView2 版本: [Edge WebView2 Runtime 版本]
- LLM 套餐: [free / paid]

### 结果汇总
- Pass: X 项
- Fail: Y 项 (P0: _ P1: _ P2: _ P3: _ KNOWN: _)

### 新发现缺陷
| ID | 级别 | 测试项 | 描述 | 复现步骤 | 状态 |
|----|------|--------|------|----------|------|

### 已修复缺陷
| ID | 原级别 | 描述 | 修复方式 | 验证结果 |
|----|--------|------|----------|----------|

### 已知限制
| 描述 | 影响范围 | 建议处理 |
|------|----------|----------|

### 功能覆盖
- 已测 UI 入口点: [列表]
- 未测 UI 入口点: [列表] + 原因

7. 关键文件参考

用途 文件路径
Tauri 命令注册 desktop/src-tauri/src/lib.rs
前端 Store desktop/src/store/ (19 文件)
Gateway Client desktop/src/lib/gateway-client.ts
SaaS Client desktop/src/lib/saas-client.ts
Kernel Client desktop/src/lib/kernel-client.ts
WebMCP 工具 desktop/src/lib/webmcp-tools.ts
Hands 配置 hands/ (9 HAND.toml)
技能定义 skills/ (75 SKILL.md)
Pipeline 模板 crates/zclaw-pipeline/templates/ (17 YAML)
组件目录 desktop/src/components/ (~53 组件)
系统真实状态 docs/TRUTH.md

8. 风险与缓解

风险 概率 影响 缓解措施
模型 API 不稳定 测试轮次浪费 准备备用模型Kimi 挂了切 GLM
配额提前耗尽 无法完成测试 Admin 预充值、准备多个测试账号
Kimi ENTITY bug 角色A数据被污染 测到即标注,不影响其他角色
底层 P0 阻塞 全部测试暂停 Phase 1 先验证基础,尽早暴露
Browser Hand 失败 11 个 browser 命令不可测 若 Fantoccini 未安装则标注 KNOWN 并跳过不阻塞发布若已安装则只测试简单导航打开URL+截图),不测试复杂表单填写