2015-01-28 5 views
1

Я использую pytest. Я хотел бы собрать/сохранить некоторые данные для постмодерного анализа при неудаче теста. Я могу написать teardown_method, но я не вижу способа получить статус теста в этом контексте.Pytest: как принять меры при неудаче теста?

Можно ли предпринять какие-либо действия по любому тесту (или assertion)?

ответ

4

Реализовать pytest_exception_interact в conftest.py файле, который в соответствии с documentation:

вызывается, когда исключение воспитывался, которые потенциально могут быть интерактивно обработаны.

def pytest_exception_interact(node, call, report): 
    if report.failed: 
     # call.excinfo contains an ExceptionInfo instance 

Это не ясно из вашего вопроса, что именно вы хотите, чтобы собрать от ошибок, но, вероятно, имея доступ к ExceptionInfo например, должно быть достаточно для вашего случая.

+0

Интересно! Вы знаете, как я могу получить ссылку на свой тестовый объект изнутри pytest_exception_interact? – BobDoolittle

+1

Исследуйте 'node' в отладчике ... если ваши тестовые функции определены в классе, я считаю, что' node.parent.obj' предоставит вам доступ к экземпляру тестового класса. –

+0

Собственно, это node.parent._obj, но да, отлично работает, спасибо! – BobDoolittle

0

Вы также можете сделать это во второй половине выход прибора:

https://docs.pytest.org/en/latest/example/simple.html#making-test-result-information-available-in-fixtures

+2

Ссылка на решение приветствуется, но, пожалуйста, убедитесь, что ваш ответ полезен без него: [добавить контекст вокруг ссылки] (// meta.stackexchange.com/a/8259), чтобы ваши соплеменники имели представление о том, что это такое и почему он там, затем укажите наиболее релевантную часть страницы, на которую вы ссылаетесь, в случае недоступности целевой страницы. [Ответы, которые немного больше, чем ссылка, могут быть удалены.] (// stackoverflow.com/help/deleted-answers) –