Files
qihuaiflow/tests/10-issue-round3-test-case-report.md
T
qyyfw 78ff261b5a 初始提交: Qihu-AIFlow v2.0.1 完整项目
- 前端 React+TypeScript (源码+构建产物)
- 后端 Python FastAPI
- 数据库迁移 001-015
- Docker部署配置
- 微信ClawBot API频道绑定
- 项目文档 README.md
2026-07-02 14:40:46 +08:00

17 KiB
Raw Permalink Blame History

测试用例 — 10问题修复验证(Round 3)

测试日期: 2026-06-01
测试工程师: 测试工程师
测试依据: PRD v1.0 + 项目负责人给定的10个问题清单 + 前后端代码分析
测试方针: 以真实用户操作场景为基础,模拟用户通过浏览器完整走通各功能流程


1. 需求依据

  • PRD 路径: /data/share/project/docs/PRD.md
  • 本轮10个问题清单(项目负责人指定):
    1. 邮件配置保存不生效 + 测试发送失败
    2. 聊天对话窗口多功能按钮不显示(置顶/转知识图谱/归档等)
    3. AI聊天询问技能后不罗列平台已安装应用
    4. 应用市场卸载后无法再安装 + 重复安装未提示
    5. 技能选择框显示已卸载应用
    6. 频道二维码显示测试地址localhost
    7. Token时间不同步 + 导出CSV无响应 + 一键充值无响应
    8. 知识图谱节点不可拖拽和点亮
    9. AI聊天技能/知识库/Agent需支持多选组合
    10. 资产重复显示 + 分类错误 + 在线预览需集成Office

2. 代码功能模块概览

模块 代码位置(后端) 代码位置(前端) 对应问题
邮件配置API api/admin/settings.py:132-397 pages/admin/SiteSettings.tsx:271-437 Q1
对话管理API api/chat.py:125-682 pages/front/ChatPage.tsx:459-708 Q2
技能列表API api/evolution.py:40-52, api/market.py:44-124 ChatPage.tsx:372-401 Q3, Q5
应用市场安装卸载 api/market.py:300-393 pages/front/MarketPage.tsx:285-1374 Q4
频道二维码 api/channels.py:420-498 pages/front/ChannelPage.tsx:391-729 Q6
Token驾驶舱 api/token_usage.py:25-242 pages/front/TokenDashboardPage.tsx:184-459 Q7
知识图谱 api/knowledge.py:226-740 pages/front/KnowledgePage.tsx:163-415 Q8
聊天多选选择器 api/chat.py:41-48, 258-293 ChatPage.tsx:835-932 Q9
资产分类去重 api/assets.py:40-373 pages/front/AssetsPage.tsx:395-466 Q10

3. 需求与代码差异说明

3.1 PRD中未在代码中体现的内容

编号 PRD功能点 现状
D1 Token驾驶舱余额预警弹窗(PRD 7.2-模块五) 代码中未实现自动弹窗预警,仅页面展示余额信息
D2 应用市场选择是否参与优惠券满减(PRD 7.2-模块四) 市场发布流程未集成优惠券参与选项
D3 知识库问答溯源原文展示(PRD 7.2-模块三) 知识库QA API存在但前端溯源展示不完整
D4 会员自动降级/自动续费规则引擎(PRD 7.2-后台模块五) 数据库表结构存在但自动降级定时任务未实现

3.2 PRD中未覆盖但代码中存在的功能模块

编号 模块名称 代码位置 建议
N1 AI自进化驾驶舱 api/evolution.py, frontend/EvolutionDashboard.tsx 产品确认是否纳入正式需求
N2 广告位管理与AI绘图 api/admin/ads.py, frontend/Ads.tsx 产品确认商业化优先级
N3 工具调用循环(tool-call) api/chat.py:307-380 已在聊天中使用,产品确认
N4 小说阅读预览器 frontend/NovelPreviewPage.tsx 特定资产类型的在线阅读,产品确认

4. 测试用例

4.1 邮件配置保存+测试发送 (Q1)

TC-1-01 [P0] 验证邮件配置保存并确认数据持久化

  • 前置条件: 管理员已登录后台
  • 步骤: [1] 浏览器打开后台 → 点击"网站基础设置" [2] 在邮件配置区域填写SMTP服务器、端口、用户名、密码、发件地址 [3] 点击"保存设置"按钮 [4] 刷新页面,检查邮件配置是否回显已保存的数据 [5] 通过API再次确认数据库中的配置
  • 预期结果: 保存后页面不报错;刷新后配置数据正确回显;数据库中email_configs表存在对应记录
  • 备注: 核心验证——保存是否真正生效

