You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成SQLAlchemy与Oracle的FastAPI应用测试报错求助

FastAPI接口测试异常排查方案

问题1:首页接口返回400状态码,断言200失败

核心排查方向

  1. TrustedHostMiddleware 校验拦截
    该中间件会校验请求的Host头,如果测试时请求的Host不在allowed_hosts列表中,直接返回400。

    • 临时注释main.py中的TrustedHostMiddleware,重新运行测试,若恢复正常则确认是该问题。
    • 解决方法:
      • 测试请求时显式添加合法Host头:client.get("/", headers={"Host": "your-allowed-domain.com"})
      • 用环境变量动态控制允许的Host,测试环境设为通配符:
        # main.py
        import os
        from fastapi.middleware.trustedhost import TrustedHostMiddleware
        
        allowed_hosts = os.getenv("ALLOWED_HOSTS", "*").split(",")
        app.add_middleware(TrustedHostMiddleware, allowed_hosts=allowed_hosts)
        
        测试前设置环境变量ALLOWED_HOSTS=*
  2. SessionMiddleware 配置问题
    若首页接口依赖Session,需确认SessionMiddleware的secret_key已正确配置,测试环境与生产环境的配置保持一致,避免因Session初始化失败导致400。

  3. 请求路径/方法不匹配
    核对测试代码的请求路径(如是否应为"/"而非"/index")、请求方法(如是否用GET而非POST)与实际路由定义完全一致。


问题2:课程搜索接口出现 AttributeError: 'function' object has no attribute 'get'

核心排查方向

  1. 数据库依赖注入错误
    该错误通常是把数据库Session的创建函数当成实例注入了接口。

    • 检查测试代码中的依赖覆盖逻辑:
      # 错误示例:注入的是函数本身而非实例
      app.dependency_overrides[get_db] = get_db
      # 正确示例:注入的是Session实例生成器
      def override_get_db():
          try:
              db = TestingSessionLocal()
              yield db
          finally:
              db.close()
      app.dependency_overrides[get_db] = override_get_db
      
  2. 存储过程结果处理错误
    cx_Oracle调用存储过程的返回值不是字典,若直接调用.get()会报错:

    • 错误示例:
      result = cursor.callproc("GET_COURSES")
      course_name = result.get("course_name")  # 此处报错
      
    • 正确处理:根据存储过程的输出参数或结果集,用cursor.fetchall()或提取输出参数的方式获取数据。
  3. 请求参数获取错误
    检查接口中获取查询参数的代码,是否误把request.query_params当成函数调用:

    # 错误
    query = request.query_params().get("q")
    # 正确
    query = request.query_params.get("q")
    

通用排查点

  • 确认测试环境的Oracle连接正常:检查连接字符串、数据库权限,确保能正常执行目标存储过程。
  • 导入app时,直接从main.py导入已完成中间件和路由注册的实例,避免测试中重新创建app导致配置缺失。
  • 使用fastapi.testclient.TestClient而非Starlette的TestClient,确保对FastAPI特性的兼容支持。

内容的提问来源于stack exchange,提问作者cpunz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:30:39