【问题标题】:Testdriven.io: Test-Driven Development with FastAPI and Docker Error when trying to import app in conftest.pyTestdriven.io:尝试在 conftest.py 中导入应用程序时使用 FastAPI 和 Docker 进行测试驱动开发
【发布时间】:2021-10-21 18:27:09
【问题描述】:

我正在关注 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 运行测试

这是我在运行测试时得到的输出:

任何帮助将不胜感激。我觉得这是入门级的东西,让人非常头疼。

【问题讨论】:

  • 您似乎在整个代码库(包括安装到您的环境中的库)上运行pytest,而不仅仅是tests 目录。尝试调用python -m pytest tests
  • @MatsLindh,好的。这有帮助。测试现在正在运行,这很棒。尽管导入在 IDE 中无法正常工作,但仍然很奇怪……但是通过 docker 运行测试似乎并不重要?这似乎也错过了本教程中运行测试的命令是错误的。
  • 我猜这是因为 app 没有作为模块安装 - 因为 tests 无法导入 app (除了当前目录被添加到 sys.path ),conftest.py 内部的导入并没有真正识别任何东西。 pytest 文档中关于良好集成实践的第一个提示建议将您的 app 模块安装为可使用 pip install -e 编辑的模块。我通常自己做这个,效果很好(你需要一个 setup.py 文件,如示例所示)。

标签: python pytest fastapi testdriven.io


【解决方案1】:

感谢@MatsLindh 的帮助。正如他在上面的 cmets 中提到的,本教程让您在整个项目上运行 pytest,而不仅仅是测试文件夹。直接在测试上运行解决了我的 pytest 失败问题。他还建议查看 pytest 文档以了解进一步的集成步骤,从而让导入在 IDE 中正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多