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

28 KiB
Raw Blame History

测试用例 — 9项问题修复验证

1. 需求依据

  • 来源:项目负责人下发的9项问题修复清单
  • 修复范围:AI聊天窗口按钮、Agent部署列表、资产自动归集、聊天选择框、微信二维码URL、驾驶舱统计数据、管理员密码修改、邮件配置、日志风控数据

2. 代码功能模块概览

模块 说明 前端代码位置 后端代码位置
对话功能按钮 置顶/重命名/转知识图谱/归档/删除 ChatPage.tsx:414-514, 639-660 chat.py:122-169, 500-665
Agent部署绑定 增值服务绑定Agent弹窗 Services.tsx:496-541 services.py:391-453
资产自动归集 知识库文档同步为资产 KnowledgePage.tsx:412-505, AssetsPage.tsx:420-437 knowledge.py:529-612, 781-799
聊天选择框 知识库/Agent/技能下拉 ChatPage.tsx:331-356, 786-851 chat.py:38-44
微信二维码URL 二维码使用生产地址 ChannelPage.tsx:391-477, 672-729 channels.py:420-518, config.py:37-49
驾驶舱统计 仪表盘4项统计卡片 Dashboard.tsx:21-98 dashboard.py:18-96
管理员密码修改 密码修改表单与接口 ProfilePage.tsx:365-448 users.py:285-309, profile.py:132-156
邮件配置 SMTP配置保存与测试 SiteSettings.tsx:14-16, 97-137, 214-260 settings.py:104-308
日志与风控 6个Tab日志查看 Logs.tsx:51-694, Dashboard.tsx:128-194 logs.py:35-810, dashboard.py:50-96

3. 需求与代码差异说明

3.1 需求中未在代码中体现的内容

无。9个问题对应的功能模块在前后端代码中均有完整实现。

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

无。本次为问题修复验证,非PRD覆盖度审查,所有问题对应代码已确认。

4. 测试用例


4.1 问题1:AI聊天对话窗口功能按钮

TC-1-01 [P0] 验证对话置顶/取消置顶功能

  • 前置条件:用户已登录,存在至少2个对话,其中一个未置顶
  • 涉及API:PUT /app/api/chat/conversations/{conv_id} (pinned字段)
  • 步骤:
    1. 进入AI聊天页面,在左侧对话列表找到目标对话
    2. 点击对话右侧"更多"按钮(...),展开下拉菜单
    3. 点击"置顶"选项
  • 预期结果:
    • 该对话移动到列表最上方
    • 对话标题旁显示置顶图标(图钉)
    • 下拉菜单中"置顶"变为"取消置顶"
    • 再次点击"取消置顶",对话恢复原位置,图钉图标消失

TC-1-02 [P0] 验证对话重命名功能

  • 前置条件:用户已登录,存在至少1个对话
  • 涉及API:PUT /app/api/chat/conversations/{conv_id} (title字段)
  • 步骤:
    1. 在对话列表中点击某对话的"更多"按钮 → "重命名"
    2. 在弹出的 prompt 输入框中输入新名称"测试对话-新名称"
    3. 点击确定
  • 预期结果:
    • 对话列表中该对话标题更新为新名称
    • 无需刷新页面即可看到变化

TC-1-03 [P1] 验证重命名为空字符串

  • 前置条件:用户已登录,存在至少1个对话
  • 涉及API:PUT /app/api/chat/conversations/{conv_id}
  • 步骤:
    1. 点击某对话的"重命名"
    2. 在 prompt 输入框中不输入任何内容或输入空格
    3. 点击确定
  • 预期结果:请求不发送(前端过滤空值),对话标题保持不变

TC-1-04 [P0] 验证对话转知识图谱功能

  • 前置条件:用户已登录,存在一个包含消息的对话
  • 涉及API:POST /app/api/chat/conversations/{conv_id}/to-knowledge-graph
  • 步骤:
    1. 点击对话的"更多"按钮 → "转知识图谱"
    2. 观察弹出的三步进度弹窗
    3. 等待转换完成
  • 预期结果:
    • 弹窗依次显示:步骤1"准备转换" → 步骤2"正在分析" → 步骤3"转换完成"
    • 第三步显示生成的图节点数、边数、知识库名称
    • 对话列表中该对话显示知识图谱转换次数标记
    • 知识库列表中新增对应的知识库

