You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.6 KiB
3.6 KiB
AI API 测试修复总结
日期: 2026-01-30
状态: 部分完成 - UUID 序列化问题已修复,但遇到 User Service 事务管理问题
修复内容
1. AI Service 返回值 UUID 转字符串修复 ✅
修复了 8 个方法的返回值,将 UUID 对象转换为字符串:
generate_image()- 第 265 行generate_video()- 第 377 行generate_sound()- 第 429 行generate_voice()- 第 489 行generate_subtitle()- 第 549 行process_text()- 第 618 行get_job_status()- 第 630 行get_user_jobs()- 第 785 行
所有方法现在都返回 {'job_id': str(job.ai_job_id), ...} 而非 UUID 对象。
遇到的新问题
User Service 事务管理冲突 ❌
错误信息:
sqlalchemy.exc.IllegalStateChangeError: Method 'commit()' can't be called here;
method '_prepare_impl()' is already in progress
问题位置: app/repositories/user_repository.py:230
根本原因:
- User Repository 的
update_session_last_used()方法在事务进行中调用了commit() - 这与 FastAPI 的依赖注入事务管理冲突
- 在
get_current_user依赖中,外层已经有事务管理
影响范围:
- 所有需要认证的 AI API 端点
- 15 个集成测试失败
解决方案: 需要修复 User Repository 的事务管理:
# 修改 app/repositories/user_repository.py
async def update_session_last_used(self, session_id: str) -> None:
"""更新会话最后使用时间"""
session = await self.get_session_by_id(session_id)
if session:
session.last_used_at = datetime.now(timezone.utc)
self.session.add(session)
await self.session.flush() # 使用 flush 而非 commit
测试执行结果
第一次执行(修复前)
- 失败: 15 个测试
- 通过: 6 个测试
- 主要错误: UUID 序列化错误
第二次执行(UUID 修复后)
- 失败: 15 个测试
- 通过: 6 个测试
- 主要错误: User Service 事务管理冲突
失败的测试类别
- 图片/视频生成工作流 (3 个)
- 批量任务查询 (3 个)
- 统计信息 (3 个)
- 模型管理 (2 个)
- 积分集成 (1 个)
- 并发请求 (1 个)
- 认证授权 (2 个)
下一步行动
优先级 1: 修复 User Service 事务管理
修改 app/repositories/user_repository.py 的 update_session_last_used() 方法,使用 flush() 代替 commit()
优先级 2: 修复认证测试断言
test_access_without_token: 调整期望状态码为 403test_cannot_access_other_user_jobs: 添加权限检查逻辑
优先级 3: 重新运行完整测试套件
已完成的工作
✅ 创建测试数据 Fixtures (定价配置、AI 模型)
✅ 更新测试用户积分余额
✅ 添加测试依赖关系
✅ 移除 AI Service 事务嵌套
✅ 修复 UUID 类型转换问题
✅ 修复所有 AI Service 方法的返回值序列化
文件修改记录
server/tests/conftest.py- 添加 fixturesserver/tests/integration/test_ai_api_workflow.py- 添加依赖server/app/services/ai_service.py- 修复返回值序列化(8 处)docs/server/changelogs/2026-01-30-ai-api-test-data-fixtures.md- 测试数据文档docs/server/changelogs/2026-01-30-ai-api-test-fix-summary.md- 本文档
总结
AI Service 的 UUID 序列化问题已完全修复,所有生成方法和查询方法现在都正确返回字符串格式的 job_id。但测试失败是由于 User Service 的事务管理问题,这是一个独立的问题,需要单独修复。修复 User Service 后,AI API 的集成测试应该能够通过。