TC-1-02 [P0] 验证发送测试邮件弹窗及AI生成内容

  • 前置条件: 邮件配置已保存,管理员在"网站基础设置"页面
  • 步骤: [1] 点击"发送测试邮件"按钮 [2] 验证弹窗出现,包含收件邮箱(必填)、邮件主题、邮件内容三个输入框 [3] 点击"AI生成测试内容"按钮 [4] 验证邮件主题和内容被AI自动填入(而非报错) [5] 填写收件邮箱,点击"发送测试邮件" [6] 验证页面给出明确反馈(成功或失败消息)
  • 预期结果: 弹窗正常;AI生成内容成功填入主题和正文;发送后页面有toast提示(即使SMTP无效也应给出明确错误提示而非静默失败)
  • 备注: 修复前AI生成和发送可能静默失败

TC-1-03 [P1] 验证邮件配置必填字段校验

  • 前置条件: 管理员在邮件配置区域
  • 步骤: [1] 清空SMTP服务器或发件地址等必填字段 [2] 点击"保存设置" [3] 观察是否有校验提示
  • 预期结果: 后端返回422或前端提示必填字段缺失
  • 备注: 边界测试

4.2 聊天对话下拉菜单多功能按钮 (Q2)

TC-2-01 [P0] 验证对话列表项下拉菜单展示及5个操作按钮

  • 前置条件: 用户已登录,有至少一条历史对话
  • 步骤: [1] 进入AI聊天页面,在左侧对话列表中找到任意对话 [2] 点击对话项右侧的三点(More)图标按钮 [3] 检查下拉菜单是否弹出 [4] 逐一验证5个操作按钮是否可见:置顶/取消置顶、转知识图谱、重命名、归档/取消归档、删除
  • 预期结果: 下拉菜单正常弹出,5个按钮全部可见可点击
  • 备注: 核心验证——下拉菜单是否在页面上可见

TC-2-02 [P0] 验证置顶功能

  • 前置条件: 对话列表中有多条对话
  • 步骤: [1] 对某条非置顶对话点击"置顶" [2] 观察对话是否移动到列表顶部 [3] 刷新页面,确认置顶状态持久化 [4] 再次打开菜单,点击"取消置顶" [5] 验证对话恢复正常排序
  • 预期结果: 置顶后对话排在最前,刷新后保持;取消置顶恢复
  • 备注: API: PUT /conversations/{id} pinned=true/false

TC-2-03 [P1] 验证转知识图谱功能

  • 前置条件: 对话中有实际消息内容
  • 步骤: [1] 对某条有消息内容的对话点击"转知识图谱" [2] 等待处理完成 [3] 进入知识库页面,验证是否自动创建了名为"对话图谱-{对话标题}"的知识库
  • 预期结果: 知识库创建成功,包含对话消息文档
  • 备注: API: POST /conversations/{id}/to-knowledge-graph

TC-2-04 [P1] 验证归档和删除功能

  • 前置条件: 对话列表中有对话
  • 步骤: [1] 对某对话点击"归档" [2] 对话从活跃列表消失 [3] 对另一对话点击"删除" [4] 对话被移除
  • 预期结果: 归档和删除操作正常执行,状态正确更新

4.3 技能列表显示已安装应用 (Q3)

TC-3-01 [P0] 验证聊天中输入@或询问后列出平台已安装应用

  • 前置条件: 用户已登录,已安装若干应用
  • 步骤: [1] 进入AI聊天页面 [2] 点击底部"技能"按钮 [3] 检查下拉列表中的技能 [4] 验证列表中只显示用户已安装的技能,不显示未安装或已卸载的应用 [5] 选择一个技能后发送消息,验证技能参数是否传递到后端
  • 预期结果: 技能列表仅包含已安装的技能;选中后可正常发送
  • 备注: 代码中ChatPage.tsx:393-400通过marketAPI获取并过滤installed状态

TC-3-02 [P1] 验证卸载应用后技能列表更新

  • 前置条件: 用户已安装技能A,技能列表中可见A
  • 步骤: [1] 去应用市场卸载技能A [2] 返回聊天页面,重新打开技能下拉框 [3] 检查技能A是否不再出现在列表中
  • 预期结果: 已卸载的技能不再出现在技能选择框中

4.4 应用市场安装卸载+重复检测 (Q4)

TC-4-01 [P0] 验证安装功能

  • 前置条件: 用户已登录,应用市场中有未安装的应用
  • 步骤: [1] 进入应用市场,找到未安装的应用(无"卸载"按钮) [2] 点击该应用卡片进入详情 [3] 点击"安装"按钮 [4] 观察安装结果 [5] 返回列表验证该应用按钮变为"卸载"
  • 预期结果: 安装成功;状态从"未安装"变为"已安装"
  • 备注: 真实用户操作流程