TC-1-05 [P1] 验证转知识图谱失败场景

  • 前置条件:用户已登录,存在一个空对话(无消息)
  • 涉及API:POST /app/api/chat/conversations/{conv_id}/to-knowledge-graph
  • 步骤:
    1. 点击空对话的"转知识图谱"
    2. 等待弹窗流程
  • 预期结果:
    • 弹窗显示错误信息(如"转换失败"或相应错误提示)
    • 不生成知识库记录

TC-1-06 [P0] 验证对话归档功能

  • 前置条件:用户已登录,存在至少1个活跃状态对话
  • 涉及API:PUT /app/api/chat/conversations/{conv_id} (status字段)
  • 步骤:
    1. 点击对话"更多"按钮 → "归档"
    2. 观察对话列表变化
    3. 切换到归档视图查看
  • 预期结果:
    • 该对话从活跃列表中移除
    • 下拉菜单中"归档"变为"取消归档"
    • 可通过"取消归档"恢复对话到活跃列表

TC-1-07 [P0] 验证对话删除功能

  • 前置条件:用户已登录,存在至少1个对话
  • 涉及API:DELETE /app/api/chat/conversations/{conv_id}
  • 步骤:
    1. 点击对话"更多"按钮 → "删除"
    2. 在弹出的确认对话框中点击"确定"
    3. 观察对话列表
  • 预期结果:
    • 该对话从列表中消失
    • 列表自动选中下一个对话(如有)
    • 若删除的是最后一个对话,页面不选中任何对话

TC-1-08 [P1] 验证删除操作取消

  • 前置条件:用户已登录,存在至少1个对话
  • 涉及API:无(取消不发送API请求)
  • 步骤:
    1. 点击对话"删除"
    2. 在确认对话框中点击"取消"
  • 预期结果:对话保持原样,不发生任何变化

TC-1-09 [P2] 验证下拉菜单在点击对话区域外关闭

  • 前置条件:用户已登录,已展开某对话的下拉菜单
  • 涉及API:无
  • 步骤:
    1. 点击某对话"更多"按钮展开下拉菜单
    2. 点击对话列表其他区域
  • 预期结果:下拉菜单自动关闭

4.2 问题2:Agent部署时能找到开发文档和系统应用列表

TC-2-01 [P0] 验证Agent分配弹窗显示可用Agent列表

  • 前置条件:管理员已登录,市场中有已发布的Agent类型应用(status为published/active),存在"应用定制"类型的服务
  • 涉及API:GET /app/api/admin/services/agents
  • 步骤:
    1. 进入管理后台 → 增值服务页面
    2. 找到类型为"应用定制"的服务
    3. 点击该服务行的"Agent"按钮
    4. 观察弹出的Agent分配弹窗
  • 预期结果:
    • 弹窗标题为"选择要绑定的Agent"
    • 列表显示所有已发布的Agent应用
    • 每个Agent显示:名称、描述、发布者

TC-2-02 [P1] 验证Agent列表为空时的提示

  • 前置条件:管理员已登录,市场中无已发布的Agent类型应用
  • 涉及API:GET /app/api/admin/services/agents
  • 步骤:
    1. 进入增值服务页面
    2. 对某"应用定制"服务点击"Agent"按钮
  • 预期结果:
    • 弹窗中显示"暂无可用Agent"占位提示
    • 不显示空白列表

TC-2-03 [P0] 验证Agent绑定成功

  • 前置条件:管理员已登录,存在可用Agent,目标服务未绑定Agent
  • 涉及API:PUT /app/api/admin/services/{id}/agent
  • 步骤:
    1. 打开Agent分配弹窗
    2. 点击某个Agent的"选择"按钮
    3. 观察结果
  • 预期结果:
    • Agent绑定成功,弹窗关闭
    • 服务列表中该服务的Agent字段更新为绑定的Agent名称

TC-2-04 [P1] 验证非"应用定制"类型服务不显示Agent按钮

  • 前置条件:管理员已登录,存在系统内置类型服务
  • 涉及API:无
  • 步骤:
    1. 进入增值服务页面
    2. 查看系统内置类型服务的操作按钮
  • 预期结果:非"应用定制"(app_custom)类型服务不显示"Agent"按钮

4.3 问题3:资产页面知识库上传文件按分类自动归集

