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

用pytest测试Flask CRUD API遇404错误及模块导入问题求助

问题1:测试返回404状态码(断言201失败)

以下是常见原因和解决步骤:

  • 未正确初始化测试客户端
    确保测试文件中导入了Flask应用实例,并创建了测试客户端。如果你的races_api.py直接定义了app = Flask(__name__),测试代码应该这样写:

    # test_races_api.py
    from races_api import app
    
    def test_create_race():
        client = app.test_client()
        # 确保请求路径和方法与curl测试完全一致
        response = client.post('/races', json={"name": "Test Race"})
        assert response.status_code == 201
    

    若使用工厂函数创建app(比如create_app()),则需要在测试中先实例化app:

    from races_api import create_app
    
    def test_create_race():
        app = create_app()  # 可传入测试配置
        client = app.test_client()
        response = client.post('/races', json={"name": "Test Race"})
        assert response.status_code == 201
    
  • 路由注册或请求不匹配

    • 核对races_api.py中的路由装饰器,确保路径、请求方法(methods=['POST'])与测试一致,没有拼写错误。
    • 确认curl测试的请求路径、HTTP方法、请求体格式(比如是否用了Content-Type: application/json)和测试代码完全相同。
  • 测试环境配置缺失
    如果你的app依赖特定环境变量或配置文件才能加载路由,测试中需要手动加载这些配置,否则路由可能无法注册。


问题2:test文件夹下无法找到app模块

这是Python导入路径问题,解决方法如下:

  • 手动添加项目根目录到sys.path
    在测试文件开头加入以下代码,将项目根目录(假设test文件夹和races_api.py处于同一层级)添加到Python的搜索路径:

    # test/test_races_api.py
    import sys
    from pathlib import Path
    
    # 获取项目根目录(当前文件的父目录的父目录)
    project_root = Path(__file__).resolve().parent.parent
    sys.path.append(str(project_root))
    
    # 现在可以正常导入app了
    from races_api import app
    
  • 使用包结构+相对导入
    将项目改造为包结构:

    your_project/
    ├── myapp/
    │   ├── __init__.py
    │   └── races_api.py
    └── test/
        └── test_races_api.py
    

    然后在测试文件中使用相对导入,同时需要将项目以可编辑模式安装(pip install -e .):

    # test/test_races_api.py
    from ..myapp.races_api import app
    
  • 设置PYTHONPATH环境变量
    运行pytest时,临时将项目根目录加入PYTHONPATH:

    # 替换为你的项目根目录路径
    PYTHONPATH=/home/user/your_project pytest test/test_races_api.py
    

内容的提问来源于stack exchange,提问作者Salvatore D'angelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:05:10