用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
相关产品推荐
相关产品推荐