TC-3-01 [P0] 验证知识库上传文档自动归集到资产"文档"分类

  • 前置条件:用户已登录,已创建一个知识库
  • 涉及API:POST /app/api/knowledge/bases/{base_id}/documents
  • 步骤:
    1. 进入知识库页面,选择一个知识库
    2. 点击"上传文档",选择一个PDF文件(如 test.pdf)
    3. 确认上传
    4. 上传完成后,切换到资产页面
    5. 在资产页面选择"文档"分类
  • 预期结果:
    • 资产页面"文档"分类下显示刚上传的文件
    • 文件显示名称、文件类型(PDF)、大小等信息
    • 文件描述包含"知识库文档"标识

TC-3-02 [P0] 验证不同文件类型上传后正确归集

  • 前置条件:用户已登录,已创建知识库
  • 涉及API:POST /app/api/knowledge/bases/{base_id}/documents
  • 步骤:
    1. 上传一个 Word 文档(.docx)
    2. 上传一个 Excel 表格(.xlsx)
    3. 切换到资产页面→文档分类
    4. 分别使用子类型筛选 Word、Excel
  • 预期结果:
    • 在"Word"子筛选下只显示 Word 文档
    • 在"Excel"子筛选下只显示 Excel 文档
    • "全部文件"下显示所有上传的文档

TC-3-03 [P1] 验证资产页面分类Tab切换功能正常

  • 前置条件:用户已登录,资产中有文档类型文件
  • 涉及API:GET /app/api/assets (category参数)
  • 步骤:
    1. 进入资产页面
    2. 依次点击"全部"→"文档"→"图片"→"视频"→"音频"→"小说"分类Tab
  • 预期结果:
    • 每个Tab切换后显示对应分类的资产
    • 文档分类下显示子类型筛选栏
    • 非文档分类下不显示子类型筛选栏

TC-3-04 [P1] 验证上传同名文件不导致资产重复

  • 前置条件:用户已登录,已上传过文件 test.pdf
  • 涉及API:POST /app/api/knowledge/bases/{base_id}/documents
  • 步骤:
    1. 再次上传同名文件 test.pdf
    2. 查看资产页面文档分类
  • 预期结果:
    • 两个文档分别创建独立的资产记录(不同ID)
    • 两者均显示在资产列表中

TC-3-05 [P2] 验证空知识库上传后资产数量同步

  • 前置条件:用户已登录,新创建的知识库(无文档)
  • 涉及API:POST /app/api/knowledge/bases/{base_id}/documents
  • 步骤:
    1. 记录当前资产页面文档数量
    2. 上传一个新文档
    3. 再次查看资产页面
  • 预期结果:资产页面文档数+1

4.4 问题4:AI聊天选择框可显示知识库文件和Agent/技能应用

TC-4-01 [P0] 验证聊天输入框知识库下拉显示

  • 前置条件:用户已登录,已创建至少1个知识库(含文档)
  • 涉及API:GET /app/api/knowledge/bases
  • 步骤:
    1. 进入AI聊天页面
    2. 查看输入框上方的附件按钮区
    3. 点击"知识库"按钮
  • 预期结果:
    • 下拉菜单标题显示"选择知识库"
    • 列出所有知识库,每个显示名称和文档数量
    • 文档数量格式如"3 文档"

TC-4-02 [P0] 验证Agent下拉显示

  • 前置条件:用户已登录,市场中有已发布的Agent应用
  • 涉及API:GET /app/api/market/apps?type=agent
  • 步骤:
    1. 进入AI聊天页面
    2. 点击输入框上方的"Agent"按钮
  • 预期结果:
    • 下拉菜单标题显示"选择 Agent"
    • 列出所有已发布的Agent应用,显示名称

TC-4-03 [P0] 验证技能下拉显示

  • 前置条件:用户已登录,市场中有已发布的技能应用
  • 涉及API:GET /app/api/market/apps?type=skill
  • 步骤:
    1. 进入AI聊天页面
    2. 点击输入框上方的"技能"按钮
  • 预期结果:
    • 下拉菜单标题显示"选择技能"
    • 列出所有技能,显示名称

TC-4-04 [P1] 验证知识库为空时的占位提示

  • 前置条件:用户已登录,用户下无知识库
  • 涉及API:GET /app/api/knowledge/bases
  • 步骤:
    1. 进入AI聊天页面
    2. 点击"知识库"下拉按钮
  • 预期结果:显示"暂无可用知识库"占位

