gpt4 book ai didi

python - 在 FastAPI 中测试 Pydantic 设置

转载 作者:行者123 更新时间:2023-12-04 11:36:18 24 4
gpt4 key购买 nike

假设我的 main.py是这样的(这是一个简化的例子,在我的应用程序中,我使用了一个实际的数据库,我有两个不同的数据库 URI 用于开发和测试):

from fastapi import FastAPI
from pydantic import BaseSettings

app = FastAPI()

class Settings(BaseSettings):
ENVIRONMENT: str

class Config:
env_file = ".env"
case_sensitive = True

settings = Settings()

databases = {
"dev": "Development",
"test": "Testing"
}
database = databases[settings.ENVIRONMENT]

@app.get("/")
def read_root():
return {"Environment": database}

.env
ENVIRONMENT=dev

假设我想测试我的代码并且我想设置 ENVIRONMENT=test使用测试数据库。我该怎么办?在 FastAPI 文档( https://fastapi.tiangolo.com/advanced/settings/#settings-and-testing )中有一个很好的例子,但它是关于依赖关系的,所以据我所知,这是一个不同的例子。

我的想法如下( test.py ):

import pytest

from fastapi.testclient import TestClient

from main import app

@pytest.fixture(scope="session", autouse=True)
def test_config(monkeypatch):
monkeypatch.setenv("ENVIRONMENT", "test")

@pytest.fixture(scope="session")
def client():
return TestClient(app)

def test_root(client):
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Environment": "Testing"}

但它不起作用。

此外,我收到此错误:
ScopeMismatch: You tried to access the 'function' scoped fixture 'monkeypatch' with a 'session' scoped request object, involved factories
test.py:7: def test_config(monkeypatch)
env\lib\site-packages\_pytest\monkeypatch.py:16: def monkeypatch()

而来自 pytest它应该可以工作的官方文档( https://docs.pytest.org/en/3.0.1/monkeypatch.html#example-setting-an-environment-variable-for-the-test-session )。我有最新版本的 pytest安装。

因此,我尝试使用特定的测试环境变量: https://pydantic-docs.helpmanual.io/usage/settings/#field-value-priority .

老实说,我迷路了,我唯一真正的目标是拥有不同的测试配置(与 Flask 的工作方式相同: https://flask.palletsprojects.com/en/1.1.x/tutorial/tests/#setup-and-fixtures )。我是否以错误的方式解决问题?

最佳答案

PydanticSettings是可变的,所以你可以简单地在你的 test.py 中覆盖它们:

from main import settings

settings.ENVIRONMENT = 'test'

关于python - 在 FastAPI 中测试 Pydantic 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61582142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com