К сожалению, плагин pytest-timeout , который предоставляет маркер @pytest.mark.timeout
, не предоставляет средства для перехвата времени ожидания (для справки source ).
Вы можете найти больше удачи, используя библиотеку, которая предлагает функцию тайм-аута в качестве менеджера контекста, например, из Thomas Ahle ' answer
import signal
class Timeout:
def __init__(self, seconds=1, error_message='Timeout'):
self.seconds = seconds
self.error_message = error_message
def handle_timeout(self, signum, frame):
raise TimeoutError(self.error_message)
def __enter__(self):
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(self.seconds)
def __exit__(self, type, value, traceback):
signal.alarm(0)
def test_it_doesnt_succeed():
try:
with Timeout(seconds=6):
do_the_thing()
except TimeoutError:
pass
else:
raise AssertionError('Expected the thing to timeout!')