Плагин Pytest: переопределение pytest_runtest_call и друзей
Я разрабатываю тестовый набор, используя pytest для моего проекта. Из-за характера проекта мне нужно создать плагин Pytest, который контролирует, как выполняются тесты; они не запускаются локально, а отправляются в другой процесс для запуска. (Я знаю о xdist
но я думаю, что это не решает мою проблему.)
Я пишу свой собственный плагин Pytest, переопределяя различные методы pytest_runtest_*
. Пока все идет хорошо. Вот где я pytest_runtest_setup
на стену: мне нужны мои реализации pytest_runtest_setup
, pytest_runtest_call
и pytest_runtest_teardown
чтобы на самом деле нести ответственность за выполнение настройки, вызова и разрыва. Они собираются сделать это в другом процессе. Моя проблема: после того, как Pytest называет мой pytest_runtest_setup
, он также вызывает все остальные pytest_runtest_setup
по строке плагинов. Это связано с тем, что спецификация hook для pytest_runtest_setup
имеет firstresult=False
.
- Установка Pytest для нескольких модулей
- В py.test, что такое использование файлов conftest.py?
- Могут ли переменные, переданные в pytest fixture, передаваться как переменная?
- pytest fixture всегда возвращает функцию
- py.test: временная папка для области сеанса
Я не хочу этого, потому что я не хочу, чтобы pytest_runtest_setup
фактически выполнялся в текущем процессе. Я хочу быть ответственным за запуск этого самостоятельно. Я хочу переопределить, как он выполняется, а не добавлять к нему. Я хочу, чтобы другие реализации pytest_runtest_setup
ниже моих собственных, чтобы они не запускались.
Как я могу это сделать?
One Solution collect form web for “Плагин Pytest: переопределение pytest_runtest_call и друзей”
Родовые «runtest» крючки
Все крючки, связанные с runtest, получают объект pytest.Item.
pytest_runtest_protocol (item, nextitem) [источник]
implements the runtest_setup/call/teardown protocol for the given test item, including capturing exceptions and calling reporting hooks. Parameters: item – test item for which the runtest protocol is performed. nextitem – the scheduled-to-be-next test item (or None if this is the end my friend). This argument is passed on to pytest_runtest_teardown(). Return boolean: True if no further hook implementations should be invoked.
pytest_runtest_setup (пункт) [источник]
called before pytest_runtest_call(item).
pytest_runtest_call (пункт) [источник]
called to execute the test item.
pytest_runtest_teardown (item, nextitem) [источник]
called after pytest_runtest_call. Parameters: nextitem – the scheduled-to-be-next test item (None if no further test item is scheduled). This argument can be used to perform exact teardowns, ie calling just enough finalizers so that nextitem only needs to call setup-functions.
pytest_runtest_makereport (item, call) [источник]
return a _pytest.runner.TestReport object for the given pytest.Item and _pytest.runner.CallInfo.
Для более глубокого понимания вы можете взглянуть на реализацию этих крючков по умолчанию в _pytest.runner и, возможно, также в _pytest.pdb, которая взаимодействует с _pytest.capture и его захватом ввода / вывода, чтобы немедленно перейти к интерактивной отладке, когда происходит сбой тестирования.
Сообщается, что _pytest.terminal использует крючок отчетности для печати информации о пробном прогоне.
- Python: использование Google Finance для загрузки данных индекса
- Можем ли мы узнать, запущен ли сценарий Python из Windows или текстового терминала?