Для чего используется "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нет необходимости в маркере, т.е. это поведение включается для асинхронных тестов автоматически.

См . https://github.com/pytest-dev/pytest-asyncio#modes .

Другие вопросы по тегам