"""pytest 夹具:统一连接 PostgreSQL 测试库(ADR-024,不用 SQLite 替代)。""" import os import pytest from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from app import models # noqa: F401 注册模型 from app.db.base import Base TEST_DATABASE_URL = os.environ.get( "TEST_DATABASE_URL", "postgresql+asyncpg://hunjing:hunjing_dev_password@127.0.0.1:5432/hunjing_test", ) @pytest.fixture async def db() -> async_sessionmaker[AsyncSession]: """每个测试重建 schema:隔离且可重复。""" engine = create_async_engine(TEST_DATABASE_URL) async with engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) await conn.run_sync(Base.metadata.create_all) factory = async_sessionmaker(engine, expire_on_commit=False) yield factory await engine.dispose()