- Add Git commit preparation checklist - Add Phase testing guides and issue tracking - Add utility scripts (env setup, test data initialization) - Add temp migration SQL files (for reference) - Update startup scripts and README - Remove obsolete scripts
12 KiB
12 KiB
Phase 2 测试记录 - 首次测试
测试日期:2025-10-13
测试人员:用户
测试类型:快速测试(部分功能)
测试耗时:约10分钟(已暂停,待修复验证)
📊 测试信息
测试环境
- Python微服务:✅ 已启动(假设)
- Backend服务:✅ 已启动(假设)
- Frontend服务:✅ 已启动
- 测试知识库:✅ 已准备(假设)
测试范围
- 智能问答页面访问
- 知识库模式选择
- 知识库选择
- 全文阅读模式切换
- 容量指示器显示(未达到)
- 文献综述测试(未达到)
- 逐篇精读模式(未测试)
🐛 发现的问题
问题1:全文阅读模式加载失败 🔴
严重等级:🔴 严重(阻断性)
状态:✅ 已修复
详细信息:见 问题清单.md - 问题1
测试步骤:
- 访问:http://localhost:3000/chat
- 选择:"知识库模式"
- 选择知识库:[知识库名称]
- 点击:"全文阅读"模式
- 结果:❌ 报错"加载文档选择失败"
Console错误:
Failed to load document selection: TypeError: Cannot read properties of undefined (reading 'maxFiles')
at loadFullTextData (ChatPage.tsx:76:35)
修复方案:
- 修改了
frontend/src/api/knowledgeBaseApi.ts - 将
return response.data改为return response.data.data
验证计划:
- 重启Frontend服务
- 重新执行测试步骤
- 验证能正常显示容量指示器
问题2:全文阅读模式无法找到对话输入框 🔴
严重等级:🔴 严重(阻断性)
状态:✅ 已修复
详细信息:见 问题清单.md - 问题2
测试步骤:
- 修复问题1后重新测试全文阅读模式
- 页面能显示容量指示器和文献列表
- 结果:❌ 找不到对话输入框,无法与AI交流
问题原因:
- FullTextMode组件缺少外层flex容器
- 导致组件高度塌缩,输入框不可见
修复方案:
- 修改了
frontend/src/pages/ChatPage.tsx第294-305行 - 为FullTextMode添加外层flex容器:
<div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden' }}> - 同时对逐篇精读模式应用相同修复
验证计划:
- 重启Frontend服务
- 验证全文阅读模式能看到底部输入框
- 验证逐篇精读模式能看到底部输入框
问题3:逐篇精读模式React Hooks调用错误 🔴
严重等级:🔴 严重(阻断性)
状态:✅ 已修复
详细信息:见 问题清单.md - 问题3
测试步骤:
- 选择知识库 → 选择"逐篇精读"模式
- 在弹出的文献选择器中选择文献
- 点击"确认"按钮
- 结果:❌ 控制台报React Hooks错误
Console错误:
Uncaught Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
at useDeepReadState (useDeepReadState.ts:10:43)
at handleConfirmDocSelection (ChatPage.tsx:105:22)
问题原因:
- 违反React Hooks规则
- 在事件处理器
handleConfirmDocSelection中直接调用了useDeepReadStateHook - Hook只能在组件顶层调用
修复方案:
- 修改了
frontend/src/pages/ChatPage.tsx多处:- 第43-46行:在组件顶层调用
useDeepReadState([]) - 第104-118行:使用Hook返回的
updateSelectedDocs方法 - 全文替换所有
deepReadState为deepReadHook
- 第43-46行:在组件顶层调用
验证计划:
- 重启Frontend服务
- 验证逐篇精读模式能正常选择文献
- 验证能进入精读模式并正常对话
- 验证文献切换功能正常
问题4:消息列表事件监听器错误 🔴
严重等级:🔴 严重(阻断性)
状态:✅ 已修复
详细信息:见 问题清单.md - 问题4
测试步骤:
- 修复问题1、2、3后重启测试
- 进入全文阅读模式
- 输入问题并点击发送
- 结果:❌ 页面卡住,控制台报错
Console错误:
Uncaught TypeError: Cannot read properties of undefined (reading 'contains')
at HTMLDocument.handleCitationMouseEnter (MessageList.tsx:71:28)
Uncaught TypeError: Cannot read properties of undefined (reading 'contains')
at HTMLDocument.handleCitationMouseLeave (MessageList.tsx:79:28)
问题原因:
- MessageList的事件监听器绑定在document上
- 鼠标事件的target可能是非Element节点
- 直接访问
classList.contains()导致错误
修复方案:
- 修改了
frontend/src/components/chat/MessageList.tsx - 在三个事件处理器中添加
target.classList存在性检查 if (target.classList && target.classList.contains('citation-badge'))
验证计划:
- 重启Frontend服务
- 全文阅读模式发送消息
- 验证消息正常显示,不再卡住
问题5:全文阅读模式Header占据过多空间 🔴
严重等级:🔴 严重(阻断性)
状态:✅ 已修复
详细信息:见 问题清单.md - 问题5
测试步骤:
- 修复前面问题后继续测试
- 进入全文阅读模式
- 结果:❌ 只能看到输入框和Header,看不到聊天消息区域
问题原因:
- FullTextModeHeader包含容量指示器和已加载文献列表
- 当文献很多时,Header占据大部分屏幕空间
- CSS没有限制Header的最大高度
- 聊天消息区域被挤压,看不见
修复方案:
- 修改了
frontend/src/components/chat/FullTextModeHeader.css - 添加
flex-shrink: 0(防止被压缩) - 添加
max-height: 40vh(最大高度为屏幕40%) - 添加
overflow-y: auto(超出部分滚动)
验证计划:
- 重启Frontend服务
- 全文阅读模式发送消息
- 验证Header不会占据过多空间
- 验证能看到聊天消息
- 验证文献列表如果太长会出现滚动条
✅ 测试结果
功能测试(部分完成)
| 功能模块 | 状态 | 备注 |
|---|---|---|
| 页面访问 | ✅ 通过 | 智能问答页面正常加载 |
| 模式选择 | ✅ 通过 | 知识库模式选择正常 |
| 知识库选择 | ✅ 通过 | 下拉列表正常显示 |
| 全文阅读-加载 | ✅ 已修复 | 问题1(API数据结构)已修复 |
| 全文阅读-布局 | ✅ 已修复 | 问题2(输入框容器)已修复 |
| 全文阅读-Header | ✅ 已修复 | 问题5(Header高度)已修复 |
| 全文阅读-消息 | ✅ 已修复 | 问题4(事件监听器)已修复 |
| 逐篇精读-选择 | ✅ 已修复 | 问题3(Hooks调用)已修复 |
| 逐篇精读-布局 | ✅ 已修复 | 问题2(输入框容器)已修复 |
| 容量指示器 | ⏳ 待验证 | 需重启验证修复效果 |
| 文献综述对话 | ⏳ 待验证 | 需重启验证功能完整性 |
| 文献切换功能 | ⏳ 待验证 | 需重启验证功能完整性 |
性能测试(未执行)
因功能问题未能执行性能测试
📝 测试笔记
测试流程
- 用户按照Phase 2快速测试清单开始测试
- 在"测试A:全文阅读模式"步骤发现问题1(API数据结构)
- AI助手快速分析并修复问题1
- 用户继续测试,发现问题2(找不到输入框)
- 同时发现问题3(逐篇精读Hooks错误)
- AI助手一次性修复问题2和问题3
- 更新测试记录和问题清单
问题分析过程
问题1:API数据结构错误
- 查看Console错误:
Cannot read properties of undefined (reading 'maxFiles') - 定位到ChatPage.tsx第76行
- 检查API返回数据结构
- 发现API层返回了多余的一层包装
- 修改
knowledgeBaseApi.ts返回response.data.data
问题2:布局容器缺失
- 用户反馈:能看到容量指示器但找不到输入框
- 检查FullTextMode组件结构
- 发现缺少外层flex容器
- 为FullTextMode添加flex容器包裹
问题3:React Hooks错误
- 用户报错:
Invalid hook call - 定位到
handleConfirmDocSelection函数 - 发现在事件处理器中调用了Hook
- 重构:在组件顶层调用Hook,事件处理器中使用Hook返回的方法
问题4:DOM事件监听器错误
- 用户反馈:发送消息后页面卡住
- 查看Console错误:
Cannot read properties of undefined (reading 'contains') - 定位到MessageList的事件处理器
- 发现没有检查target是否有classList属性
- 添加
target.classList存在性检查
问题5:Header占据过多空间
- 用户反馈:只能看到输入框,看不到聊天消息
- 检查FullTextMode布局结构
- 发现Header没有高度限制,文献列表很长时占据大部分空间
- 添加
max-height: 40vh和overflow-y: auto
经验教训
-
API数据结构一致性很重要
- Backend和Frontend对数据结构的理解要一致
- 应该有明确的类型定义
-
React基础规则必须严格遵守
- Hooks只能在组件顶层调用
- 违反规则会导致运行时错误
-
布局设计需要完整
- Flex布局中子元素需要正确设置flex属性
- 高度塌缩问题很隐蔽,容易遗漏
- 容器需要设置高度限制,防止内容过多时挤占其他区域
-
DOM事件处理需要防御性编程
- 事件监听器绑定在document上时,target可能是任何节点
- 必须检查target的属性是否存在再使用
- TypeScript的类型断言不能保证运行时安全
-
测试工具有效
- 快速测试清单帮助快速发现问题
- Console错误信息准确定位问题
- 迭代测试能持续发现深层问题
-
问题修复流程完善
- 从发现到修复约45分钟(5个严重问题)
- 问题记录清晰完整
- 修复后需要继续测试验证
🎯 下一步计划
立即行动(用户需执行)
-
重启Frontend服务
# 在Frontend窗口 Ctrl + C # 停止当前服务 npm run dev # 重新启动 -
验证3个问题的修复
- 问题1验证:全文阅读模式能正常加载,显示容量指示器
- 问题2验证:全文阅读模式底部能看到对话输入框
- 问题3验证:逐篇精读模式能正常选择文献并进入精读模式
-
继续完整测试
- 完成全文阅读模式完整测试(对话、引用、Token显示)
- 完成逐篇精读模式完整测试(文献切换、对话历史)
- 测试端到端场景(文献综述 → 精读切换)
- 测试文献切换功能
后续计划
- 完成快速测试清单(预计还需20分钟)
- 记录所有发现的问题
- 做出验收决策
📊 测试进度
Phase 2测试进度:约20%
✅ 已完成:
- 环境准备
- 页面基础功能
- 发现1个严重问题并修复
⏳ 进行中:
- 等待修复验证
⏸️ 待测试:
- 全文阅读模式(剩余部分)
- 逐篇精读模式
- 端到端场景
🎊 测试评价
工具效果
- ✅ 快速测试清单:有效,帮助快速发现问题
- ✅ 问题记录模板:清晰,便于追踪
- ✅ 修复流程:高效,问题快速解决
系统质量
- ⚠️ 代码质量:存在数据结构访问错误
- ✅ 错误提示:Console错误信息准确
- ⏳ 功能完整性:待继续验证
建议
- 增加TypeScript类型定义,减少运行时错误
- 增加API数据验证,提前发现数据问题
- 在开发阶段进行更充分的自测
📞 联系信息
测试人员:[用户]
问题报告:已创建问题清单文档
修复记录:已记录在问题清单中
测试状态:⏸️ 暂停(等待修复验证)
下次测试:验证修复 + 继续完整测试
最后更新:2025-10-13
维护者:测试团队