При просмотре документации для py.test
крючков здесь или здесь мне неясно, что означает выражение hookwrapper=True
в определении крючка, например:
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_pyfunc_call(pyfuncitem):
do_something_before_next_hook_executes()
outcome = yield
# outcome.excinfo may be None or a (cls, val, tb) tuple
res = outcome.get_result() # will raise if outcome was exception
post_process_result(res)
outcome.force_result(new_res) # to override the return value to the plugin system
Что значит определить его с помощью hookwrapper=False
?
Я пришел к этому вопросу, когда создал хук в conftest.py
для хука pytest_report_teststatus
, который работает только тогда, когда я определяю ловушку с помощью hookwrapper=False
:
@pytest.hookimpl(hookwrapper=False)
def pytest_report_teststatus(report):
return report.outcome, "letter", report.outcome.upper()
При таком использовании точка ('.') успешного теста не записывается в стандартный вывод.
Это как-то связано с генераторами?
Я попытался переопределить тот же хук следующим образом:
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_report_teststatus(report):
yield report.outcome, "", report.outcome.upper()
, используя hookwrapper=True
, но это не изменило результат теста (т. Е. Точка '.' Все же печатается).Так что же означает hookwrapper
?
Бонус : Почему не работает вторая реализация ловушки pytest_report_teststatus
?