TC-4-02 [P0] 验证卸载后重新安装

  • 前置条件: 应用已安装
  • 步骤: [1] 对已安装应用点击"卸载" [2] 确认卸载成功(按钮变为价格/"安装") [3] 再次点击"安装" [4] 观察是否能重新安装成功
  • 预期结果: 卸载后可重新安装,不会报错或提示已安装
  • 备注: 修复前可能卸载后AppInstallation记录未正确清理

TC-4-03 [P1] 验证重复安装检测

  • 前置条件: 应用已安装
  • 步骤: [1] 对已安装应用再次尝试安装 [2] 观察系统反馈
  • 预期结果: 系统提示"已经安装,无需重复安装"或类似提示
  • 备注: MarketPage.tsx:285-306有installed检测逻辑

4.5 技能选择框不显示已卸载应用 (Q5)

TC-5-01 [P0] 验证技能选择框中不包含已卸载应用

  • 前置条件: 用户安装过技能A和B,并卸载了B
  • 步骤: [1] 进入聊天页面 [2] 点击"技能"按钮打开选择框 [3] 检查列表中是否包含技能B(已卸载)
  • 预期结果: 列表中不包含已卸载的技能B;仅显示已安装的技能A
  • 备注: 前端ChatPage.tsx:393-400过滤a.installed !== false

TC-5-02 [P1] 验证技能选择框为空时的提示

  • 前置条件: 用户没有安装任何技能
  • 步骤: [1] 进入聊天页面,点击"技能"按钮 [2] 观察下拉框内容
  • 预期结果: 显示"暂无可用技能"或空列表

4.6 频道二维码非localhost (Q6)

