Вы не можете выборочно отключить произвольные плагины для выбранных тестов. Плагины загружаются на гораздо более ранней стадии - когда начинается pytest. И плагины фактически определяют, что делает pytest и как (например, параметры командной строки, коллекция тестов, фильтрация и т. Д.).
Другими словами, слишком поздно переопределять внутреннюю структуру pytest, когда она доходит до выполнения теста.
Ваш лучший случай, на самом деле, чтобы отметить тесты с @pytest.mark.nocatchlog
и выполнять их по отдельности:
pytest -m 'nocatchlog' -p no:catchlog # problematic tests with no plugin
pytest -m 'not nocatchlog` # all other tests
Если эти тесты не под вашим контролем, то есть, если вы не можете добавить метки, то вы можете только фильтр такими как -k test_logging
или -k 'not test_logging'
(т.е. по части их идентификатора узла).
Специально для этого pytest-catchlog
плагина, вы можете сделать same hooks как это делает, и удалить его обработчик журнала из корня регистратора (при условии, что никаких других регистраторы не использовались в явном виде):
conftest.py
:
import pytest
def _disable_catchlog(item):
logger = logging.getLogger()
if item.catch_log_handler in logger.handlers:
logger.handlers.remove(item.catch_log_handler)
@pytest.hookimpl(hookwrapper=True, trylast=True)
def pytest_runtest_setup(item):
_disable_catchlog(item)
yield
@pytest.hookimpl(hookwrapper=True, trylast=True)
def pytest_runtest_call(item):
_disable_catchlog(item)
yield
@pytest.hookimpl(hookwrapper=True, trylast=True)
def pytest_runtest_teardown(item):
_disable_catchlog(item)
yield
И как выглядит ошибка? Что конкретно не удалось? –
К сожалению, у меня нет доступа к этому коду; он бросал операцию «ValueError: I/O» на закрытый файл », но точная трассировка стека теряется, если я не воссоздаю эту структуру тестирования. – Jovik