初始提交: Qihu-AIFlow v2.0.1 完整项目
- 前端 React+TypeScript (源码+构建产物) - 后端 Python FastAPI - 数据库迁移 001-015 - Docker部署配置 - 微信ClawBot API频道绑定 - 项目文档 README.md
This commit is contained in:
commit
78ff261b5a
199 files changed
+69126
No files matched your search
@@ -0,0 +1,656 @@
|
||||
# 测试用例 — 12项问题修复验证
|
||||
|
||||
## 1. 需求依据
|
||||
- 来源:项目负责人下发的12项问题修复清单
|
||||
- 重点验证方向:Agent/技能选择、频道二维码(非localhost)、知识库AI图谱、AI进化记录、资产文件分类+预览、邮件配置保存+测试
|
||||
|
||||
## 2. 代码功能模块概览
|
||||
|
||||
### 问题对应代码位置
|
||||
|
||||
| # | 问题 | 前端文件 | 后端文件 |
|
||||
|---|------|---------|---------|
|
||||
| 1 | Token驾驶舱时间不一致 | TokenDashboardPage.tsx:376-392 | token_usage.py:167 |
|
||||
| 2 | 登录密码错误反馈 | LoginPage.tsx:59-103 | auth.py:38-49 |
|
||||
| 3 | 平台驾驶舱+累计Token | Dashboard.tsx:79,101-127 | dashboard.py:38-42 |
|
||||
| 4 | 广告图片上传/AI绘图 | Ads.tsx:141-188,353-417 | ads.py:182-311 |
|
||||
| 5 | 模型类型映射+默认LLM | Models.tsx:156-195,313-353 | models.py:234-294,560-587 |
|
||||
| 6 | 邮件配置保存+测试弹窗 | SiteSettings.tsx:128-185,358-428 | settings.py:104-374 |
|
||||
| 7 | Agent/技能无法选择 | ChatPage.tsx:262-263,544-622 | chat.py:38-45,260-285 |
|
||||
| 8 | 应用市场安装/卸载/搜索 | MarketPage.tsx:245-437,1249-1424 | market.py:44-125,300-393 |
|
||||
| 9 | 知识库AI图谱LLM提取 | KnowledgePage.tsx:163-367,738-772 | knowledge.py:205-616 |
|
||||
| 10 | 资产文档显示+在线预览 | AssetsPage.tsx:59-263,377-413 | knowledge.py:1067-1085 |
|
||||
| 11 | AI进化对话未记录 | ChatPage.tsx:603-613 | chat.py:441-458, evolution_service.py:54-233 |
|
||||
| 12 | 频道二维码生产地址 | ChannelPage.tsx:391-476 | channels.py:447-658, config.py:37-49 |
|
||||
|
||||
## 3. 需求与代码差异说明
|
||||
|
||||
### 3.1 代码中已实现但可能存在缺陷的功能
|
||||
- **问题7(Agent/技能选择)**:选择逻辑存在,但仅为单选模式,且Agent后端无实际执行逻辑
|
||||
- **问题11(AI进化记录)**:轨迹记录存在双向重复提交风险(前后端各自提交)
|
||||
- **问题10(资产预览)**:知识库文档category="doc"不在VALID_ASSET_CATEGORIES中
|
||||
|
||||
### 3.2 PRD中未覆盖但代码已实现
|
||||
无。本次为问题修复验证,所有问题均有对应代码实现。
|
||||
|
||||
---
|
||||
|
||||
## 4. 测试用例
|
||||
|
||||
---
|
||||
|
||||
### 4.1 问题1:Token驾驶舱消耗明细时间与系统时间不一致
|
||||
|
||||
#### TC-1-01 [P0] 验证Token消耗明细时间格式与系统时区一致
|
||||
- **前置条件**:用户已登录,存在Token消耗记录
|
||||
- **涉及API**:`GET /app/api/token/logs`
|
||||
- **步骤**:
|
||||
1. 进入Token驾驶舱页面(#/token)
|
||||
2. 查看消耗明细列表中的时间列
|
||||
3. 记录JS执行 `new Date().getHours()` 获取当前浏览器时间
|
||||
4. 对比列表中最近一条消耗记录的时间小时数
|
||||
- **预期结果**:
|
||||
- 消耗明细时间的小时数与系统当前时间的小时数一致(允许秒级差异)
|
||||
- 时间格式为 YYYY-MM-DD HH:mm
|
||||
|
||||
#### TC-1-02 [P1] 验证Token概览页面今日消耗统计的时间边界
|
||||
- **前置条件**:用户已登录
|
||||
- **涉及API**:`GET /app/api/token/overview`
|
||||
- **步骤**:
|
||||
1. 进入Token驾驶舱页面
|
||||
2. 查看"今日消耗"数值
|
||||
3. 通过API直接查询今日消耗并对比页面显示值
|
||||
- **预期结果**:页面显示的今日消耗与API返回一致
|
||||
|
||||
#### TC-1-03 [P1] 验证API返回时间格式一致性
|
||||
- **前置条件**:用户已登录,有Token记录
|
||||
- **涉及API**:`GET /app/api/token/logs`
|
||||
- **步骤**:
|
||||
1. 调用API获取token logs
|
||||
2. 检查返回的created_at字段格式
|
||||
- **预期结果**:
|
||||
- created_at格式为ISO 8601标准格式
|
||||
- 同一页面的多个记录时间格式一致
|
||||
|
||||
---
|
||||
|
||||
### 4.2 问题2:登录界面修改密码后用旧密码登录反馈
|
||||
|
||||
#### TC-2-01 [P0] 验证旧密码登录返回"密码错误"而非通用错误
|
||||
- **前置条件**:用户已修改密码
|
||||
- **涉及API**:`POST /app/api/auth/login`
|
||||
- **步骤**:
|
||||
1. 在登录页面输入正确的用户名
|
||||
2. 输入已失效的旧密码
|
||||
3. 点击登录
|
||||
- **预期结果**:
|
||||
- 页面显示明确的"密码错误"提示
|
||||
- 不显示"用户名不存在"或通用的"登录失败"
|
||||
|
||||
#### TC-2-02 [P0] 验证用户名不存在时显示正确提示
|
||||
- **前置条件**:无
|
||||
- **涉及API**:`POST /app/api/auth/login`
|
||||
- **步骤**:
|
||||
1. 输入不存在的用户名
|
||||
2. 输入任意密码
|
||||
3. 点击登录
|
||||
- **预期结果**:
|
||||
- 页面显示"用户名不存在"提示
|
||||
- 不与"密码错误"混淆
|
||||
|
||||
#### TC-2-03 [P1] 验证修改密码后新密码立即生效
|
||||
- **前置条件**:用户已登录(如admin/admin123)
|
||||
- **涉及API**:`PUT /app/api/profile/password`, `POST /app/api/auth/login`
|
||||
- **步骤**:
|
||||
1. 修改密码为新密码
|
||||
2. 退出登录
|
||||
3. 用旧密码尝试登录
|
||||
4. 用新密码登录
|
||||
- **预期结果**:
|
||||
- 旧密码登录失败,返回"密码错误"
|
||||
- 新密码登录成功
|
||||
|
||||
#### TC-2-04 [P1] 验证前端错误提示区域可见且文案清晰
|
||||
- **前置条件**:无
|
||||
- **涉及API**:`POST /app/api/auth/login`
|
||||
- **步骤**:
|
||||
1. 输入错误凭据登录
|
||||
2. 检查页面错误提示位置和文案
|
||||
- **预期结果**:
|
||||
- 错误提示在表单区域附近可见
|
||||
- 文案明确区分"用户名不存在"与"密码错误"
|
||||
|
||||
---
|
||||
|
||||
### 4.3 问题3:平台驾驶舱+累计Token消耗统计
|
||||
|
||||
#### TC-3-01 [P0] 验证页面标题为"平台驾驶舱"
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 进入管理后台首页(#/admin)
|
||||
2. 查看页面标题
|
||||
- **预期结果**:页面标题显示为"平台驾驶舱"
|
||||
|
||||
#### TC-3-02 [P0] 验证累计Token消耗统计卡片存在
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`GET /app/api/admin/dashboard/stats`
|
||||
- **步骤**:
|
||||
1. 进入平台驾驶舱
|
||||
2. 查看统计卡片区域
|
||||
3. 确认包含以下统计项
|
||||
- **预期结果**:
|
||||
- 包含"累计总消耗"统计卡片
|
||||
- 数值来源于数据库实时统计
|
||||
- Token数值格式正确(大数以"万"为单位显示)
|
||||
|
||||
#### TC-3-03 [P1] 验证统计数据随使用更新
|
||||
- **前置条件**:管理员已登录,记录当前累计Token值
|
||||
- **涉及API**:`GET /app/api/admin/dashboard/stats`
|
||||
- **步骤**:
|
||||
1. 记录当前累计Token消耗值
|
||||
2. 在AI聊天中发送一条消息(产生Token消耗)
|
||||
3. 刷新平台驾驶舱
|
||||
4. 对比累计Token消耗值
|
||||
- **预期结果**:
|
||||
- 累计Token消耗值增加(或不变,取决于TokenUsageLog是否已写入)
|
||||
- 如果是今日产生的消耗,今日Token也有相应变化
|
||||
|
||||
#### TC-3-04 [P1] 验证统计卡片包含所有必要维度
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`GET /app/api/admin/dashboard/stats`
|
||||
- **步骤**:
|
||||
1. 进入平台驾驶舱
|
||||
2. 统计所有可见的统计卡片
|
||||
- **预期结果**:至少包含以下统计维度:
|
||||
- 用户总数
|
||||
- 活跃模型数
|
||||
- 今日订单数
|
||||
- 今日Token消耗
|
||||
- 累计总消耗
|
||||
- 日均消耗(近30天)
|
||||
|
||||
---
|
||||
|
||||
### 4.4 问题4:广告位管理图片上传/替换+AI绘图
|
||||
|
||||
#### TC-4-01 [P0] 验证广告编辑中有图片上传按钮
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 进入管理后台 → 广告管理页面(#/admin/ads)
|
||||
2. 点击编辑某个广告
|
||||
3. 查找"背景图片"区域
|
||||
- **预期结果**:
|
||||
- 存在"上传图片"按钮
|
||||
- 按钮可点击,触发文件选择
|
||||
|
||||
#### TC-4-02 [P0] 验证AI绘图按钮及功能
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`POST /app/api/admin/ads/generate-image?prompt=...`
|
||||
- **步骤**:
|
||||
1. 编辑广告,找到"AI绘图"按钮
|
||||
2. 输入描述词(如"科技感蓝色广告图")
|
||||
3. 点击AI绘图
|
||||
4. 等待生成结果
|
||||
- **预期结果**:
|
||||
- 按钮可见且可点击
|
||||
- 生成过程中显示加载状态
|
||||
- 生成完成后显示预览图
|
||||
|
||||
#### TC-4-03 [P1] 验证图片上传功能完整流程
|
||||
- **前置条件**:管理员已登录,准备测试图片文件
|
||||
- **涉及API**:`POST /app/api/admin/ads/upload-image`
|
||||
- **步骤**:
|
||||
1. 编辑广告
|
||||
2. 点击"上传图片"
|
||||
3. 选择一张图片
|
||||
4. 确认图片预览出现
|
||||
5. 保存广告
|
||||
- **预期结果**:
|
||||
- 选择文件后显示图片预览
|
||||
- 保存后广告使用新上传的图片
|
||||
|
||||
#### TC-4-04 [P1] 验证"清除图片"按钮
|
||||
- **前置条件**:管理员已登录,广告已有背景图片
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 编辑已有图片的广告
|
||||
2. 点击"清除图片"按钮
|
||||
- **预期结果**:
|
||||
- 图片预览消失
|
||||
- 保存后广告不再显示该图片
|
||||
|
||||
---
|
||||
|
||||
### 4.5 问题5:大模型库管理模型类型映射+全局默认LLM
|
||||
|
||||
#### TC-5-01 [P0] 验证非文本模型显示正确类型标签
|
||||
- **前置条件**:管理员已登录,存在多模态模型(如GPT-4o包含vision)
|
||||
- **涉及API**:`GET /app/api/admin/models/`
|
||||
- **步骤**:
|
||||
1. 进入管理后台 → 大模型库(#/admin/models)
|
||||
2. 查看模型列表
|
||||
3. 找到多模态模型(如支持vision、audio的模型)
|
||||
- **预期结果**:
|
||||
- 多模态模型显示对应的能力标签(如"视觉"、"语音")
|
||||
- 纯文本模型仅显示"文本"标签
|
||||
- 每个标签有对应的颜色标识
|
||||
|
||||
#### TC-5-02 [P0] 验证全局默认LLM设置入口
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`PUT /app/api/admin/models/{id}/set-default`
|
||||
- **步骤**:
|
||||
1. 进入大模型库页面
|
||||
2. 找到"设置默认LLM"按钮或入口
|
||||
3. 点击进入选择弹窗
|
||||
- **预期结果**:
|
||||
- 存在"设置默认LLM"功能入口
|
||||
- 弹窗列出所有已启用的模型
|
||||
- 可选择并确认设置默认模型
|
||||
|
||||
#### TC-5-03 [P1] 验证默认LLM设置后正确标记
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`PUT /app/api/admin/models/{id}/set-default`
|
||||
- **步骤**:
|
||||
1. 设置某个模型为默认LLM
|
||||
2. 查看模型列表
|
||||
3. 在AI聊天页面检查默认选中的模型
|
||||
- **预期结果**:
|
||||
- 模型列表中该模型显示"默认"标记
|
||||
- AI聊天页面默认选中该模型
|
||||
|
||||
#### TC-5-04 [P1] 验证供应商模型列表获取功能
|
||||
- **前置条件**:管理员已登录,存在模型供应商
|
||||
- **涉及API**:`POST /app/api/admin/models/providers/{id}/fetch-models`
|
||||
- **步骤**:
|
||||
1. 进入大模型库
|
||||
2. 选择某个供应商
|
||||
3. 点击"获取模型列表"
|
||||
- **预期结果**:
|
||||
- 能够从供应商获取可用模型列表
|
||||
- 每个模型显示名称和类型标签
|
||||
|
||||
---
|
||||
|
||||
### 4.6 问题6:邮件配置保存+测试弹窗
|
||||
|
||||
#### TC-6-01 [P0] 验证邮件配置保存功能
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`PUT /app/api/admin/settings/email`
|
||||
- **步骤**:
|
||||
1. 进入网站基础设置(#/admin/settings)
|
||||
2. 填写SMTP服务器、端口、用户名、密码、发件地址
|
||||
3. 点击"保存设置"
|
||||
- **预期结果**:
|
||||
- 显示保存成功提示
|
||||
- 刷新页面后配置仍然存在(回显正确)
|
||||
|
||||
#### TC-6-02 [P0] 验证测试邮件弹窗输入收件箱
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`POST /app/api/admin/settings/email/test`
|
||||
- **步骤**:
|
||||
1. 在邮件配置区点击"发送测试邮件"
|
||||
2. 观察弹出的测试邮件弹窗
|
||||
- **预期结果**:
|
||||
- 弹窗包含"收件邮箱"输入框(必填)
|
||||
- 弹窗包含"邮件主题"输入框
|
||||
- 弹窗包含"邮件内容"文本区
|
||||
|
||||
#### TC-6-03 [P0] 验证AI生成测试内容功能
|
||||
- **前置条件**:管理员已登录,已打开测试邮件弹窗
|
||||
- **涉及API**:`POST /app/api/admin/settings/email/generate-content`
|
||||
- **步骤**:
|
||||
1. 在测试邮件弹窗中点击"AI生成测试内容"
|
||||
2. 等待生成结果
|
||||
- **预期结果**:
|
||||
- 邮件主题自动填充AI生成的内容
|
||||
- 邮件正文自动填充AI生成的内容
|
||||
- 内容为中文,适合测试用途
|
||||
|
||||
#### TC-6-04 [P1] 验证未配置时发送测试邮件的错误提示
|
||||
- **前置条件**:管理员已登录,SMTP配置为空
|
||||
- **涉及API**:`POST /app/api/admin/settings/email/test`
|
||||
- **步骤**:
|
||||
1. 清空邮件配置并保存
|
||||
2. 打开测试邮件弹窗
|
||||
3. 输入收件地址点击发送
|
||||
- **预期结果**:
|
||||
- 显示"邮件配置未设置,请先保存邮件配置"错误提示
|
||||
|
||||
#### TC-6-05 [P1] 验证SMTP认证失败的错误提示
|
||||
- **前置条件**:管理员已登录
|
||||
- **涉及API**:`POST /app/api/admin/settings/email/test`
|
||||
- **步骤**:
|
||||
1. 填写错误的SMTP密码
|
||||
2. 保存配置
|
||||
3. 发送测试邮件
|
||||
- **预期结果**:显示"SMTP认证失败,请检查用户名和密码"
|
||||
|
||||
---
|
||||
|
||||
### 4.7 问题7:AI聊天Agent/技能无法选择
|
||||
|
||||
#### TC-7-01 [P0] 验证点击Agent下拉中的项目可选中
|
||||
- **前置条件**:用户已登录,市场中有已发布Agent
|
||||
- **涉及API**:无(前端交互)
|
||||
- **步骤**:
|
||||
1. 进入AI聊天页面(#/chat)
|
||||
2. 点击输入框上方的"Agent"下拉按钮
|
||||
3. 点击某个Agent
|
||||
4. 观察Agent下拉按钮状态变化
|
||||
- **预期结果**:
|
||||
- 选中的Agent在列表中高亮/标记
|
||||
- Agent按钮显示已选中状态(如高亮或显示选中数量)
|
||||
|
||||
#### TC-7-02 [P0] 验证点击技能下拉中的项目可选中
|
||||
- **前置条件**:用户已登录,市场中有已发布技能
|
||||
- **涉及API**:无(前端交互)
|
||||
- **步骤**:
|
||||
1. 在AI聊天页面点击"技能"下拉按钮
|
||||
2. 点击某个技能
|
||||
3. 观察状态变化
|
||||
- **预期结果**:
|
||||
- 选中的技能在列表中高亮/标记
|
||||
- 技能按钮显示已选中状态
|
||||
|
||||
#### TC-7-03 [P0] 验证发送消息时Agent/技能参数传递
|
||||
- **前置条件**:用户已登录,已选中Agent和技能
|
||||
- **涉及API**:`POST /app/api/chat/conversations/{id}/messages`
|
||||
- **步骤**:
|
||||
1. 选中一个Agent和一个技能
|
||||
2. 输入消息并发送
|
||||
3. 检查发送API请求体中的agent_ids和skill_ids参数
|
||||
- **预期结果**:
|
||||
- 请求体包含选中的agent_ids(数组)
|
||||
- 请求体包含选中的skill_ids(数组)
|
||||
|
||||
#### TC-7-04 [P1] 验证取消选中Agent/技能
|
||||
- **前置条件**:用户已登录,已选中Agent
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 点击已选中的Agent(再次点击)
|
||||
2. 观察状态变化
|
||||
- **预期结果**:Agent取消选中,按钮恢复默认状态
|
||||
|
||||
#### TC-7-05 [P1] 验证Agent/技能无数据时的占位提示
|
||||
- **前置条件**:市场中无Agent或技能类型应用
|
||||
- **涉及API**:`GET /app/api/market/apps?type=agent`, `GET /app/api/market/apps?type=skill`
|
||||
- **步骤**:
|
||||
1. 在聊天页面点击Agent下拉
|
||||
- **预期结果**:显示"暂无可用 Agent"
|
||||
|
||||
---
|
||||
|
||||
### 4.8 问题8:应用市场安装/卸载状态bug+搜索
|
||||
|
||||
#### TC-8-01 [P0] 验证应用安装功能
|
||||
- **前置条件**:用户已登录,应用市场中存在未安装应用
|
||||
- **涉及API**:`POST /app/api/market/apps/{id}/install`
|
||||
- **步骤**:
|
||||
1. 进入应用市场(#/market)
|
||||
2. 点击某个未安装的应用
|
||||
3. 点击"安装"按钮
|
||||
- **预期结果**:
|
||||
- 安装成功后,按钮变为"已安装"或"卸载"
|
||||
- 应用列表中该应用状态更新
|
||||
|
||||
#### TC-8-02 [P0] 验证重复安装检测
|
||||
- **前置条件**:用户已安装某个应用
|
||||
- **涉及API**:`POST /app/api/market/apps/{id}/install`
|
||||
- **步骤**:
|
||||
1. 找到已安装的应用
|
||||
2. 尝试再次点击"安装"按钮
|
||||
- **预期结果**:
|
||||
- 前端阻止重复安装请求
|
||||
- 或后端返回"应用已安装"错误提示
|
||||
|
||||
#### TC-8-03 [P0] 验证应用卸载功能
|
||||
- **前置条件**:用户已安装某个应用
|
||||
- **涉及API**:`DELETE /app/api/market/apps/{id}/uninstall`
|
||||
- **步骤**:
|
||||
1. 找到已安装的应用
|
||||
2. 点击"卸载"按钮
|
||||
3. 确认卸载
|
||||
- **预期结果**:
|
||||
- 卸载成功后,按钮变为"安装"
|
||||
- 应用列表中该应用状态更新
|
||||
|
||||
#### TC-8-04 [P0] 验证搜索功能
|
||||
- **前置条件**:用户已登录,市场中有多个应用
|
||||
- **涉及API**:`GET /app/api/market/apps?keyword=xxx`
|
||||
- **步骤**:
|
||||
1. 在应用市场搜索框中输入关键词
|
||||
2. 观察搜索结果
|
||||
- **预期结果**:
|
||||
- 搜索结果仅显示匹配的应用
|
||||
- 清除搜索后恢复全部应用
|
||||
|
||||
#### TC-8-05 [P1] 验证安装/卸载后状态持久化
|
||||
- **前置条件**:用户已安装某应用
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 安装一个应用
|
||||
2. 刷新页面
|
||||
3. 检查该应用状态
|
||||
- **预期结果**:
|
||||
- 刷新后应用仍显示"已安装"状态
|
||||
|
||||
---
|
||||
|
||||
### 4.9 问题9:知识库构建知识图谱LLM驱动
|
||||
|
||||
#### TC-9-01 [P0] 验证知识图谱构建功能可触发
|
||||
- **前置条件**:用户已登录,创建了知识库并上传了文档
|
||||
- **涉及API**:`POST /app/api/knowledge/bases/{id}/build-graph`
|
||||
- **步骤**:
|
||||
1. 进入知识库页面(#/knowledge)
|
||||
2. 选择知识库,上传一个文本内容丰富的文档
|
||||
3. 点击"构建知识图谱"按钮
|
||||
- **预期结果**:
|
||||
- 构建过程开始(可能显示进度/加载状态)
|
||||
- 构建完成后显示成功提示
|
||||
|
||||
#### TC-9-02 [P0] 验证知识图谱包含实体和关系
|
||||
- **前置条件**:知识图谱已构建完成
|
||||
- **涉及API**:`GET /app/api/knowledge/bases/{id}/graph`
|
||||
- **步骤**:
|
||||
1. 构建完成后查看知识图谱
|
||||
2. 检查图谱节点和边
|
||||
- **预期结果**:
|
||||
- 图谱包含多个节点(实体/概念/属性)
|
||||
- 图谱包含节点间的关系/边
|
||||
- 节点类型包含entity/concept/attribute等分类
|
||||
|
||||
#### TC-9-03 [P1] 验证LLM提取的实体丰富性
|
||||
- **前置条件**:知识库中有含命名实体的文档
|
||||
- **涉及API**:`GET /app/api/knowledge/bases/{id}/graph`
|
||||
- **步骤**:
|
||||
1. 上传包含人物、组织、地点的文档
|
||||
2. 构建知识图谱
|
||||
3. 查看提取的节点
|
||||
- **预期结果**:
|
||||
- 节点包含文档中的人物、组织、地点等实体
|
||||
- 每个节点有描述信息
|
||||
- 关系有具体的关系类型(而非全为"关联")
|
||||
|
||||
#### TC-9-04 [P1] 验证图谱可视化渲染
|
||||
- **前置条件**:知识图谱已构建
|
||||
- **涉及API**:无(前端渲染)
|
||||
- **步骤**:
|
||||
1. 在知识库页面查看知识图谱可视化
|
||||
- **预期结果**:
|
||||
- 图谱以可视化方式展示(非纯文本/表格)
|
||||
- 节点颜色按类型区分
|
||||
- 支持交互(如拖拽/缩放/点击)
|
||||
|
||||
---
|
||||
|
||||
### 4.10 问题10:资产知识库文档显示+在线预览
|
||||
|
||||
#### TC-10-01 [P0] 验证知识库文档在资产"文件"分类下可见
|
||||
- **前置条件**:用户已登录,已在知识库中上传文档
|
||||
- **涉及API**:`GET /app/api/knowledge/bases` + `GET /app/api/knowledge/bases/{id}/documents`
|
||||
- **步骤**:
|
||||
1. 进入资产页面(#/assets)
|
||||
2. 切换到"文件"分类Tab
|
||||
3. 查看文档列表
|
||||
- **预期结果**:
|
||||
- 列表中包含知识库上传的文档
|
||||
- 文档显示正确的文件名和类型标签
|
||||
|
||||
#### TC-10-02 [P0] 验证文档子类型筛选功能
|
||||
- **前置条件**:资产中有不同类型文件
|
||||
- **涉及API**:无(前端筛选)
|
||||
- **步骤**:
|
||||
1. 在文件分类下点击"知识库"子筛选
|
||||
2. 观察列表变化
|
||||
- **预期结果**:仅显示来自知识库的文档,其他来源文件被过滤
|
||||
|
||||
#### TC-10-03 [P0] 验证文档在线预览功能
|
||||
- **前置条件**:资产中有文本类型文档
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 在资产列表中点击某文档
|
||||
2. 检查是否出现预览弹窗
|
||||
3. 查看预览内容
|
||||
- **预期结果**:
|
||||
- 弹窗显示文档内容预览
|
||||
- 文本文件可直接查看内容
|
||||
- 预览弹窗有关闭按钮
|
||||
|
||||
#### TC-10-04 [P1] 验证不同文件类型的预览表现
|
||||
- **前置条件**:资产中有PDF、Word等类型文档
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 分别点击PDF、Word、TXT等类型文档
|
||||
2. 观察预览弹窗表现
|
||||
- **预期结果**:
|
||||
- 每种类型都有合适的预览方式(文本内容或提示)
|
||||
- 不支持在线预览的类型给出明确提示
|
||||
|
||||
#### TC-10-05 [P1] 验证知识库文档去重显示
|
||||
- **前置条件**:同一文件在多个知识库中
|
||||
- **涉及API**:无
|
||||
- **步骤**:
|
||||
1. 查看资产列表
|
||||
2. 检查是否有重复文档
|
||||
- **预期结果**:同一文档不重复显示
|
||||
|
||||
---
|
||||
|
||||
### 4.11 问题11:AI进化对话未记录
|
||||
|
||||
#### TC-11-01 [P0] 验证对话产生后生成进化轨迹记录
|
||||
- **前置条件**:用户已登录,已通过 #/evolution 页面进入过AI进化
|
||||
- **涉及API**:`POST /app/api/chat/conversations/{id}/messages`
|
||||
- **步骤**:
|
||||
1. 进入AI聊天页面
|
||||
2. 发送一条消息并等待AI回复
|
||||
3. 进入AI进化页面(#/evolution)
|
||||
4. 查看进化事件/轨迹列表
|
||||
- **预期结果**:
|
||||
- 有新产生的对话轨迹记录
|
||||
- 记录包含对话ID和时间信息
|
||||
|
||||
#### TC-11-02 [P0] 验证AI进化页面时间线事件显示
|
||||
- **前置条件**:用户已登录,已有进化轨迹
|
||||
- **涉及API**:`GET /app/api/evolution/events`
|
||||
- **步骤**:
|
||||
1. 进入AI进化页面
|
||||
2. 查看时间线/事件列表
|
||||
- **预期结果**:
|
||||
- 显示对话相关的进化事件
|
||||
- 事件类型包括"对话"或"discovered"
|
||||
- 每条事件有时间戳
|
||||
|
||||
#### TC-11-03 [P1] 验证Pipeline处理轨迹
|
||||
- **前置条件**:用户已登录,已触发进化管道
|
||||
- **涉及API**:`POST /app/api/evolution/pipeline/trigger`
|
||||
- **步骤**:
|
||||
1. 在AI进化页面触发管道
|
||||
2. 检查轨迹状态是否从"discovered"进入下一阶段
|
||||
- **预期结果**:
|
||||
- 管道启动后有状态变化
|
||||
- 管道结束后技能树更新
|
||||
|
||||
#### TC-11-04 [P1] 验证进化仪表盘统计更新
|
||||
- **前置条件**:用户已登录,管道已处理
|
||||
- **涉及API**:`GET /app/api/evolution/dashboard`
|
||||
- **步骤**:
|
||||
1. 查看进化仪表盘
|
||||
2. 检查技能数量、轨迹数量等统计
|
||||
- **预期结果**:
|
||||
- 统计数据与实际使用情况一致
|
||||
- 技能数量在管道处理后可能增加
|
||||
|
||||
---
|
||||
|
||||
### 4.12 问题12:频道微信二维码显示生产地址
|
||||
|
||||
#### TC-12-01 [P0] 验证二维码URL使用生产地址非localhost
|
||||
- **前置条件**:用户已登录,打开了微信频道
|
||||
- **涉及API**:`POST /app/api/channels/authorize/scan?platform=wechat`
|
||||
- **步骤**:
|
||||
1. 进入频道管理页面(#/channels)
|
||||
2. 选择微信平台
|
||||
3. 点击生成二维码
|
||||
4. 检查API返回的qr_url或bind_url值
|
||||
- **预期结果**:
|
||||
- URL以生产地址开头(如https://bot.qihuyun.com)
|
||||
- URL不包含localhost、127.0.0.1
|
||||
- URL格式为 `{生产地址}/#/channels/bind?token=...&platform=wechat`
|
||||
|
||||
#### TC-12-02 [P0] 验证二维码页面正常渲染
|
||||
- **前置条件**:用户已生成二维码
|
||||
- **涉及API**:无(前端渲染)
|
||||
- **步骤**:
|
||||
1. 生成二维码后观察页面
|
||||
- **预期结果**:
|
||||
- 二维码图片清晰可见
|
||||
- 页面下方显示操作提示文字
|
||||
- 不显示localhost相关字样
|
||||
|
||||
#### TC-12-03 [P1] 验证无凭证时二维码的提示信息
|
||||
- **前置条件**:未配置微信AppID/AppSecret
|
||||
- **涉及API**:`POST /app/api/channels/authorize/scan?platform=wechat`
|
||||
- **步骤**:
|
||||
1. 不填写凭证生成二维码
|
||||
2. 检查提示信息
|
||||
- **预期结果**:
|
||||
- 返回的is_mock为true但qr_url仍为生产地址
|
||||
- 提示信息说明这是模拟版本
|
||||
|
||||
#### TC-12-04 [P1] 验证扫描状态轮询正常
|
||||
- **前置条件**:已生成二维码
|
||||
- **涉及API**:`POST /app/api/channels/authorize/scan/status?platform=wechat`
|
||||
- **步骤**:
|
||||
1. 生成二维码后观察状态轮询
|
||||
- **预期结果**:
|
||||
- 定时查询扫描状态
|
||||
- 状态正常更新(waiting/scanned/authorized/expired)
|
||||
|
||||
---
|
||||
|
||||
## 5. 测试用例统计
|
||||
|
||||
| 问题 | P0 | P1 | 合计 |
|
||||
|------|----|----|----|
|
||||
| 1. Token时间一致性 | 1 | 2 | 3 |
|
||||
| 2. 登录密码错误反馈 | 2 | 2 | 4 |
|
||||
| 3. 平台驾驶舱+累计Token | 2 | 2 | 4 |
|
||||
| 4. 广告图片上传/AI绘图 | 2 | 2 | 4 |
|
||||
| 5. 模型类型+默认LLM | 2 | 2 | 4 |
|
||||
| 6. 邮件配置+测试弹窗 | 3 | 2 | 5 |
|
||||
| 7. Agent/技能选择 | 3 | 2 | 5 |
|
||||
| 8. 应用市场安装/卸载/搜索 | 4 | 1 | 5 |
|
||||
| 9. 知识库AI图谱 | 2 | 2 | 4 |
|
||||
| 10. 资产文档+预览 | 3 | 2 | 5 |
|
||||
| 11. AI进化对话记录 | 2 | 2 | 4 |
|
||||
| 12. 频道二维码生产地址 | 2 | 2 | 4 |
|
||||
| **合计** | **28** | **23** | **51** |
|
||||
|
||||
---
|
||||
|
||||
*报告生成时间:2026-06-01*
|
||||
*生成方式:基于前后端代码深度分析,覆盖全部12个问题涉及的功能模块*
|
||||
Reference in new issue
Block a user