TESTING_ANNOTATION_FIX.md 5.7 KB

标注持久化修复 - 测试指南

快速测试步骤

准备工作

  1. 启动后端服务器

    cd backend
    python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000
    
  2. 启动前端服务器

    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. 查询标注表:

    SELECT * FROM annotations WHERE task_id = 'your_task_id';
    
  3. 验证点

    • ✅ 每个任务只有一条标注记录
    • result 字段包含完整的标注数据(JSON 格式)
    • updated_at 字段在修改后有更新
  4. 查询任务表:

    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. 数据库查询结果(如果相关)