Я настраиваю некоторую конфигурацию в conftest.py для повторного запуска неудачных тестов pytest в определенных случаях.
Эта функция была добавлена в conftest.py.Идея состоит в том, что тест можно настроить на повторную попытку с помощью фикстуры запроса, чтобы установить для request.node.retry значение True.
def pytest_runtest_protocol(item, nextitem):
"""Checks for manual mark and if found, reruns test if requested"""
if item.get_closest_marker("manual") is None:
return
# Infinite loop for rerunning tests
while True:
# Run test and get result
item.ihook.pytest_runtest_logstart(
nodeid=item.nodeid,
location=item.location
)
# Hangs on this line on retry
reports = runtestprotocol(item, nextitem=nextitem)
# Check results
if not getattr(item, 'retry', False):
for report in reports:
item.ihook.pytest_runtest_logreport(report=report)
return True
else:
delattr(item, 'retry')
Это работает, когда выполняется несколько тестов, но если выполняется только один тест, или если тест является последним в серии, то первый сбой теста вызывает разрыв всех приборов.Приспособления на уровне функций могут быть настроены заново (на самом деле, я хочу, чтобы они обеспечивали чистое состояние), но приборы на уровне сеансов также сносятся, и мне нужны они для перезапуска теста.
Есть ли какой-нибудь способ предотвратить демонтаж устройства сеансового уровня, пока я не буду готов?