36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
"""PostgreSQL 测试环境(用于并发/行锁验证)。
|
||
|
||
**为什么需要**:SQLite 用数据库级写锁,多线程并发会直接报 `database table is locked`,
|
||
无法验证"并发下不超卖"这类核心不变量。生产环境是 PostgreSQL(行级锁),
|
||
因此并发用例必须在 PG 上跑才有意义。
|
||
|
||
用法:
|
||
# 一次性准备(本机 PG,默认 5433 端口;见 scripts/setup_pg.py)
|
||
python scripts/setup_pg.py
|
||
|
||
# 跑全部测试(含并发)
|
||
DJANGO_SETTINGS_MODULE=config.settings.pgtest python -m pytest tests/ -p no:cacheprovider
|
||
|
||
# 只跑并发用例
|
||
DJANGO_SETTINGS_MODULE=config.settings.pgtest python -m pytest tests/test_concurrency.py -p no:cacheprovider -m postgres
|
||
|
||
环境变量可覆盖:PG_TEST_DB / PG_USER / PG_PASSWORD / PG_HOST / PG_PORT
|
||
"""
|
||
|
||
from .base import env # noqa: F401
|
||
from .test import * # noqa: F401,F403 继承测试配置(迁移禁用、密码哈希加速)
|
||
|
||
DATABASES = {
|
||
"default": {
|
||
"ENGINE": "django.db.backends.postgresql",
|
||
"NAME": env("PG_TEST_DB", default="dealerhub_test"),
|
||
"USER": env("PG_USER", default="postgres"),
|
||
"PASSWORD": env("PG_PASSWORD", default="postgres"),
|
||
"HOST": env("PG_HOST", default="127.0.0.1"),
|
||
"PORT": env("PG_PORT", default="5433"),
|
||
# 并发测试需要每个线程独立的持久连接(连接复用会串事务)
|
||
"CONN_MAX_AGE": 0,
|
||
"OPTIONS": {"connect_timeout": 5},
|
||
}
|
||
}
|