Как получить доступ к общему времени выполнения в pytest? - PullRequest
1 голос
/ 23 мая 2019

После запуска теста в pytest есть обзор:

============= 7 пройдено за 1,11 секунды ============

Мне нравится получать доступ к времени (здесь 1.11) в конце pytest.

некоторая полезная информация, которую я нашел уже здесь:

Как я могу получить доступобщий результат теста Pytest во время выполнения?

Но не совпадает с общим временем выполнения теста.

Я пытался использовать def pytest_sessionfinish (session, exitstatus)

Я не нашел там общей продолжительности.

Похоже, значение находится внутри объекта RunResult.https://docs.pytest.org/en/latest/_modules/_pytest/pytester.html#RunResult

Как получить доступ?

1 Ответ

2 голосов
/ 23 мая 2019

Вы можете получить доступ к отметке времени начала выполнения в экземпляре плагина TerminalReporter, а затем просто самостоятельно рассчитать время выполнения (это также то, что делает сама pytest). Пример:

# conftest.py

import time

def pytest_sessionfinish(session, exitstatus):
    reporter = session.config.pluginmanager.get_plugin('terminalreporter')
    duration = time.time() - reporter._sessionstarttime
    reporter.write_sep('=', 'duration: {} seconds'.format(duration), yellow=True, bold=True)

Обновление

Как отмечено looki в комментариях, это не будет возвращать общее время выполнения при выполнении тестов, распределенных с pytest-xdist, поскольку каждый процесс становится своим собственным экземпляром сеанса. Переключитесь на хук pytest_unconfigure (реализация почти такая же):

def pytest_unconfigure(config):
    reporter = config.pluginmanager.get_plugin('terminalreporter')
    duration = time.time() - reporter._sessionstarttime
    reporter.write_sep('=', 'duration: {} seconds'.format(duration), yellow=True, bold=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...