# 标注持久化修复 - 测试指南 ## 快速测试步骤 ### 准备工作 1. **启动后端服务器** ```bash cd backend python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` 2. **启动前端服务器** ```bash cd web yarn nx serve lq_label ``` 3. **确保有测试数据** - 如果没有,运行:`cd backend && python init_sample_data.py` ### 测试场景 1:首次标注并保存 **目标**:验证标注可以正确保存,任务状态更新为"已完成" 1. 打开浏览器访问 `http://localhost:4200` 2. 点击左侧菜单"任务管理" 3. 找到一个状态为"待处理"的任务 4. 点击"开始标注"按钮(播放图标) 5. 在编辑器中完成标注(例如:选择一个标签) 6. 点击右上角"保存"按钮 7. **验证点**: - ✅ 页面自动返回任务列表 - ✅ 该任务的状态显示为"已完成" - ✅ 进度显示为 100% - ✅ 控制台没有错误信息 ### 测试场景 2:重新打开已标注的任务 **目标**:验证已保存的标注结果可以正确加载 1. 在任务列表中,找到刚才标注的任务(状态为"已完成") 2. 再次点击"开始标注"按钮 3. **验证点**: - ✅ 编辑器加载完成后,显示之前保存的标注结果 - ✅ 标签、区域等标注内容完整显示 - ✅ 控制台显示 "Loaded existing annotation" 日志 ### 测试场景 3:修改已有标注 **目标**:验证修改标注后可以正确更新,不会创建重复记录 1. 在已有标注的基础上进行修改(例如:添加新标签或删除标签) 2. 点击"保存"按钮 3. 再次打开该任务 4. **验证点**: - ✅ 显示最新的修改结果 - ✅ 控制台显示 "Updated existing annotation" 日志 - ✅ 数据库中该任务只有一条标注记录(不是两条) ### 测试场景 4:检查数据库 **目标**:验证数据库中的数据正确性 1. 打开数据库文件:`backend/annotation_platform.db` 2. 查询标注表: ```sql SELECT * FROM annotations WHERE task_id = 'your_task_id'; ``` 3. **验证点**: - ✅ 每个任务只有一条标注记录 - ✅ `result` 字段包含完整的标注数据(JSON 格式) - ✅ `updated_at` 字段在修改后有更新 4. 查询任务表: ```sql SELECT id, name, status FROM tasks WHERE id = 'your_task_id'; ``` 5. **验证点**: - ✅ 任务的 `status` 字段为 `'completed'` ## 控制台日志检查 ### 正常流程的日志输出 #### 首次标注 ``` Loading LabelStudio editor for task: task_xxx Initializing LabelStudio instance... Creating new annotation LabelStudio instance initialized Annotation result: { result: [...] } Sending annotation data: { result: [...] } Created new annotation Task marked as completed ``` #### 重新打开已标注任务 ``` Loading LabelStudio editor for task: task_xxx Existing annotations: [{ id: 'ann_xxx', ... }] Loaded existing annotation: { id: 'ann_xxx', result: {...} } Initializing LabelStudio instance... Loading existing annotation: { result: [...] } LabelStudio instance initialized ``` #### 修改已有标注 ``` Annotation result: { result: [...] } Sending annotation data: { result: [...] } Updated existing annotation: ann_xxx Task marked as completed ``` ## 常见问题排查 ### 问题 1:标注结果没有加载 **症状**:再次打开任务时,编辑器是空白的 **排查步骤**: 1. 打开浏览器控制台 2. 查看是否有 "Loaded existing annotation" 日志 3. 检查 `existingAnnotations` 数组是否为空 4. 检查数据库中是否有该任务的标注记录 **可能原因**: - 标注没有正确保存 - API 请求失败 - 标注数据格式不正确 ### 问题 2:任务状态没有更新 **症状**:保存后任务仍然显示为"待处理"或"进行中" **排查步骤**: 1. 检查控制台是否有 "Task marked as completed" 日志 2. 检查 Network 标签,查看 PUT `/api/tasks/{id}` 请求是否成功 3. 刷新任务列表页面 **可能原因**: - API 请求失败 - 后端更新任务失败 - 前端缓存没有刷新 ### 问题 3:创建了重复的标注记录 **症状**:数据库中同一个任务有多条标注记录 **排查步骤**: 1. 检查控制台日志,应该显示 "Updated existing annotation" 而不是 "Created new annotation" 2. 检查 `getTaskAnnotations` API 是否正确返回已有标注 **可能原因**: - `getTaskAnnotations` 返回空数组 - 条件判断逻辑错误 ## 性能测试 ### 测试大量标注数据 1. 创建一个包含大量标注点的任务(例如:100+ 个标签) 2. 保存标注 3. 重新打开任务 4. **验证点**: - ✅ 加载时间在可接受范围内(< 3秒) - ✅ 所有标注点都正确显示 - ✅ 编辑器响应流畅 ## 浏览器兼容性测试 建议在以下浏览器中测试: - ✅ Chrome (最新版本) - ✅ Firefox (最新版本) - ✅ Edge (最新版本) - ✅ Safari (如果使用 Mac) ## 回归测试 确保修复没有破坏其他功能: - ✅ 创建新项目 - ✅ 创建新任务 - ✅ 删除任务 - ✅ 项目列表显示正常 - ✅ 任务列表筛选功能正常 ## 测试完成检查清单 - [ ] 场景 1:首次标注并保存 - 通过 - [ ] 场景 2:重新打开已标注的任务 - 通过 - [ ] 场景 3:修改已有标注 - 通过 - [ ] 场景 4:数据库数据正确 - 通过 - [ ] 控制台日志正常 - 通过 - [ ] 没有重复标注记录 - 通过 - [ ] 任务状态正确更新 - 通过 - [ ] 性能测试通过 - 通过 - [ ] 浏览器兼容性测试通过 - 通过 - [ ] 回归测试通过 - 通过 ## 报告问题 如果测试中发现问题,请记录: 1. 问题描述 2. 复现步骤 3. 预期结果 vs 实际结果 4. 浏览器控制台日志 5. Network 请求详情 6. 数据库查询结果(如果相关)