Model selector was cosmetic-only in desktop mode: chatStream never passes model param to backend. Hiding prevents user confusion and 404 errors when selecting models not in SaaS token pool. Also adds E2E test report covering 168 messages, 4 bugs found (P0 fixed).
4.3 KiB
ZCLAW 发布前 E2E 测试报告
日期: 2026-04-09 测试方式: Chrome DevTools MCP + Tauri MCP 端到端自动化 测试目标: 模拟真实用户操作,验证核心功能稳定性
测试概览
| 指标 | 值 |
|---|---|
| 总消息数 | 168 条 |
| 用户消息 | 84 条 |
| AI 回复 | 84 条(19 条真实内容 + 65 条空响应/错误) |
| 测试时长 | ~2 小时 |
| 测试模型 | GLM-4.7(前18轮), deepseek-chat / glm-4-flash(后续,错误) |
测试场景
场景 1: 随机话题对话(16 轮)
- 状态: 部分成功
- 问题: GLM-4.7 响应慢(~67s/轮),部分超时
- 发现: 历史消息中的 "Sending..." 标签导致完成检测误判
场景 2: 教育行业连续对话(89 轮脚本,模拟小学班主任王老师)
- 6 个阶段: 身份建立 → 教学深化 → 班级管理 → 期末收尾 → 新学期展望 → 深度验证
- 前 18 轮(GLM-4.7): 全部成功,对话质量极高
- 后 65 轮: 全部失败(模型错误导致空回复)
发现的 BUG
P0: 模型选择器桌面端误导用户
状态: 已修复
问题: Tauri 桌面端的模型选择器让用户以为可以切换模型,但实际模型由 SaaS Token 池决定,前端选择不传后端。
影响: 用户选择 "GLM-4.7" 但实际可能调用 "glm-4-flash"(不存在),导致 404 错误和空回复。
根因: StreamChatRequest(Rust)和 chatStream(TS)均无 model 参数。模型由后端 agent 配置决定。
修复: 在 ChatArea.tsx 中对 Tauri 运行时隐藏模型选择器。
文件: desktop/src/components/ChatArea.tsx
P1: API 错误时 assistant 消息内容为空
问题: 当 LLM 返回错误(404/429)时,assistant 消息的 content 为空字符串,错误信息仅显示在 UI 的错误气泡中,不存入 Store。
影响:
- 对话历史中的空消息无法追溯错误原因
- 记忆系统可能索引空内容
- 侧边栏消息预览显示为空白
建议: 将错误信息存入 message.content 或 message.error 字段。
P2: 429 Rate Limit 未优雅处理
问题: DeepSeek API 60 RPM 限流触发后,前端直接显示错误,没有重试/退避机制。
影响: 自动化测试中高频发送消息时容易触发限流。
建议: 前端实现指数退避重试(2s → 4s → 8s),最多 3 次。
P3: 错误消息的"重试"按钮堆叠
问题: 连续多轮失败后,UI 中堆叠了 7+ 个"重试"按钮(见截图),影响可读性。
建议: 错误消息应可折叠,或只保留最后一个错误的"重试"按钮。
对话质量评估(前 18 轮 GLM-4.7)
上下文记忆测试
| 测试项 | 结果 |
|---|---|
| 记住用户身份(王老师) | PASS |
| 记住班级信息(38人、三年级2班) | PASS |
| 记住学生名字(张小明、刘小花) | PASS |
| 引用之前讨论的内容 | PASS |
| 教学建议的专业性 | PASS |
| 情感支持和沟通技巧 | PASS |
典型回复示例
第 8 轮(注意力评估建议): AI 正确识别了"家校表现一致"这一关键信号,建议"温和、专业、不贴标签"地沟通,并提供了具体话术模板。
第 17 轮(公开课选课文): AI 综合考虑了班级中张小明(需要动觉学习)和刘小花(需要信心建立)的情况,推荐了三个选项并分析利弊。
内存和性能
| 指标 | 值 | 评价 |
|---|---|---|
| 初始内存 | 30 MB | 正常 |
| 40 条消息时 | 32 MB | 稳定 |
| 160 条消息时 | 31-35 MB | 无泄漏 |
| GC 后 | 回落到 31 MB | 正常 |
| 平均 AI 响应时间 (GLM-4.7) | 67s | 偏慢,但非 BUG |
| 平均 AI 响应时间 (deepseek) | 1.3s | API 报错,非真实响应 |
修复记录
| 修改 | 文件 | 说明 |
|---|---|---|
| 隐藏桌面端模型选择器 | desktop/src/components/ChatArea.tsx |
isTauriRuntime() 条件渲染 |
未修复项(后续跟进)
- P1: API 错误时 assistant 消息内容为空 — 需要修改 streamStore 的错误处理
- P2: 429 Rate Limit 重试机制 — 需要在 chatStream 中实现退避
- P3: 错误消息堆叠 — UI 优化
测试环境
- OS: Windows 11 Pro (10.0.26200)
- 显示器: 5120x2880 @ 2.5x scale
- 应用版本: ZCLAW 0.1.0
- 后端: Tauri 2.x + Rust kernel
- 运行时模型: SaaS Token 池路由