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 中正常工作提供了很好的建议。