TC-4-05 [P1] 验证Agent为空时的占位提示

  • 前置条件:用户已登录,市场无Agent类型应用
  • 涉及API:GET /app/api/market/apps?type=agent
  • 步骤:
    1. 进入AI聊天页面
    2. 点击"Agent"下拉按钮
  • 预期结果:显示"暂无可用 Agent"占位

TC-4-06 [P1] 验证技能为空时的占位提示

  • 前置条件:用户已登录,市场无技能类型应用
  • 涉及API:GET /app/api/market/apps?type=skill
  • 步骤:
    1. 进入AI聊天页面
    2. 点击"技能"下拉按钮
  • 预期结果:显示"暂无可用技能"占位

TC-4-07 [P2] 验证下拉菜单可正常关闭

  • 前置条件:用户已登录,已展开某个附件下拉
  • 涉及API:无
  • 步骤:
    1. 点击"知识库"展开下拉
    2. 再次点击"知识库"或点击页面其他区域
  • 预期结果:下拉菜单关闭

4.5 问题5:频道微信二维码生成真实生产地址(非localhost)

TC-5-01 [P0] 验证微信二维码URL使用生产地址

  • 前置条件:用户已登录,已配置微信频道(无需填写AppID/AppSecret)
  • 涉及API:POST /app/api/channels/authorize/scan?platform=wechat
  • 步骤:
    1. 进入频道管理页面
    2. 选择微信平台
    3. 点击"生成授权二维码"按钮
    4. 查看API返回的 qr_url 内容
  • 预期结果:
    • API返回的二维码数据中包含的URL以生产地址(APP_ACCESS_URL)开头
    • URL格式为 {生产地址}/#/channels/bind?token=xxx&platform=wechat
    • 二维码URL不是 http://localhost:8080 或 http://127.0.0.1

TC-5-02 [P0] 验证二维码正常渲染

  • 前置条件:用户已登录,已触发二维码生成
  • 涉及API:POST /app/api/channels/authorize/scan?platform=wechat
  • 步骤:
    1. 在频道页面点击"生成授权二维码"
    2. 观察页面二维码区域
  • 预期结果:
    • 页面显示清晰的二维码图片
    • 二维码下方显示"请使用微信扫描二维码完成授权"
    • 二维码生成过程中显示"正在生成授权二维码..."加载状态

TC-5-03 [P1] 验证未配置凭证时的二维码提示

  • 前置条件:用户已登录,未填写微信AppID和AppSecret
  • 涉及API:POST /app/api/channels/authorize/scan?platform=wechat
  • 步骤:
    1. 不填写AppID/AppSecret
    2. 点击"生成授权二维码"
  • 预期结果:
    • 成功生成本地模拟二维码
    • 返回数据中 is_mock 为 true
    • 提示消息说明这是模拟测试二维码

TC-5-04 [P1] 验证二维码过期处理

  • 前置条件:用户已登录,已生成二维码
  • 涉及API:POST /app/api/channels/authorize/scan/status?platform=wechat
  • 步骤:
    1. 生成二维码后等待超过有效期(约5分钟)
    2. 观察页面状态变化
  • 预期结果:页面显示"二维码已过期,请重新生成"提示

TC-5-05 [P2] 验证二维码生成失败时的错误提示

  • 前置条件:用户已登录
  • 涉及API:POST /app/api/channels/authorize/scan?platform=wechat
  • 步骤:
    1. 模拟网络异常或后端返回错误
    2. 点击生成二维码
  • 预期结果:
    • 页面显示错误提示信息
    • 不显示损坏的二维码图片

4.6 问题6:平台驾驶舱显示真实统计数据

TC-6-01 [P0] 验证仪表盘4项统计卡片显示真实数据

  • 前置条件:管理员已登录,数据库中存在活跃用户、启用模型、今日订单、今日Token记录
  • 涉及API:GET /app/api/admin/dashboard/stats
  • 步骤:
    1. 进入管理后台首页(驾驶舱)
    2. 观察4个统计卡片
  • 预期结果:
    • "用户总数"卡片显示数据库中status="active"的用户数(非0或硬编码值)
    • "活跃模型数"卡片显示is_enabled=True的模型数
    • "今日订单数"卡片显示今日创建的订单数
    • "今日Token消耗"卡片显示今日Token消耗总数(≥10000时以"万"单位显示)

