Удобный способ ограничить функцию (или блок кода) тайм-аутом - использовать модуль async-timeout .Вы можете использовать его внутри своей тестовой функции или, например, создать декоратор.В отличие от прибора, он позволяет указывать конкретное время для каждого теста:
import asyncio
import pytest
from async_timeout import timeout
def with_timeout(t):
def wrapper(corofunc):
async def run(*args, **kwargs):
with timeout(t):
return await corofunc(*args, **kwargs)
return run
return wrapper
@pytest.mark.asyncio
@with_timeout(2)
async def test_sleep_1():
await asyncio.sleep(1)
assert 1 == 1
@pytest.mark.asyncio
@with_timeout(2)
async def test_sleep_3():
await asyncio.sleep(3)
assert 1 == 1
Нетрудно создать декоратор для конкретного времени (with_timeout_5 = partial(with_timeout, 5)
).
НадеюсьНе знаю, как создать текстуру (если вам действительно нужен инструмент), но приведенный выше код может обеспечить отправную точку.Также не уверен, есть ли общий способ достичь цели лучше.