Для чего используется "pytest.mark.asyncio"?
Я не понимаю, для каких целей декоратор @pytest.mark.asyncio
может быть использован.
Я попытался запустить следующий фрагмент кода с pytest
а также pytest-asyncio
Плагин установлен, и он не работает, поэтому я пришел к выводу, что pytest собирает тестовые сопрограммы без декоратора. Почему так существует?
async def test_div():
return 1 / 0
2 ответа
Когда ваши тесты отмечены @pytest.mark.asyncio
они становятся сопрограммами вместе с ключевым словом await
в теле
pytest
выполнит его как асинхронную задачу, используя цикл обработки событий, предоставленный event_loop
крепление:
Этот код с декоратором
@pytest.mark.asyncio
async def test_example(event_loop):
do_stuff()
await asyncio.sleep(0.1, loop=event_loop)
равно писать это:
def test_example():
loop = asyncio.new_event_loop()
try:
do_stuff()
asyncio.set_event_loop(loop)
loop.run_until_complete(asyncio.sleep(0.1, loop=loop))
finally:
loop.close()
Ответ Славомира Ленарта по- прежнему верен, но обратите внимание, что по состоянию на
pytest-asyncio>=0.17
если вы добавите
asyncio_mode = auto
на ваш
pyproject.toml
или же
pytest.ini
нет необходимости в маркере, т.е. это поведение включается для асинхронных тестов автоматически.