Testdriven.io:尝试在 conftest.py 中导入应用程序时使用 FastAPI 和 Docker 进行测试驱动开发时出错
Testdriven.io: Test-Driven Development with FastAPI and Docker Error when trying to import app in conftest.py
我正在学习 testdriven.io 使用 FastAPI 进行测试驱动开发和 Docker 教程,但我卡在了 Pytest 设置步骤。我已经检查了一遍,看看我遗漏了什么,并继续做空。
教程中的代码示例表明,在 conftest.py 中,您需要执行以下 from
语句:
from app import main
from app.config import get_settings, Settings
首先,Pycharm 告诉我它无法从上面导入任何内容。
我的文件夹结构:
main.py:
import os
from fastapi import FastAPI, Depends
from tortoise.contrib.fastapi import register_tortoise
from .config import get_settings, Settings
app = FastAPI()
register_tortoise(
app,
db_url=os.environ.get("DATABASE_URL"),
modules={"models": ["app.models.tortoise"]},
generate_schemas=False,
add_exception_handlers=True,
)
@app.get("/ping")
async def pong(settings: Settings = Depends(get_settings)):
return {"ping": "pong", "environment": settings.environment, "testing": settings.testing}
conftest.py
import os
import pytest
from starlette.testclient import TestClient
from app import main
from app.config import get_settings, Settings
def get_settings_override():
return Settings(testing=1, database_url=os.environ.get("DATABASE_TEST_URL"))
@pytest.fixture(scope="module")
def test_app():
# set up
main.app.dependency_overrides[get_settings] = get_settings_override
with TestClient(main.app) as test_client:
# testing
yield test_client
# tear down
教程为您提供了 运行 使用 docker-compose exec web python -m pytest
的测试
这是我在 运行测试时得到的输出:
如有任何帮助,我们将不胜感激。我觉得这是引起极度头痛的入门级东西。
感谢@MatsLindh 的帮助。正如他在上面的评论中提到的,本教程让您对整个项目进行 运行 pytest,而不仅仅是测试文件夹。 运行 直接在测试上解决了我的 pytest 失败问题。他还通过建议查看 pytest 文档以了解进一步的集成步骤,就如何让导入在 IDE 中正常工作提供了很好的建议。
我正在学习 testdriven.io 使用 FastAPI 进行测试驱动开发和 Docker 教程,但我卡在了 Pytest 设置步骤。我已经检查了一遍,看看我遗漏了什么,并继续做空。
教程中的代码示例表明,在 conftest.py 中,您需要执行以下 from
语句:
from app import main
from app.config import get_settings, Settings
首先,Pycharm 告诉我它无法从上面导入任何内容。
我的文件夹结构:
main.py:
import os
from fastapi import FastAPI, Depends
from tortoise.contrib.fastapi import register_tortoise
from .config import get_settings, Settings
app = FastAPI()
register_tortoise(
app,
db_url=os.environ.get("DATABASE_URL"),
modules={"models": ["app.models.tortoise"]},
generate_schemas=False,
add_exception_handlers=True,
)
@app.get("/ping")
async def pong(settings: Settings = Depends(get_settings)):
return {"ping": "pong", "environment": settings.environment, "testing": settings.testing}
conftest.py
import os
import pytest
from starlette.testclient import TestClient
from app import main
from app.config import get_settings, Settings
def get_settings_override():
return Settings(testing=1, database_url=os.environ.get("DATABASE_TEST_URL"))
@pytest.fixture(scope="module")
def test_app():
# set up
main.app.dependency_overrides[get_settings] = get_settings_override
with TestClient(main.app) as test_client:
# testing
yield test_client
# tear down
教程为您提供了 运行 使用 docker-compose exec web python -m pytest
这是我在 运行测试时得到的输出:
如有任何帮助,我们将不胜感激。我觉得这是引起极度头痛的入门级东西。
感谢@MatsLindh 的帮助。正如他在上面的评论中提到的,本教程让您对整个项目进行 运行 pytest,而不仅仅是测试文件夹。 运行 直接在测试上解决了我的 pytest 失败问题。他还通过建议查看 pytest 文档以了解进一步的集成步骤,就如何让导入在 IDE 中正常工作提供了很好的建议。