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.
 

6.0 KiB

AI API 测试最终执行结果

日期: 2026-01-30
状态: 部分通过 - 10/21 测试通过

修复总结

1. User Service 事务管理修复

问题: update_session_last_used() 方法在事务进行中调用 commit()
修复: 将 commit() 改为 flush(),让调用者控制事务

# server/app/repositories/user_repository.py
async def update_session_last_used(self, session_id: str) -> None:
    """更新会话最后使用时间"""
    statement = select(UserSession).where(UserSession.session_id == session_id)
    result = await self.session.exec(statement)
    session = result.first()
    
    if not session:
        return None
    
    session.last_used_at = datetime.now(timezone.utc)
    self.session.add(session)
    await self.session.flush()  # ✅ 使用 flush 而非 commit
    return session

2. 统一响应格式修复

问题: success_response() 默认使用 code=200,但测试期望 code=0
修复: 将默认值改为 code=0

# server/app/schemas/response.py
def success_response(data: Any = None, message: str = "Success", code: int = 0) -> dict:
    """创建成功响应(code=0 表示成功)"""
    return {
        "success": True,
        "code": code,  # ✅ 默认 0 表示成功
        "message": message,
        "data": data
    }

测试执行结果

总体统计

  • 通过: 10/21 (47.6%)
  • 失败: 11/21 (52.4%)
  • 改进: 从 6/21 提升到 10/21

通过的测试 (10 个)

  1. 批量任务查询 (2/3)

    • test_query_multiple_jobs - 查询多个任务
    • test_query_with_type_filter - 按类型过滤
  2. 统计信息 (2/3)

    • test_job_statistics - 任务统计
    • test_queue_status - 队列状态
  3. 任务取消 (1/1)

    • test_cancel_job - 取消任务
  4. 任务查询 (1/1)

    • test_query_job_status - 查询任务状态
  5. 任务列表 (1/1)

    • test_list_user_jobs - 用户任务列表
  6. 任务过滤 (1/1)

    • test_filter_jobs_by_status - 按状态过滤
  7. 任务排序 (1/1)

    • test_sort_jobs - 任务排序
  8. 认证 (1/2)

    • test_access_with_invalid_token - 无效 token

失败的测试 (11 个)

1. 图片/视频生成工作流 (3 个)

  • test_complete_image_generation_workflow - 图片生成完整流程
  • test_text2video_workflow - 文本转视频
  • test_img2video_workflow - 图片转视频

失败原因:

  • 图片生成: 任务状态查询失败(可能是异步任务未完成)
  • 视频生成: 模型配置问题(模型不可用: None

2. 批量任务查询 (1 个)

  • test_pagination - 分页查询

失败原因: 分页逻辑或数据断言问题

3. 统计信息 (1 个)

  • test_usage_statistics - 使用统计

失败原因: 统计数据计算或格式问题

4. 模型管理 (2 个)

  • test_get_all_models - 获取所有模型
  • test_get_models_by_type - 按类型获取模型

失败原因: API 错误(从日志看有 ERROR)

5. 积分集成 (1 个)

  • test_insufficient_credits - 积分不足

失败原因: 积分检查或错误处理问题

6. 并发请求 (1 个)

  • test_concurrent_job_creation - 并发创建任务

失败原因: 并发场景下的数据一致性问题

7. 认证授权 (2 个)

  • test_access_without_token - 无 token 访问(期望 401,实际 403)
  • test_cannot_access_other_user_jobs - 跨用户访问(期望 403/404,实际 200)

失败原因:

  • 认证中间件返回 403 而非 401
  • 缺少权限检查逻辑

剩余问题分析

优先级 1: 视频生成模型配置 🔴

错误: 模型不可用: None
原因: 测试 fixtures 中缺少 VIDEO 类型的模型
解决: 在 test_ai_models fixture 中添加视频模型

优先级 2: 模型管理 API 错误 🔴

错误: API 返回错误状态
原因: 需要查看具体错误日志
解决: 检查 get_available_models() 方法实现

优先级 3: 认证状态码不一致 🟡

问题: 无 token 返回 403 而非 401
解决: 调整测试断言或修改认证中间件

优先级 4: 权限检查缺失 🟡

问题: 可以访问其他用户的任务
解决: 在 get_job_status() API 中添加权限检查

优先级 5: 异步任务状态 🟢

问题: 图片生成流程测试失败
原因: 可能是异步任务未完成就查询状态
解决: 添加等待逻辑或使用 mock

已完成的工作

创建测试数据 Fixtures (定价配置、AI 模型)
更新测试用户积分余额
添加测试依赖关系
移除 AI Service 事务嵌套
修复 UUID 类型转换问题
修复所有 AI Service 方法的返回值序列化
修复 User Service 事务管理问题
修复统一响应格式 code 默认值

文件修改记录

  1. server/app/repositories/user_repository.py - 修复事务管理
  2. server/app/schemas/response.py - 修复响应格式
  3. server/app/services/ai_service.py - 修复返回值序列化
  4. server/tests/conftest.py - 添加 fixtures
  5. server/tests/integration/test_ai_api_workflow.py - 添加依赖

下一步行动

  1. 添加视频模型配置 - 修复视频生成测试
  2. 调试模型管理 API - 查看错误日志并修复
  3. 调整认证测试断言 - 匹配实际行为
  4. 添加权限检查 - 防止跨用户访问
  5. 优化异步任务测试 - 添加等待或 mock

总结

通过修复 User Service 事务管理和统一响应格式,测试通过率从 28.6% (6/21) 提升到 47.6% (10/21)。主要的核心功能(任务查询、统计、取消)已经通过测试。剩余失败的测试主要集中在:

  1. 模型配置不完整(视频模型缺失)
  2. API 实现问题(模型管理 API)
  3. 测试断言需要调整(认证状态码)
  4. 权限检查缺失(跨用户访问)

这些问题都是可以快速修复的,预计再修复 2-3 个关键问题后,测试通过率可以达到 80% 以上。