TC-6-02 [P0] 验证驾驶舱显示最近操作日志

  • 前置条件:管理员已登录,数据库中有操作日志记录
  • 涉及API:GET /app/api/admin/dashboard/recent-logs
  • 步骤:
    1. 进入管理后台首页
    2. 向下滚动到"最近操作日志"区域
  • 预期结果:
    • 表格显示最近操作日志(最多10条)
    • 每条显示:用户、操作、目标、详情、IP、时间
    • 数据与数据库OperationLog表一致

TC-6-03 [P0] 验证驾驶舱显示最近审计日志

  • 前置条件:管理员已登录,数据库中有审计日志记录
  • 涉及API:GET /app/api/admin/dashboard/recent-audit
  • 步骤:
    1. 进入管理后台首页
    2. 向下滚动到"最近审计日志"区域
  • 预期结果:
    • 表格显示最近审计日志(最多10条)
    • 每条显示:操作人、操作类型、目标类型、详情、时间
    • 数据与数据库AuditLog表一致

TC-6-04 [P1] 验证统计卡片值为0时的显示

  • 前置条件:管理员已登录,数据库中今日无订单、无Token消耗
  • 涉及API:GET /app/api/admin/dashboard/stats
  • 步骤:
    1. 进入管理后台首页
  • 预期结果:
    • "今日订单数"显示"0"
    • "今日Token消耗"显示"0"
    • 不显示NaN、undefined、null等异常值

TC-6-05 [P1] 验证驾驶舱数据加载中状态

  • 前置条件:管理员已登录
  • 涉及API:GET /app/api/admin/dashboard/stats
  • 步骤:
    1. 进入管理后台首页
    2. 观察加载过程
  • 预期结果:
    • 数据加载期间显示加载动画和"加载仪表盘数据..."文字
    • 加载完成后数据正确渲染

TC-6-06 [P2] 验证统计卡片使用正确的数字格式

  • 前置条件:管理员已登录,用户数较大(如1000+)
  • 涉及API:GET /app/api/admin/dashboard/stats
  • 步骤:
    1. 进入管理后台首页
  • 预期结果:
    • "用户总数"使用千位分隔符(如"1,234")
    • "今日Token消耗"≥10000时显示为"X.X万"格式

4.7 问题7:管理员密码修改功能

TC-7-01 [P0] 验证正常修改密码流程

  • 前置条件:用户已登录,知道当前密码
  • 涉及API:PUT /app/api/profile/password
  • 步骤:
    1. 进入个人中心 → 安全设置
    2. 在"修改密码"区域输入旧密码
    3. 输入新密码(至少6位,如"NewPass123")
    4. 在确认框中再次输入相同新密码
    5. 点击"修改密码"按钮
  • 预期结果:
    • 显示"密码修改成功"绿色提示
    • 三个输入框被清空
    • 可使用新密码重新登录

TC-7-02 [P1] 验证旧密码为空时的校验

  • 前置条件:用户已登录
  • 涉及API:无(前端拦截)
  • 步骤:
    1. 进入安全设置
    2. 不输入旧密码
    3. 输入新密码和确认密码
    4. 点击"修改密码"
  • 预期结果:
    • 显示红色错误提示"请输入旧密码"
    • 不发送API请求
    • 页面保持当前状态

TC-7-03 [P1] 验证新密码长度不足6位的校验

  • 前置条件:用户已登录
  • 涉及API:无(前端拦截)
  • 步骤:
    1. 输入正确的旧密码
    2. 输入新密码"12345"(5位)
    3. 点击"修改密码"
  • 预期结果:
    • 显示红色错误提示"新密码长度至少为6位"
    • 不发送API请求

TC-7-04 [P1] 验证两次新密码输入不一致的校验

  • 前置条件:用户已登录
  • 涉及API:无(前端拦截)
  • 步骤:
    1. 输入正确的旧密码
    2. 输入新密码"NewPass123"
    3. 在确认框中输入"NewPass456"
    4. 点击"修改密码"
  • 预期结果:
    • 显示红色错误提示"两次输入的新密码不一致"
    • 不发送API请求

TC-7-05 [P1] 验证旧密码错误的后端校验

  • 前置条件:用户已登录
  • 涉及API:PUT /app/api/profile/password
  • 步骤:
    1. 输入错误的旧密码
    2. 输入符合要求的新密码并确认
    3. 点击"修改密码"
  • 预期结果:
    • 显示错误提示"原密码错误"(来自后端返回)
    • 密码未被修改

