метки времени запуска / остановки для каждой фазы вызова хранятся в объектах CallInfo
. Однако доступ к ним для отчетов не очень удобен, поэтому лучше хранить обе метки времени в объектах отчета. Поместите следующий код в файл conftest.py
в вашем проекте / тесте root dir:
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
report.start = call.start
report.stop = call.stop
Теперь, когда у вас есть каждый отчет, улучшенный со временем запуска / остановки, обработайте их так, как вам нужно, например, распечатав их в пользовательском разделе после выполнения теста. Расширьте свой conftest.py
файл с помощью:
def pytest_terminal_summary(terminalreporter):
terminalreporter.ensure_newline()
terminalreporter.section('start/stop times', sep='-', bold=True)
for stat in terminalreporter.stats.values():
for report in stat:
if report.when == 'call':
start = datetime.fromtimestamp(report.start)
stop = datetime.fromtimestamp(report.stop)
terminalreporter.write_line(f'{report.nodeid:20}: {start:%Y-%m-%d %H:%M:%S} - {stop:%Y-%m-%d %H:%M:%S}')
Выполнение тестовых примеров испытаний
def test_spam():
time.sleep(1)
def test_eggs():
time.sleep(2)
теперь дает:
test_spam.py .. [100%]
------------------------------ start/stop times -------------------------------
test_spam.py::test_spam: 2020-04-26 13:29:05 - 2020-04-26 13:29:06
test_spam.py::test_eggs: 2020-04-26 13:29:06 - 2020-04-26 13:29:08
============================== 2 passed in 3.03s ==============================
Обратите внимание, что в приведенном выше * Пример 1018 * hookimpl, я печатаю только время фазы call
(время выполнения тестовой функции). Если вы хотите увидеть или включить временные метки этапов настройки / завершения теста, отфильтруйте terminalreporter.stats
по объектам отчета с report.when == 'setup'
/ report.when == 'teardown'
соответственно.