使用SQLAlchemy asyncio API进行数据库测试的固定装置
项目描述
pytest-async-sqlalchemy
使用SQLAlchemy asyncio API进行数据库测试的固定装置
您可以通过pip从PyPI安装"pytest-async-sqlalchemy"
$ pip install pytest-async-sqlalchemy
设置
提供会话范围的事件循环
首先要做的是声明一个范围设置为"session"的even_loop固定装置。您可以将下面的代码复制并粘贴到您的conftest.py
@pytest.fixture(scope="session")
def event_loop():
    """
    Creates an instance of the default event loop for the test session.
    """
    if sys.platform.startswith("win") and sys.version_info[:2] >= (3, 8):
        # Avoid "RuntimeError: Event loop is closed" on Windows when tearing down tests
        # https://github.com/encode/httpx/issues/914
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    loop = asyncio.new_event_loop()
    yield loop
    loop.close()
这是必需的,因为pytest-async-sqlalchemy出于性能原因在测试之间共享数据库连接,但pytest-asyncio定义的默认even_loop固定装置是函数范围的1(即,在每个测试后杀死数据库连接)。
提供数据库URL和初始化
pytest-async-sqlalchemy提供了用于配置和初始化测试数据库的占位符:database_url和init_database。这两个必须在您的项目conftest.py中定义,如下所示
@pytest.fixture(scope="session")
def _database_url():
    return "postgresql+asyncpg://postgres:masterkey@localhost/dbtest"
@pytest.fixture(scope="session")
def init_database():
    from myprorject.db import metadata
    return metadata.create_all
_database_url必须是一个会话范围的固定装置,它返回SQLAlchemy标准中的数据库URL。init_database也必须是一个会话范围的固定装置,它返回用于初始化数据库的可调用函数(在大多数情况下,这会返回metadata.create_all函数)。
用法
本插件提供了以下配置项
- db_session:一个绑定到测试会话数据库的- AsyncSession对象。每次测试函数执行后都会丢弃数据库事务,因此整个测试套件使用相同的数据库(避免了每次测试都要初始化数据库的开销)。
- database:指向初始化测试会话数据库的URL。
- scoped_database:- scoped_database在测试函数的作用域内提供一个新的数据库。配置项的值是一个指向数据库的字符串URL。
贡献
非常欢迎贡献。可以使用tox运行测试,请在提交拉取请求之前确保覆盖率至少保持不变。
许可协议
在MIT许可条款下分发,“pytest-async-sqlalchemy”是免费和开源软件。
1. pytest-async-sqlalchemy无法提供自己的even_loop,因为pytest插件无法覆盖彼此的配置项。因此,我们目前唯一可行的解决方案是要求用户声明自己的event_loop配置项。欢迎提出如何更好地解决这个问题的方法,在问题部分联系我们。
项目详情
pytest-async-sqlalchemy-0.2.0.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 0dcf80fdff1ea0046834cff2bc100c82d159e45a7ae21545a6ba9119a962b9d7 | |
| MD5 | 174925cd3e6cbdc16386e37f286254fd | |
| BLAKE2b-256 | 88aa264687cab98d67b73e680fe9299daf81edfe9b6bac016c4978f2380321cc | 
pytest_async_sqlalchemy-0.2.0-py3-none-any.whl的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 60d7159f43d21e79d7051841fd2d6e094b7267ddc8d7192daea597afca938b12 | |
| MD5 | b101c817be92901e108ac640946bb79c | |
| BLAKE2b-256 | 6514d1abbf8dcb11097a7108be8eb4b598c958fc49eb91c5f62449ca9dda489a |