Есть множество мест, где вы можете напечатать свои собственные вещи в pytest
;выберите подходящий хук из списка хуков и переопределите его, добавив собственную печать.Чтобы немного оживить примеры, я распечатаю некоторую системную информацию, используя функцию-оболочку screenfetch
:
def screenfetch():
exec = shutil.which('screenfetch')
out = ''
if exec:
out = subprocess.run(exec, stdout=subprocess.PIPE, universal_newlines=True).stdout
return out
Пользовательская печать после выполнения теста
Создатьфайл conftest.py
в корневом каталоге вашего проекта со следующим содержанием:
from utils import screenfetch
def pytest_unconfigure(config):
print(screenfetch())
Результат:
![enter image description here](https://i.stack.imgur.com/TVmka.png)
Если вы хотитеусловная печать только при успешных тестовых запусках, используйте pytest_sessionfinish
для хранения кода выхода:
def pytest_sessionfinish(session, exitstatus):
session.config.exitstatus = exitstatus
def pytest_unconfigure(config):
if config.exitstatus == 0:
print(screenfetch())
Другие примеры:
Расширенное резюме
# conftest.py
from utils import screenfetch
def pytest_terminal_summary(terminalreporter, exitstatus, config):
terminalreporter.ensure_newline()
terminalreporter.write(screenfetch())
Настраиваемая печать до pytest
Начало вывода
# conftest.py
from utils import screenfetch
def pytest_configure(config):
print(screenfetch())
Настраиваемая печать после pytest
Информация заголовка
# conftest.py
import screenfetch
def pytest_report_header(config, startdir):
return screenfetch()
Настраиваемая печать после собранных тестов, до запуска теста
# conftest.py
import os
from utils import screenfetch
def pytest_collection_modifyitems(session, items):
terminalreporter = session.config.pluginmanager.get_plugin('terminalreporter')
terminalreporter.ensure_newline()
terminalreporter.write(screenfetch())
Пользовательская печать после каждого теста
def pytest_report_teststatus(report, config):
if report.when == 'teardown': # you may e.g. also check the outcome here to filter passed or failed tests only
terminalreporter = config.pluginmanager.get_plugin('terminalreporter')
terminalreporter.ensure_newline()
terminalreporter.write(screenfetch())
Обратите внимание, что я использую плагин terminalreporter
вместо просто print
, где это возможно, - именно так pytest
сам излучаетвыход.