在测试中更新数据库设置后重新启动 Django 数据库连接

问题描述 投票:0回答:0

在我的 Django 设置中,我有一个名为

POSTGRES_STATEMENT_TIMEOUT
的设置,它允许我配置 statement timeout。我将默认设置为 30 秒。注意,我是 django-environ.

# settings.py

env = environ.Env(
    POSTGRES_STATEMENT_TIMEOUT=(str, "30s"),
)

POSTGRES_STATEMENT_TIMEOUT = env("POSTGRES_STATEMENT_TIMEOUT")
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        ...
        "OPTIONS": {
            "options": f"-c statement_timeout={POSTGRES_STATEMENT_TIMEOUT}s"
        },
    }
}

我想写一个简单的测试来确保 postgres 语句超时设置正常工作。注意我正在使用 pytest-django。

# tests.py

def test_statement_timeout(settings):
    # Lower statement timeout so this test doesn't take 30s to run.
    settings.POSTGRES_STATEMENT_TIMEOUT = "1s"

    with connection.cursor() as cursor:
        with pytest.raises(OperationalError) as exc:
            cursor.execute("select pg_sleep(2)")

    assert "canceling statement due to statement timeout" in str(exc.value)

这是测试失败。当我打印

settings.DATABASES
时,我看到语句超时仍然是 30 秒,而不是 1 秒。

即使我直接通过

settings.DATABASES
覆盖
settings.DATABASES["default"]["OPTIONS"] = {"options": "-c statement_timeout=1s"}
,测试仍然失败。

我想我需要在更新设置后重新启动数据库连接。反正有没有在测试中这样做?

python django django-settings django-tests pytest-django
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.