- 前端 React+TypeScript (源码+构建产物) - 后端 Python FastAPI - 数据库迁移 001-015 - Docker部署配置 - 微信ClawBot API频道绑定 - 项目文档 README.md
28 KiB
28 KiB
测试用例 — 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字段) - 步骤:
- 进入AI聊天页面,在左侧对话列表找到目标对话
- 点击对话右侧"更多"按钮(...),展开下拉菜单
- 点击"置顶"选项
- 预期结果:
- 该对话移动到列表最上方
- 对话标题旁显示置顶图标(图钉)
- 下拉菜单中"置顶"变为"取消置顶"
- 再次点击"取消置顶",对话恢复原位置,图钉图标消失
TC-1-02 [P0] 验证对话重命名功能
- 前置条件:用户已登录,存在至少1个对话
- 涉及API:
PUT /app/api/chat/conversations/{conv_id}(title字段) - 步骤:
- 在对话列表中点击某对话的"更多"按钮 → "重命名"
- 在弹出的 prompt 输入框中输入新名称"测试对话-新名称"
- 点击确定
- 预期结果:
- 对话列表中该对话标题更新为新名称
- 无需刷新页面即可看到变化
TC-1-03 [P1] 验证重命名为空字符串
- 前置条件:用户已登录,存在至少1个对话
- 涉及API:
PUT /app/api/chat/conversations/{conv_id} - 步骤:
- 点击某对话的"重命名"
- 在 prompt 输入框中不输入任何内容或输入空格
- 点击确定
- 预期结果:请求不发送(前端过滤空值),对话标题保持不变
TC-1-04 [P0] 验证对话转知识图谱功能
- 前置条件:用户已登录,存在一个包含消息的对话
- 涉及API:
POST /app/api/chat/conversations/{conv_id}/to-knowledge-graph - 步骤:
- 点击对话的"更多"按钮 → "转知识图谱"
- 观察弹出的三步进度弹窗
- 等待转换完成
- 预期结果:
- 弹窗依次显示:步骤1"准备转换" → 步骤2"正在分析" → 步骤3"转换完成"
- 第三步显示生成的图节点数、边数、知识库名称
- 对话列表中该对话显示知识图谱转换次数标记
- 知识库列表中新增对应的知识库
TC-1-05 [P1] 验证转知识图谱失败场景
- 前置条件:用户已登录,存在一个空对话(无消息)
- 涉及API:
POST /app/api/chat/conversations/{conv_id}/to-knowledge-graph - 步骤:
- 点击空对话的"转知识图谱"
- 等待弹窗流程
- 预期结果:
- 弹窗显示错误信息(如"转换失败"或相应错误提示)
- 不生成知识库记录
TC-1-06 [P0] 验证对话归档功能
- 前置条件:用户已登录,存在至少1个活跃状态对话
- 涉及API:
PUT /app/api/chat/conversations/{conv_id}(status字段) - 步骤:
- 点击对话"更多"按钮 → "归档"
- 观察对话列表变化
- 切换到归档视图查看
- 预期结果:
- 该对话从活跃列表中移除
- 下拉菜单中"归档"变为"取消归档"
- 可通过"取消归档"恢复对话到活跃列表
TC-1-07 [P0] 验证对话删除功能
- 前置条件:用户已登录,存在至少1个对话
- 涉及API:
DELETE /app/api/chat/conversations/{conv_id} - 步骤:
- 点击对话"更多"按钮 → "删除"
- 在弹出的确认对话框中点击"确定"
- 观察对话列表
- 预期结果:
- 该对话从列表中消失
- 列表自动选中下一个对话(如有)
- 若删除的是最后一个对话,页面不选中任何对话
TC-1-08 [P1] 验证删除操作取消
- 前置条件:用户已登录,存在至少1个对话
- 涉及API:无(取消不发送API请求)
- 步骤:
- 点击对话"删除"
- 在确认对话框中点击"取消"
- 预期结果:对话保持原样,不发生任何变化
TC-1-09 [P2] 验证下拉菜单在点击对话区域外关闭
- 前置条件:用户已登录,已展开某对话的下拉菜单
- 涉及API:无
- 步骤:
- 点击某对话"更多"按钮展开下拉菜单
- 点击对话列表其他区域
- 预期结果:下拉菜单自动关闭
4.2 问题2:Agent部署时能找到开发文档和系统应用列表
TC-2-01 [P0] 验证Agent分配弹窗显示可用Agent列表
- 前置条件:管理员已登录,市场中有已发布的Agent类型应用(status为published/active),存在"应用定制"类型的服务
- 涉及API:
GET /app/api/admin/services/agents - 步骤:
- 进入管理后台 → 增值服务页面
- 找到类型为"应用定制"的服务
- 点击该服务行的"Agent"按钮
- 观察弹出的Agent分配弹窗
- 预期结果:
- 弹窗标题为"选择要绑定的Agent"
- 列表显示所有已发布的Agent应用
- 每个Agent显示:名称、描述、发布者
TC-2-02 [P1] 验证Agent列表为空时的提示
- 前置条件:管理员已登录,市场中无已发布的Agent类型应用
- 涉及API:
GET /app/api/admin/services/agents - 步骤:
- 进入增值服务页面
- 对某"应用定制"服务点击"Agent"按钮
- 预期结果:
- 弹窗中显示"暂无可用Agent"占位提示
- 不显示空白列表
TC-2-03 [P0] 验证Agent绑定成功
- 前置条件:管理员已登录,存在可用Agent,目标服务未绑定Agent
- 涉及API:
PUT /app/api/admin/services/{id}/agent - 步骤:
- 打开Agent分配弹窗
- 点击某个Agent的"选择"按钮
- 观察结果
- 预期结果:
- Agent绑定成功,弹窗关闭
- 服务列表中该服务的Agent字段更新为绑定的Agent名称
TC-2-04 [P1] 验证非"应用定制"类型服务不显示Agent按钮
- 前置条件:管理员已登录,存在系统内置类型服务
- 涉及API:无
- 步骤:
- 进入增值服务页面
- 查看系统内置类型服务的操作按钮
- 预期结果:非"应用定制"(app_custom)类型服务不显示"Agent"按钮
4.3 问题3:资产页面知识库上传文件按分类自动归集
TC-3-01 [P0] 验证知识库上传文档自动归集到资产"文档"分类
- 前置条件:用户已登录,已创建一个知识库
- 涉及API:
POST /app/api/knowledge/bases/{base_id}/documents - 步骤:
- 进入知识库页面,选择一个知识库
- 点击"上传文档",选择一个PDF文件(如 test.pdf)
- 确认上传
- 上传完成后,切换到资产页面
- 在资产页面选择"文档"分类
- 预期结果:
- 资产页面"文档"分类下显示刚上传的文件
- 文件显示名称、文件类型(PDF)、大小等信息
- 文件描述包含"知识库文档"标识
TC-3-02 [P0] 验证不同文件类型上传后正确归集
- 前置条件:用户已登录,已创建知识库
- 涉及API:
POST /app/api/knowledge/bases/{base_id}/documents - 步骤:
- 上传一个 Word 文档(.docx)
- 上传一个 Excel 表格(.xlsx)
- 切换到资产页面→文档分类
- 分别使用子类型筛选 Word、Excel
- 预期结果:
- 在"Word"子筛选下只显示 Word 文档
- 在"Excel"子筛选下只显示 Excel 文档
- "全部文件"下显示所有上传的文档
TC-3-03 [P1] 验证资产页面分类Tab切换功能正常
- 前置条件:用户已登录,资产中有文档类型文件
- 涉及API:
GET /app/api/assets(category参数) - 步骤:
- 进入资产页面
- 依次点击"全部"→"文档"→"图片"→"视频"→"音频"→"小说"分类Tab
- 预期结果:
- 每个Tab切换后显示对应分类的资产
- 文档分类下显示子类型筛选栏
- 非文档分类下不显示子类型筛选栏
TC-3-04 [P1] 验证上传同名文件不导致资产重复
- 前置条件:用户已登录,已上传过文件 test.pdf
- 涉及API:
POST /app/api/knowledge/bases/{base_id}/documents - 步骤:
- 再次上传同名文件 test.pdf
- 查看资产页面文档分类
- 预期结果:
- 两个文档分别创建独立的资产记录(不同ID)
- 两者均显示在资产列表中
TC-3-05 [P2] 验证空知识库上传后资产数量同步
- 前置条件:用户已登录,新创建的知识库(无文档)
- 涉及API:
POST /app/api/knowledge/bases/{base_id}/documents - 步骤:
- 记录当前资产页面文档数量
- 上传一个新文档
- 再次查看资产页面
- 预期结果:资产页面文档数+1
4.4 问题4:AI聊天选择框可显示知识库文件和Agent/技能应用
TC-4-01 [P0] 验证聊天输入框知识库下拉显示
- 前置条件:用户已登录,已创建至少1个知识库(含文档)
- 涉及API:
GET /app/api/knowledge/bases - 步骤:
- 进入AI聊天页面
- 查看输入框上方的附件按钮区
- 点击"知识库"按钮
- 预期结果:
- 下拉菜单标题显示"选择知识库"
- 列出所有知识库,每个显示名称和文档数量
- 文档数量格式如"3 文档"
TC-4-02 [P0] 验证Agent下拉显示
- 前置条件:用户已登录,市场中有已发布的Agent应用
- 涉及API:
GET /app/api/market/apps?type=agent - 步骤:
- 进入AI聊天页面
- 点击输入框上方的"Agent"按钮
- 预期结果:
- 下拉菜单标题显示"选择 Agent"
- 列出所有已发布的Agent应用,显示名称
TC-4-03 [P0] 验证技能下拉显示
- 前置条件:用户已登录,市场中有已发布的技能应用
- 涉及API:
GET /app/api/market/apps?type=skill - 步骤:
- 进入AI聊天页面
- 点击输入框上方的"技能"按钮
- 预期结果:
- 下拉菜单标题显示"选择技能"
- 列出所有技能,显示名称
TC-4-04 [P1] 验证知识库为空时的占位提示
- 前置条件:用户已登录,用户下无知识库
- 涉及API:
GET /app/api/knowledge/bases - 步骤:
- 进入AI聊天页面
- 点击"知识库"下拉按钮
- 预期结果:显示"暂无可用知识库"占位
TC-4-05 [P1] 验证Agent为空时的占位提示
- 前置条件:用户已登录,市场无Agent类型应用
- 涉及API:
GET /app/api/market/apps?type=agent - 步骤:
- 进入AI聊天页面
- 点击"Agent"下拉按钮
- 预期结果:显示"暂无可用 Agent"占位
TC-4-06 [P1] 验证技能为空时的占位提示
- 前置条件:用户已登录,市场无技能类型应用
- 涉及API:
GET /app/api/market/apps?type=skill - 步骤:
- 进入AI聊天页面
- 点击"技能"下拉按钮
- 预期结果:显示"暂无可用技能"占位
TC-4-07 [P2] 验证下拉菜单可正常关闭
- 前置条件:用户已登录,已展开某个附件下拉
- 涉及API:无
- 步骤:
- 点击"知识库"展开下拉
- 再次点击"知识库"或点击页面其他区域
- 预期结果:下拉菜单关闭
4.5 问题5:频道微信二维码生成真实生产地址(非localhost)
TC-5-01 [P0] 验证微信二维码URL使用生产地址
- 前置条件:用户已登录,已配置微信频道(无需填写AppID/AppSecret)
- 涉及API:
POST /app/api/channels/authorize/scan?platform=wechat - 步骤:
- 进入频道管理页面
- 选择微信平台
- 点击"生成授权二维码"按钮
- 查看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 - 步骤:
- 在频道页面点击"生成授权二维码"
- 观察页面二维码区域
- 预期结果:
- 页面显示清晰的二维码图片
- 二维码下方显示"请使用微信扫描二维码完成授权"
- 二维码生成过程中显示"正在生成授权二维码..."加载状态
TC-5-03 [P1] 验证未配置凭证时的二维码提示
- 前置条件:用户已登录,未填写微信AppID和AppSecret
- 涉及API:
POST /app/api/channels/authorize/scan?platform=wechat - 步骤:
- 不填写AppID/AppSecret
- 点击"生成授权二维码"
- 预期结果:
- 成功生成本地模拟二维码
- 返回数据中 is_mock 为 true
- 提示消息说明这是模拟测试二维码
TC-5-04 [P1] 验证二维码过期处理
- 前置条件:用户已登录,已生成二维码
- 涉及API:
POST /app/api/channels/authorize/scan/status?platform=wechat - 步骤:
- 生成二维码后等待超过有效期(约5分钟)
- 观察页面状态变化
- 预期结果:页面显示"二维码已过期,请重新生成"提示
TC-5-05 [P2] 验证二维码生成失败时的错误提示
- 前置条件:用户已登录
- 涉及API:
POST /app/api/channels/authorize/scan?platform=wechat - 步骤:
- 模拟网络异常或后端返回错误
- 点击生成二维码
- 预期结果:
- 页面显示错误提示信息
- 不显示损坏的二维码图片
4.6 问题6:平台驾驶舱显示真实统计数据
TC-6-01 [P0] 验证仪表盘4项统计卡片显示真实数据
- 前置条件:管理员已登录,数据库中存在活跃用户、启用模型、今日订单、今日Token记录
- 涉及API:
GET /app/api/admin/dashboard/stats - 步骤:
- 进入管理后台首页(驾驶舱)
- 观察4个统计卡片
- 预期结果:
- "用户总数"卡片显示数据库中status="active"的用户数(非0或硬编码值)
- "活跃模型数"卡片显示is_enabled=True的模型数
- "今日订单数"卡片显示今日创建的订单数
- "今日Token消耗"卡片显示今日Token消耗总数(≥10000时以"万"单位显示)
TC-6-02 [P0] 验证驾驶舱显示最近操作日志
- 前置条件:管理员已登录,数据库中有操作日志记录
- 涉及API:
GET /app/api/admin/dashboard/recent-logs - 步骤:
- 进入管理后台首页
- 向下滚动到"最近操作日志"区域
- 预期结果:
- 表格显示最近操作日志(最多10条)
- 每条显示:用户、操作、目标、详情、IP、时间
- 数据与数据库OperationLog表一致
TC-6-03 [P0] 验证驾驶舱显示最近审计日志
- 前置条件:管理员已登录,数据库中有审计日志记录
- 涉及API:
GET /app/api/admin/dashboard/recent-audit - 步骤:
- 进入管理后台首页
- 向下滚动到"最近审计日志"区域
- 预期结果:
- 表格显示最近审计日志(最多10条)
- 每条显示:操作人、操作类型、目标类型、详情、时间
- 数据与数据库AuditLog表一致
TC-6-04 [P1] 验证统计卡片值为0时的显示
- 前置条件:管理员已登录,数据库中今日无订单、无Token消耗
- 涉及API:
GET /app/api/admin/dashboard/stats - 步骤:
- 进入管理后台首页
- 预期结果:
- "今日订单数"显示"0"
- "今日Token消耗"显示"0"
- 不显示NaN、undefined、null等异常值
TC-6-05 [P1] 验证驾驶舱数据加载中状态
- 前置条件:管理员已登录
- 涉及API:
GET /app/api/admin/dashboard/stats - 步骤:
- 进入管理后台首页
- 观察加载过程
- 预期结果:
- 数据加载期间显示加载动画和"加载仪表盘数据..."文字
- 加载完成后数据正确渲染
TC-6-06 [P2] 验证统计卡片使用正确的数字格式
- 前置条件:管理员已登录,用户数较大(如1000+)
- 涉及API:
GET /app/api/admin/dashboard/stats - 步骤:
- 进入管理后台首页
- 预期结果:
- "用户总数"使用千位分隔符(如"1,234")
- "今日Token消耗"≥10000时显示为"X.X万"格式
4.7 问题7:管理员密码修改功能
TC-7-01 [P0] 验证正常修改密码流程
- 前置条件:用户已登录,知道当前密码
- 涉及API:
PUT /app/api/profile/password - 步骤:
- 进入个人中心 → 安全设置
- 在"修改密码"区域输入旧密码
- 输入新密码(至少6位,如"NewPass123")
- 在确认框中再次输入相同新密码
- 点击"修改密码"按钮
- 预期结果:
- 显示"密码修改成功"绿色提示
- 三个输入框被清空
- 可使用新密码重新登录
TC-7-02 [P1] 验证旧密码为空时的校验
- 前置条件:用户已登录
- 涉及API:无(前端拦截)
- 步骤:
- 进入安全设置
- 不输入旧密码
- 输入新密码和确认密码
- 点击"修改密码"
- 预期结果:
- 显示红色错误提示"请输入旧密码"
- 不发送API请求
- 页面保持当前状态
TC-7-03 [P1] 验证新密码长度不足6位的校验
- 前置条件:用户已登录
- 涉及API:无(前端拦截)
- 步骤:
- 输入正确的旧密码
- 输入新密码"12345"(5位)
- 点击"修改密码"
- 预期结果:
- 显示红色错误提示"新密码长度至少为6位"
- 不发送API请求
TC-7-04 [P1] 验证两次新密码输入不一致的校验
- 前置条件:用户已登录
- 涉及API:无(前端拦截)
- 步骤:
- 输入正确的旧密码
- 输入新密码"NewPass123"
- 在确认框中输入"NewPass456"
- 点击"修改密码"
- 预期结果:
- 显示红色错误提示"两次输入的新密码不一致"
- 不发送API请求
TC-7-05 [P1] 验证旧密码错误的后端校验
- 前置条件:用户已登录
- 涉及API:
PUT /app/api/profile/password - 步骤:
- 输入错误的旧密码
- 输入符合要求的新密码并确认
- 点击"修改密码"
- 预期结果:
- 显示错误提示"原密码错误"(来自后端返回)
- 密码未被修改
TC-7-06 [P2] 验证修改密码时按钮Loading状态
- 前置条件:用户已登录
- 涉及API:
PUT /app/api/profile/password - 步骤:
- 输入所有正确信息
- 点击"修改密码"
- 观察按钮状态
- 预期结果:
- 按钮变为"修改中..."并禁用
- 请求完成后按钮恢复为"修改密码"
4.8 问题8:网站基础设置-邮件配置保存和测试
TC-8-01 [P0] 验证邮件配置保存功能
- 前置条件:管理员已登录
- 涉及API:
PUT /app/api/admin/settings/email - 步骤:
- 进入管理后台 → 网站基础设置
- 滚动到"邮件配置"卡片
- 填写SMTP服务器、端口、用户名、密码、发件地址
- 点击"保存"按钮
- 预期结果:
- 页面顶部显示绿色成功提示"邮件配置 保存成功"
- 提示在2秒后自动消失
- 刷新页面后配置仍然保留(从后端加载)
TC-8-02 [P0] 验证邮件配置回显
- 前置条件:管理员已登录,之前已保存过邮件配置
- 涉及API:
GET /app/api/admin/settings/email - 步骤:
- 进入网站基础设置页面
- 查看邮件配置卡片的各字段
- 预期结果:
- 各字段回显之前保存的值
- SMTP服务器、端口、用户名、发件地址等正确显示
- 密码字段可能脱敏或正确回显
TC-8-03 [P0] 验证发送测试邮件功能(有效配置)
- 前置条件:管理员已登录,已保存有效SMTP配置
- 涉及API:
POST /app/api/admin/settings/email/test - 步骤:
- 在邮件配置卡片点击"发送测试邮件"按钮
- 等待结果
- 预期结果:
- 显示测试结果提示(成功或失败消息)
- 提示在5秒后自动消失
- 成功时显示接收邮箱地址
TC-8-04 [P1] 验证未保存配置时发送测试邮件
- 前置条件:管理员已登录,从未保存过邮件配置(或SMTP主机为空)
- 涉及API:
POST /app/api/admin/settings/email/test - 步骤:
- 不填写任何邮件配置
- 直接点击"发送测试邮件"
- 预期结果:
- 显示错误提示"邮件配置未设置,请先保存邮件配置"
- 不尝试发送邮件
TC-8-05 [P1] 验证SMTP认证失败的错误处理
- 前置条件:管理员已登录,保存了错误的SMTP用户名/密码
- 涉及API:
POST /app/api/admin/settings/email/test - 步骤:
- 填写错误SMTP认证信息并保存
- 点击"发送测试邮件"
- 预期结果:
- 显示"SMTP认证失败,请检查用户名和密码"错误
TC-8-06 [P1] 验证SMTP连接失败的错误处理
- 前置条件:管理员已登录,保存了不可达的SMTP服务器地址
- 涉及API:
POST /app/api/admin/settings/email/test - 步骤:
- 填写不存在的SMTP服务器地址并保存
- 点击"发送测试邮件"
- 预期结果:
- 显示"无法连接到SMTP服务器 xxx:xxx"错误
TC-8-07 [P2] 验证TLS开关控制
- 前置条件:管理员已登录
- 涉及API:
PUT /app/api/admin/settings/email,POST /app/api/admin/settings/email/test - 步骤:
- 勾选/取消勾选TLS复选框
- 保存配置
- 检查TLS开关状态是否被保存
- 预期结果:
- TLS开关状态正确保存
- 后端根据use_tls字段决定是否使用starttls
4.9 问题9:日志与风控显示真实审计/操作日志数据
TC-9-01 [P0] 验证操作日志Tab显示真实数据
- 前置条件:管理员已登录,数据库OperationLog表中有记录
- 涉及API:
GET /app/api/admin/logs/operations - 步骤:
- 进入管理后台 → 日志风控页面
- 确认默认选中"操作日志"Tab
- 查看表格数据
- 预期结果:
- 表格显示操作日志记录
- 每条记录包含:用户名、操作(action)、目标(target)、详情、IP、时间
- 数据来源于数据库真实记录(非占位/模拟数据)
TC-9-02 [P0] 验证审计日志Tab显示真实数据
- 前置条件:管理员已登录,数据库AuditLog表中有记录
- 涉及API:
GET /app/api/admin/logs/audit-logs - 步骤:
- 进入日志风控页面
- 切换到"审计日志"Tab
- 查看表格数据
- 预期结果:
- 表格显示审计日志记录
- 每条记录包含:管理员(admin_name)、操作(action)、目标类型(target_type)、详情、时间
- 数据来源于数据库真实记录
TC-9-03 [P0] 验证日志统计概览显示
- 前置条件:管理员已登录
- 涉及API:
GET /app/api/admin/logs/stats - 步骤:
- 进入日志风控页面
- 查看页面顶部的统计概览
- 预期结果:
- 显示今日API调用、错误数/错误率、活跃用户、Token消耗、操作日志数、慢请求数
- 数值从数据库实时计算(非硬编码)
TC-9-04 [P0] 验证6个Tab切换功能
- 前置条件:管理员已登录
- 涉及API:各Tab对应API
- 步骤:
- 依次点击"操作日志"→"Token日志"→"付费日志"→"审计日志"→"API统计"→"慢请求"
- 预期结果:
- 每个Tab切换后显示对应的数据表格
- 表格列头与数据类型匹配
- 切换Tab时筛选条件重置
TC-9-05 [P1] 验证操作日志筛选功能
- 前置条件:管理员已登录,数据库中有多条操作日志
- 涉及API:
GET /app/api/admin/logs/operations?keyword=xxx&action=xxx - 步骤:
- 在操作日志Tab展开筛选条件
- 输入关键词或选择操作类型
- 点击查询
- 预期结果:
- 列表按筛选条件过滤数据
- 分页信息更新
TC-9-06 [P1] 验证日志分页功能
- 前置条件:管理员已登录,日志数据超过20条
- 涉及API:各日志API(含page参数)
- 步骤:
- 查看日志列表
- 点击"下一页"
- 预期结果:
- 加载第二页数据
- 分页信息显示"共 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 - 步骤:
- 查看管理后台首页的"最近操作日志"
- 切换到日志风控页面查看操作日志Tab
- 对比数据
- 预期结果:
- 首页最近操作日志与日志风控操作日志Tab中的前几条记录一致
- 首页最近审计日志与日志风控审计日志Tab中的前几条记录一致
TC-9-08 [P2] 验证操作日志随用户操作实时更新
- 前置条件:管理员已登录
- 涉及API:
GET /app/api/admin/logs/operations - 步骤:
- 查看当前操作日志列表
- 在另一窗口执行某项操作(如修改配置)
- 刷新日志页面
- 预期结果:新产生的操作日志出现在列表中
TC-9-09 [P2] 验证日志不可删除
- 前置条件:管理员已登录,日志页面有记录
- 涉及API:无
- 步骤:
- 查看日志页面各Tab
- 检查是否有删除按钮或删除操作入口
- 预期结果:日志页面不提供删除日志的功能按钮
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个问题涉及的功能模块