TC-6-01 [P0] 验证频道二维码中绑定URL使用生产地址

  • 前置条件: 管理员已在后台配置频道(微信平台)
  • 步骤: [1] 进入频道页面 [2] 点击频道进入详情 [3] 点击"连接频道"或"接入新平台"触发二维码生成 [4] 通过浏览器DevTools检查Network请求中二维码生成API的响应 [5] 验证二维码编码的URL是否以APP_ACCESS_URL为前缀
  • 预期结果: 二维码中的绑定URL使用APP_ACCESS_URL(即http://s-3686137677310083075-773.team-coding:8080),而非localhost
  • 备注: channels.py:496-497使用APP_ACCESS_URL环境变量

TC-6-02 [P1] 验证二维码扫码绑定流程

  • 前置条件: 频道已创建,微信凭证已配置
  • 步骤: [1] 创建新的微信频道 [2] 在第二步中生成二维码 [3] 检查二维码图片是否正常显示 [4] 观察二维码下方是否显示平台提示信息
  • 预期结果: 二维码图片正常显示,绑定URL使用生产地址

4.7 Token驾驶舱时间/导出/充值 (Q7)

TC-7-01 [P0] 验证Token消耗明细时间显示正确

  • 前置条件: 用户已有Token消耗记录
  • 步骤: [1] 进入Token驾驶舱页面 [2] 查看消耗明细表格中的"时间"列 [3] 对比系统当前时间 [4] 验证时间格式为YYYY-MM-DD HH:mm
  • 预期结果: 时间显示与系统时间在同一时区,格式正确
  • 备注: 前端formatTime函数(TokenDashboardPage.tsx:444-459)处理

TC-7-02 [P0] 验证CSV导出功能

  • 前置条件: 用户有Token消耗记录
  • 步骤: [1] 点击"导出数据"按钮 [2] 观察浏览器是否触发文件下载 [3] 下载完成后打开CSV文件检查内容 [4] 验证文件名格式为token-usage-YYYY-MM-DD.csv
  • 预期结果: 浏览器触发下载,CSV包含正确的Token消耗数据(时间/模型/应用/Prompt/Completion/总Token/费用)
  • 备注: 修复前可能点击无响应

TC-7-03 [P0] 验证一键充值按钮跳转

  • 前置条件: 用户在Token驾驶舱页面
  • 步骤: [1] 点击"一键充值"按钮 [2] 观察页面跳转
  • 预期结果: 跳转到付费中心页面(#/pricing或#/billing)
  • 备注: 修复前可能点击无响应

TC-7-04 [P1] 验证Token余额不足提示

  • 前置条件: 用户Token余额为0
  • 步骤: [1] 进入Token驾驶舱 [2] 观察是否显示余额不足的提示
  • 预期结果: 页面顶端显示"Token余额不足"警告横幅

4.8 知识图谱节点拖拽和点亮 (Q8)

TC-8-01 [P0] 验证知识图谱节点可拖拽

  • 前置条件: 知识库已构建知识图谱,有节点和边
  • 步骤: [1] 进入知识库 → 点击有图谱的库 [2] 点击"查看图谱"或"构建知识图谱" [3] 在Canvas画布上找到一个节点 [4] 鼠标按住节点并拖动 [5] 松开鼠标,验证节点停留在新位置
  • 预期结果: 节点可被拖拽移动,松手后停留在新位置
  • 备注: KnowledgeGraphView组件第176-178行和405-408行实现

TC-8-02 [P0] 验证知识图谱节点可点亮/高亮

  • 前置条件: 图谱中有多个节点和边
  • 步骤: [1] 在Canvas上点击一个节点 [2] 观察该节点是否高亮(金色边框) [3] 观察与该节点相连的邻居节点是否有彩色光晕 [4] 观察非关联节点是否变暗 [5] 鼠标悬停在节点上,观察hover效果
  • 预期结果: 选中节点金色边框高亮;邻居节点彩色光晕;非关联节点变暗半透明
  • 备注: KnowledgeGraphView第296-353行实现

4.9 聊天多选组合功能 (Q9)

TC-9-01 [P0] 验证知识库多选功能

  • 前置条件: 用户有多个知识库
  • 步骤: [1] 进入聊天页面 [2] 点击底部"知识库"按钮 [3] 在下拉框中勾选2个以上知识库 [4] 观察已选知识库是否带✓标记 [5] 点击"清除选择"按钮验证全部取消
  • 预期结果: 支持多选;已选项标记✓;清除选择可全取消

TC-9-02 [P0] 验证Agent多选功能

  • 前置条件: 用户已安装多个Agent
  • 步骤: [1] 点击"Agent"按钮 [2] 勾选多个Agent [3] 验证多选状态保持
  • 预期结果: 支持多选Agent

TC-9-03 [P0] 验证技能多选功能

  • 前置条件: 用户已安装多个技能
  • 步骤: [1] 点击"技能"按钮 [2] 勾选多个技能 [3] 验证多选状态保持
  • 预期结果: 支持多选技能

TC-9-04 [P0] 验证三者组合发送

  • 前置条件: 至少选了一个知识库+一个Agent+一个技能
  • 步骤: [1] 同时选择知识库、Agent、技能 [2] 在输入框输入消息内容 [3] 点击发送(Enter) [4] 通过Network检查发送请求参数是否包含knowledge_base_ids、agent_ids、skill_ids
  • 预期结果: 发送请求正确携带多选的knowledge_base_ids、agent_ids、skill_ids参数

4.10 资产去重+分类+预览 (Q10)

TC-10-01 [P0] 验证资产不重复显示

  • 前置条件: 知识库中存在文档(已自动同步为资产)
  • 步骤: [1] 进入资产页面 [2] 检查列表中是否有同名/同内容的重复条目 [3] 通过JS选择器检查资产ID是否有重复
  • 预期结果: 每个资产只出现一次,无重复条目
  • 备注: 前端AssetsPage.tsx:453-459通过Set去重

TC-10-02 [P0] 验证资产分类正确性

  • 前置条件: 有不同类型的资产(文件、图片等)
  • 步骤: [1] 进入资产页面 [2] 使用分类筛选按钮逐个切换(全部/文件/图片/视频/音频/小说/其他) [3] 每次切换后验证显示的资产类型是否与所选分类匹配
  • 预期结果: 分类筛选正确,各分类下的资产类型匹配

TC-10-03 [P1] 验证文件类型自动映射

  • 前置条件: 知识库中有不同类型的文档(.docx, .pptx, .pdf, .txt等)
  • 步骤: [1] 进入资产页面 [2] 检查各种文件类型的显示标签 [3] 验证.docx显示为"Word"、.pptx显示为"PPT"、.txt显示为"文本"等
  • 预期结果: fileType标签映射正确

TC-10-04 [P1] 验证知识库文档归类到文件分类

  • 前置条件: 知识库中上传了文档
  • 步骤: [1] 进入资产页面 → 点击"文件"分类 [2] 验证知识库文档是否出现在文件分类下
  • 预期结果: 知识库文档显示在"文件"分类中

5. 测试用例统计

问题编号 问题简述 P0用例 P1用例 P2用例 合计
Q1 邮件配置保存+测试发送 2 1 0 3
Q2 对话下拉菜单按钮 2 2 0 4
Q3 技能列表显示已安装 1 1 0 2
Q4 应用市场安装卸载 2 1 0 3
Q5 技能选择框过滤 1 1 0 2
Q6 频道二维码地址 1 1 0 2
Q7 Token时间/导出/充值 3 1 0 4
Q8 知识图谱拖拽点亮 2 0 0 2
Q9 聊天多选组合 4 0 0 4
Q10 资产去重分类 2 2 0 4
合计 20 10 0 30

文档状态: 已完成
创建日期: 2026-06-01
基于: PRD v1.0 + 前后端代码功能分析