"""全局测试配置与 MySQL 测试环境初始化。 数据库连接串由根目录 ``conftest.py`` 在导入应用模块之前设好(见那里的说明), 因此这里可以正常按顺序导入,不需要靠 import 先后保证正确性。 """ import pytest import web.backend.models # noqa: F401 确保所有 ORM 模型注册到 Base.metadata from tests.support.db import ( clear_tables, get_test_engine, init_test_schema, make_test_session, ) @pytest.fixture(scope="session", autouse=True) def setup_test_database(): """测试会话级别:在测试库中建立干净一致的全新数据库结构。""" engine = get_test_engine() init_test_schema(engine) yield engine @pytest.fixture(autouse=True) def clean_tables_per_test(): """用例级别:每个测试运行前后清空表数据,保证用例完全隔离且无残余状态。""" clear_tables() yield clear_tables() @pytest.fixture def db(): """提供一个带自动关闭的测试 Session fixture。""" session = make_test_session() try: yield session finally: session.close()