Files
qihuaiflow/tests/12-fix-verification-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

657 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试用例 — 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个问题涉及的功能模块*