Pytest plugin for testing async python code
Project description
pytest-aio
pytest-aio – Is a simple pytest plugin for testing any async python code
Features
Supports all most popular async python libraries: Asyncio, Trio and Curio
Automatically run your async tests
Works with contextvars correctly (supports it for async/sync fixtures)
Supports trio-asyncio
Requirements
python >= 3.9
Installation
pytest-aio should be installed using pip:
pip install pytest-aio
optionally extras are available:
pip install pytest-aio[curio,trio]
Usage
When installed the plugin runs all your async test functions/fixtures.
async def test_async():
assert True
No need to mark your async tests. Just run pytest as is.
Async fixtures for sync tests
If you plan use async fixtures for sync tests, please ensure you have to include aiolib fixture:
# It's important to add aiolib fixture here
def test_with_async_fixtures(async_fixture, aiolib):
assert async_fixture == 'value from async fixture'
As an alternative, If you are doing the async fixtures yourself, you can add aiolib inside them:
@pytest.fixture
async def async_fixture(aiolib):
return 'value from async fixture'
# So for the test we don't need to implicity use `aiolib` anymore
def test_with_async_fixtures(async_fixture):
assert async_fixture == 'value from async fixture'
Customize async libraries
By default each test function will be run with asyncio, trio, curio backends consistently (only if trio/curio are installed). But you can customise the libraries for all your tests creating the global fixture:
# Run all tests with Asyncio/Trio only
@pytest.fixture(params=['asyncio', 'trio'])
def aiolib(request):
assert request.param
If you want to specify different options for the selected backend, you can do so by passing a tuple of (backend name, options dict):
@pytest.fixture(params=[
pytest.param(('asyncio', {'use_uvloop': False}), id='asyncio'),
pytest.param(('asyncio', {'use_uvloop': True}), id='asyncio+uvloop'),
pytest.param(('trio', {'trio_asyncio': True}), id='trio+asyncio'),
pytest.param(('curio', {'debug': True}), id='curio'),
])
def aiolib(request):
assert request.param
To set a specific backends for a single test only:
@pytest.mark.parametrize('aiolib', ['asyncio'])
async def only_with_asyncio():
await asyncio.sleep(1)
assert True
Helpers
The plugin contains aiosleep fixture. It’s an equivalent to asyncio.sleep, trio.sleep, curio.sleep for current running library.
Bug tracker
If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/asgi-tools/issues
Contributing
Development of the project happens at: https://github.com/klen/pytest-aio
License
Licensed under a MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pytest_aio-1.9.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12a72816224863d402921b325086b398df8a0f4ca767639968a8097d762ac548 |
|
MD5 | 33d7b920cbff325b95d3436fdedd1a8e |
|
BLAKE2b-256 | f685f58b1fb37f4a4e78af6ee6900b5351c97671a63a88aa5e09d45d9c32c430 |