Я пытаюсь выяснить, как написать плагин pytest, который можно использовать для провала теста после его запуска (для тех, кто хочет больше контекста, это связано с astropy / pytest-openfiles # 28 ). Давайте рассмотрим следующий простой тестовый файл:
class TestClass:
def setup_method(self, method):
print("In setup_method")
def teardown_method(self, method):
print("In teardown_method")
def test_simple(self):
print("In test")
Теперь я могу определить файл conftest.py
, который содержит:
def pytest_runtest_teardown(item, nextitem):
print("In pytest_runtest_teardown")
В этом хуке я могу выполнять проверки - например в случае, если меня интересует, мы проверяем наличие открытых файловых дескрипторов. Однако проблема в том, что этот хук запускается после setup_method
и после самого теста (test_simple
), но до teardown_method
:
% pytest test.py -vs
...
collected 1 item
test.py::TestClass::test_simple In setup_method
In test
PASSEDIn pytest_runtest_teardown
In teardown_method
Я рассмотрел вместо этого использование:
def pytest_runtest_makereport(item, call):
if call.when != 'teardown':
return
print("In pytest_runtest_makereport")
, который выполняется после teardown_method
, но в этот момент, если я вызову исключение, pytest выдаст INTERNALERROR
и все равно будет считать тест успешным.
Есть ли способ потерпеть неудачу / Ошибка теста после teardown_method
был вызван?