Что означает «hookwrapper» для крюков «py.test»? - PullRequest
0 голосов
/ 27 сентября 2018

При просмотре документации для 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...