TC-7-06 [P2] 验证修改密码时按钮Loading状态

  • 前置条件:用户已登录
  • 涉及API:PUT /app/api/profile/password
  • 步骤:
    1. 输入所有正确信息
    2. 点击"修改密码"
    3. 观察按钮状态
  • 预期结果:
    • 按钮变为"修改中..."并禁用
    • 请求完成后按钮恢复为"修改密码"

4.8 问题8:网站基础设置-邮件配置保存和测试

TC-8-01 [P0] 验证邮件配置保存功能

  • 前置条件:管理员已登录
  • 涉及API:PUT /app/api/admin/settings/email
  • 步骤:
    1. 进入管理后台 → 网站基础设置
    2. 滚动到"邮件配置"卡片
    3. 填写SMTP服务器、端口、用户名、密码、发件地址
    4. 点击"保存"按钮
  • 预期结果:
    • 页面顶部显示绿色成功提示"邮件配置 保存成功"
    • 提示在2秒后自动消失
    • 刷新页面后配置仍然保留(从后端加载)

TC-8-02 [P0] 验证邮件配置回显

  • 前置条件:管理员已登录,之前已保存过邮件配置
  • 涉及API:GET /app/api/admin/settings/email
  • 步骤:
    1. 进入网站基础设置页面
    2. 查看邮件配置卡片的各字段
  • 预期结果:
    • 各字段回显之前保存的值
    • SMTP服务器、端口、用户名、发件地址等正确显示
    • 密码字段可能脱敏或正确回显

TC-8-03 [P0] 验证发送测试邮件功能(有效配置)

  • 前置条件:管理员已登录,已保存有效SMTP配置
  • 涉及API:POST /app/api/admin/settings/email/test
  • 步骤:
    1. 在邮件配置卡片点击"发送测试邮件"按钮
    2. 等待结果
  • 预期结果:
    • 显示测试结果提示(成功或失败消息)
    • 提示在5秒后自动消失
    • 成功时显示接收邮箱地址

TC-8-04 [P1] 验证未保存配置时发送测试邮件

  • 前置条件:管理员已登录,从未保存过邮件配置(或SMTP主机为空)
  • 涉及API:POST /app/api/admin/settings/email/test
  • 步骤:
    1. 不填写任何邮件配置
    2. 直接点击"发送测试邮件"
  • 预期结果:
    • 显示错误提示"邮件配置未设置,请先保存邮件配置"
    • 不尝试发送邮件

TC-8-05 [P1] 验证SMTP认证失败的错误处理

  • 前置条件:管理员已登录,保存了错误的SMTP用户名/密码
  • 涉及API:POST /app/api/admin/settings/email/test
  • 步骤:
    1. 填写错误SMTP认证信息并保存
    2. 点击"发送测试邮件"
  • 预期结果:
    • 显示"SMTP认证失败,请检查用户名和密码"错误

TC-8-06 [P1] 验证SMTP连接失败的错误处理

  • 前置条件:管理员已登录,保存了不可达的SMTP服务器地址
  • 涉及API:POST /app/api/admin/settings/email/test
  • 步骤:
    1. 填写不存在的SMTP服务器地址并保存
    2. 点击"发送测试邮件"
  • 预期结果:
    • 显示"无法连接到SMTP服务器 xxx:xxx"错误

TC-8-07 [P2] 验证TLS开关控制

  • 前置条件:管理员已登录
  • 涉及API:PUT /app/api/admin/settings/email, POST /app/api/admin/settings/email/test
  • 步骤:
    1. 勾选/取消勾选TLS复选框
    2. 保存配置
    3. 检查TLS开关状态是否被保存
  • 预期结果:
    • TLS开关状态正确保存
    • 后端根据use_tls字段决定是否使用starttls

4.9 问题9:日志与风控显示真实审计/操作日志数据

TC-9-01 [P0] 验证操作日志Tab显示真实数据

  • 前置条件:管理员已登录,数据库OperationLog表中有记录
  • 涉及API:GET /app/api/admin/logs/operations
  • 步骤:
    1. 进入管理后台 → 日志风控页面
    2. 确认默认选中"操作日志"Tab
    3. 查看表格数据
  • 预期结果:
    • 表格显示操作日志记录
    • 每条记录包含:用户名、操作(action)、目标(target)、详情、IP、时间
    • 数据来源于数据库真实记录(非占位/模拟数据)

