使用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 |