Files
socaichat/test.md
T
2026-04-11 14:45:02 +08:00

9.3 KiB
Raw Blame History

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 (第三轮 -- 产品验收测试)