TC-9-02 [P0] 验证审计日志Tab显示真实数据

  • 前置条件:管理员已登录,数据库AuditLog表中有记录
  • 涉及API:GET /app/api/admin/logs/audit-logs
  • 步骤:
    1. 进入日志风控页面
    2. 切换到"审计日志"Tab
    3. 查看表格数据
  • 预期结果:
    • 表格显示审计日志记录
    • 每条记录包含:管理员(admin_name)、操作(action)、目标类型(target_type)、详情、时间
    • 数据来源于数据库真实记录

TC-9-03 [P0] 验证日志统计概览显示

  • 前置条件:管理员已登录
  • 涉及API:GET /app/api/admin/logs/stats
  • 步骤:
    1. 进入日志风控页面
    2. 查看页面顶部的统计概览
  • 预期结果:
    • 显示今日API调用、错误数/错误率、活跃用户、Token消耗、操作日志数、慢请求数
    • 数值从数据库实时计算(非硬编码)

TC-9-04 [P0] 验证6个Tab切换功能

  • 前置条件:管理员已登录
  • 涉及API:各Tab对应API
  • 步骤:
    1. 依次点击"操作日志"→"Token日志"→"付费日志"→"审计日志"→"API统计"→"慢请求"
  • 预期结果:
    • 每个Tab切换后显示对应的数据表格
    • 表格列头与数据类型匹配
    • 切换Tab时筛选条件重置

TC-9-05 [P1] 验证操作日志筛选功能

  • 前置条件:管理员已登录,数据库中有多条操作日志
  • 涉及API:GET /app/api/admin/logs/operations?keyword=xxx&action=xxx
  • 步骤:
    1. 在操作日志Tab展开筛选条件
    2. 输入关键词或选择操作类型
    3. 点击查询
  • 预期结果:
    • 列表按筛选条件过滤数据
    • 分页信息更新

TC-9-06 [P1] 验证日志分页功能

  • 前置条件:管理员已登录,日志数据超过20条
  • 涉及API:各日志API(含page参数)
  • 步骤:
    1. 查看日志列表
    2. 点击"下一页"
  • 预期结果:
    • 加载第二页数据
    • 分页信息显示"共 X 条记录,第 2/Y 页"

TC-9-07 [P1] 验证驾驶舱中操作日志和审计日志数据一致性

  • 前置条件:管理员已登录
  • 涉及API:GET /app/api/admin/dashboard/recent-logs, GET /app/api/admin/dashboard/recent-audit, GET /app/api/admin/logs/operations, GET /app/api/admin/logs/audit-logs
  • 步骤:
    1. 查看管理后台首页的"最近操作日志"
    2. 切换到日志风控页面查看操作日志Tab
    3. 对比数据
  • 预期结果:
    • 首页最近操作日志与日志风控操作日志Tab中的前几条记录一致
    • 首页最近审计日志与日志风控审计日志Tab中的前几条记录一致

TC-9-08 [P2] 验证操作日志随用户操作实时更新

  • 前置条件:管理员已登录
  • 涉及API:GET /app/api/admin/logs/operations
  • 步骤:
    1. 查看当前操作日志列表
    2. 在另一窗口执行某项操作(如修改配置)
    3. 刷新日志页面
  • 预期结果:新产生的操作日志出现在列表中

TC-9-09 [P2] 验证日志不可删除

  • 前置条件:管理员已登录,日志页面有记录
  • 涉及API:无
  • 步骤:
    1. 查看日志页面各Tab
    2. 检查是否有删除按钮或删除操作入口
  • 预期结果:日志页面不提供删除日志的功能按钮

5. 测试用例统计

问题 P0 P1 P2 合计
1. AI聊天对话功能按钮 4 3 1 8
2. Agent部署绑定 2 2 0 4
3. 资产自动归集 2 2 1 5
4. 聊天选择框 3 3 1 7
5. 微信二维码URL 2 2 1 5
6. 驾驶舱统计数据 3 2 1 6
7. 管理员密码修改 1 4 1 6
8. 邮件配置 3 3 1 7
9. 日志与风控 4 3 2 9
合计 24 24 9 57

报告生成时间:2026-06-01 生成方式:基于前后端代码分析,覆盖全部9个问题涉及的功能模块