Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9.3 KiB
9.3 KiB
SOC 端到端功能测试报告
测试环境
- 开发机: 192.168.30.30
- 后端: http://localhost:2024 (LangGraph Server)
- 前端: http://localhost:5173 (Vite dev server)
- 测试时间: 2026-04-11 (第三轮 -- 产品验收测试)
- 测试范围: 全端点功能测试 + 产品验收标准检查
1. 端点测试结果
| # | 端点 / 功能 | 方法 | 状态 | 结果 |
|---|---|---|---|---|
| 1 | /ok 健康检查 |
GET | 200 | PASS - 返回 {"ok":true} |
| 2 | /info 服务信息 |
GET | 200 | PASS - 返回 {"flags":{"assistants":true,"crons":false}} |
| 3 | 前端 localhost:5173 |
GET | 200 | PASS - 返回 Vite dev HTML |
| 4 | /threads 创建 Thread |
POST | 200 | PASS - 返回 thread_id |
| 5 | Vite Proxy /threads |
POST | 200 | PASS - 前端端口代理到后端 API |
| 6 | Supervisor 路由 → generalInput | POST stream | 200 | PASS - "你好" 正确路由到通用对话,生成流畅回复 |
| 7 | Supervisor 路由 → enterprise (kb_search) | POST stream | 200 | PARTIAL - 路由正确,触发 kb_search 工具,但 KB Agent 超时 |
| 8 | Supervisor 路由 → enterprise (ticket_list) | POST stream | 200 | PASS - 返回 3 条工单 + ticket-summary Gen-UI 卡片 |
| 9 | Supervisor 路由 → enterprise (ticket_detail) | POST stream | 200 | PARTIAL - 路由正确,参数解析正确,但 Gongdan API 返回 404 |
| 10 | Supervisor 路由 → searcher (google_search) | POST stream | 200 | PASS - 返回丰富搜索结果 (8 条新闻),内容质量高 |
| 11 | Supervisor 路由 → coder (sandbox_run) | POST stream | 200 | PARTIAL - 路由正确,LLM 生成代码正确,Daytona sandbox 执行失败 (400) |
| 12 | Supervisor 路由 → writer (canvas-doc) | POST stream | 200 | PASS - 生成 canvas-doc Gen-UI 卡片,含完整 markdown 文档 (833字) |
端点通过率: 9/12 通过 (75%), 3 个部分通过 (路由均正确,外部服务异常)
2. 产品验收测试结果
一、已实现功能 (回归测试) -- 代码审计
| # | 功能 | 状态 | 验证方式 | 备注 |
|---|---|---|---|---|
| 1 | 停止生成 | PASS | 代码审计 | main.tsx:652-660 thread.stop() + Square 图标,isLoading 时显示红色"停止"按钮,否则显示"发送" |
| 2 | 重新生成 | PASS | 代码审计 | main.tsx:247-266 handleRegenerate() 取最后一条 human 消息重新 submit,仅最后一条 AI 消息显示 |
| 3 | 复制消息 | PASS | 代码审计 | main.tsx:56-79 CopyButton 组件,hover AI 消息时通过 group-hover:opacity-100 显示,使用 navigator.clipboard |
| 4 | 代码块 | PASS | 代码审计 | MessageBubble.tsx:20-76 CodeBlock 组件,Prism 语法高亮 + 语言标签 + 复制按钮,dark/light 跟随主题 (oneDark/oneLight) |
| 5 | 文件上传 | PASS | 代码审计 | 三种方式均实现:FileUploadButton (main.tsx:633)、拖拽 (onDrop main.tsx:273)、Ctrl+V 粘贴 (onPaste main.tsx:287) |
| 6 | 主题切换 | PASS | 代码审计 | ThemeProvider + ThemeToggle 组件,代码块高亮跟随 (MessageBubble.tsx:37-39 检测 .dark class) |
| 7 | 移动端 | PASS | 代码审计 | main.tsx:325-330 md:hidden/md:flex 响应式,hamburger Menu 按钮 (main.tsx:348-354),点击切换 sidebarOpen |
| 8 | 对话管理 | PASS | 代码审计 + API | 新建 (handleNewThread)、切换 (handleSelectThread)、删除 (handleDeleteThread)、搜索 (ThreadSidebar 搜索框) |
| 9 | 模型切换 | PASS | 代码审计 | main.tsx:38-42 Flash/Auto/Pro 三模式,609-623 模型选择器 UI |
| 10 | 工具开关 | PASS | 代码审计 | main.tsx:28-33 四组工具独立 toggle,586-606 工具开关 UI (pill 形态,选中变 primary 色) |
已实现功能回归: 10/10 通过
二、新增功能验证
| # | 功能 | 状态 | 验证方式 | 备注 |
|---|---|---|---|---|
| 1 | Textarea 多行输入 | PASS | 代码审计 | main.tsx:634-650 <textarea> 替代 input;Enter 发送 (onKeyDown:642-646);Shift+Enter 换行(默认行为);auto-resize (useEffect:166-171 max 200px);resize-none + overflow-y-auto |
| 2 | 流式打字光标 | PASS | 代码审计 + CSS | main.tsx:516-518 <span className="typing-cursor"> 仅在 isLoading && isLastAi 时渲染;index.css:153-165 blink 动画 1s step-end;颜色用 currentColor 跟随主题 |
| 3 | 编辑用户消息 | PASS | 代码审计 | main.tsx:416-428 Pencil 图标按钮,group-hover:opacity-100 显示;点击后 setInput(humanText) 回填到输入框并 focus;仅非 loading 时可编辑 |
新增功能: 3/3 通过
三、体验质量标准
| # | 指标 | 状态 | 验证方式 | 结果 |
|---|---|---|---|---|
| 1 | 首 token 延迟 < 3s | PASS | API 测量 | 实测 ~2094ms (含 Supervisor 路由 + generalInput LLM 调用) |
| 2 | 工具调用状态 | PASS | 代码审计 | ToolCallStatus.tsx: Loader2 旋转 + "执行中...",完成后 CheckCircle2 绿色 + "已完成",可展开查看 Gen-UI 结果 |
| 3 | Gen-UI 卡片渲染 | PASS | API 测试 | ticket-summary 和 canvas-doc 确认在 SSE ui 数组中正确输出 props |
| 4 | 空状态 | PASS | 代码审计 | main.tsx:377-398 欢迎语"你好,有什么可以帮你的?" + 4 个快速提示按钮 (搜索知识库/查看工单/搜索网络/运行代码) |
| 5 | 错误恢复 | PARTIAL | 代码审计 | useStream 内置重连机制;但无显式的断网提示 UI 或手动重连按钮 |
体验质量: 4.5/5 (1 项部分通过)
3. 启动问题修复记录
pdf-parse ESM 导入错误
- 文件:
src/agent/utils/file-service.ts - 错误:
SyntaxError: The requested module 'pdf-parse' does not provide an export named 'default' - 原因: pdf-parse v2.x 在 ESM 环境下没有 default export
- 修复: 改为
import * as pdfParseModule from "pdf-parse"+ 运行时 fallback - 状态: 已修复,服务正常启动
4. Gen-UI 卡片验证
| 组件 | 对应工具/Agent | 是否触发 | SSE 中 ui 数组 |
|---|---|---|---|
| ticket-summary | ticket_list | 是 | 有 props (total, tickets) |
| canvas-doc | writer agent | 是 | 有 props (doc_id, title, _doc_content) |
| search-result | google_search | 待验证 | 工具返回数据正确 |
| knowledge-result | kb_search | 未触发 | KB Agent 超时 |
| ticket-detail | ticket_detail | 未触发 | Gongdan API 404 |
| sandbox-result | sandbox_run | 未触发 | Daytona 400 |
5. 新增后端/前端改动验证
后端改动
| 改动项 | 状态 | 备注 |
|---|---|---|
| truncateMessages 上下文压缩 | PASS | TypeScript 编译通过,各 Agent 集成正确 |
| router.ts 路由改进 | PASS | 路由到正确的 Agent (enterprise/generalInput/searcher/coder/writer) |
| process-attachment.ts 附件处理 | PASS | 新文件已创建,TypeScript 编译通过 |
| retry.ts 工具重试 | PASS | 新文件已创建,TypeScript 编译通过 |
| pdf-parse ESM 修复 | PASS | 修复后服务正常启动 |
前端改动
| 改动项 | 状态 | 备注 |
|---|---|---|
| ToolCallStatus.tsx 新组件 | PASS | 完整实现:中文工具名映射、加载动画、完成状态、可展开 Gen-UI 结果 |
| ThreadSidebar.tsx 修改 | PASS | 按日期分组 (今天/昨天/本周/更早)、搜索过滤 |
| main.tsx UX 改进 | PASS | textarea 多行、打字光标、编辑消息、复制按钮、快速提示 |
6. 问题清单
P0 - Daytona Sandbox 执行失败
- 端点: coder agent → code_execute → Daytona API
- 错误:
Daytona create failed: 400 - 影响: 代码解释器功能完全不可用
- 建议: 检查 DAYTONA_API_KEY 和 DAYTONA_API_URL 环境变量配置
P1 - KB Agent 超时
- 端点: enterprise agent → kb_search → KB Agent API
- 错误:
TimeoutError: The operation was aborted due to timeout - 影响: 知识库检索功能间歇性不可用
- 建议: 增加超时时间或检查 KB Agent 服务状态,已有 retry 工具可集成
P2 - Gongdan API ticket_detail 404
- 端点: enterprise agent → ticket_detail → Gongdan API
- 错误:
Ticket detail failed: 404 - 影响: 工单详情查看功能不可用
- 建议: 检查 Gongdan API 的 ticket_detail 端点路径和参数格式
P3 - 错误恢复无显式 UI
- 影响: 网络断开时用户无明确提示
- 建议: 添加断网检测 toast 提示 + 手动重连按钮
7. 产品验收总结
| 类别 | 通过项 | 总数 | 通过率 |
|---|---|---|---|
| 已实现功能回归 | 10 | 10 | 100% |
| 新增功能 | 3 | 3 | 100% |
| 体验质量标准 | 4.5 | 5 | 90% |
| 合计 | 17.5 | 18 | 97.2% |
8. 整体质量评分
8.0 / 10
加分项:
- 架构设计成熟 -- Supervisor + 多子 Agent 路由,所有路由 100% 正确
- 前端功能完整 -- 停止/重新生成/复制/编辑/多行输入/主题切换/移动端/工具开关全部实现
- ToolCallStatus 组件体验好 -- 中文工具名、加载动画、可展开查看结果
- 打字光标和空状态提升了产品质感
- 首 token 延迟 ~2s,满足 3s 标准
- TypeScript 编译 0 错误
- Gen-UI 卡片系统正常工作 (ticket-summary, canvas-doc)
减分项:
- Daytona sandbox 不可用 (-1)
- KB Agent 超时不稳定 (-0.5)
- Gongdan ticket_detail 404 (-0.5)
- 缺少断网恢复提示 UI (-0.2)
测试人: SOC Test Agent | 生成时间: 2026-04-11 (第三轮 -- 产品验收测试)