- 前端 React+TypeScript (源码+构建产物) - 后端 Python FastAPI - 数据库迁移 001-015 - Docker部署配置 - 微信ClawBot API频道绑定 - 项目文档 README.md
17 KiB
17 KiB
测试用例 — 10问题修复验证(Round 3)
测试日期: 2026-06-01
测试工程师: 测试工程师
测试依据: PRD v1.0 + 项目负责人给定的10个问题清单 + 前后端代码分析
测试方针: 以真实用户操作场景为基础,模拟用户通过浏览器完整走通各功能流程
1. 需求依据
- PRD 路径:
/data/share/project/docs/PRD.md - 本轮10个问题清单(项目负责人指定):
- 邮件配置保存不生效 + 测试发送失败
- 聊天对话窗口多功能按钮不显示(置顶/转知识图谱/归档等)
- AI聊天询问技能后不罗列平台已安装应用
- 应用市场卸载后无法再安装 + 重复安装未提示
- 技能选择框显示已卸载应用
- 频道二维码显示测试地址localhost
- Token时间不同步 + 导出CSV无响应 + 一键充值无响应
- 知识图谱节点不可拖拽和点亮
- AI聊天技能/知识库/Agent需支持多选组合
- 资产重复显示 + 分类错误 + 在线预览需集成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 + 前后端代码功能分析