# 测试用例 — 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个问题涉及的功能模块*