Печать времени выполнения тестов и определение медленных тестов с помощью py.test

123

Я запускаю модульные тесты на сервере CI, используя py.test. Тесты используют внешние ресурсы, полученные по сети. Иногда выполнение тестов занимает слишком много времени, что приводит к прерыванию выполнения тестов. Я не могу повторять вопросы локально.

Есть ли способ заставить py.test распечатать время выполнения (медленного) теста, чтобы упростить поиск проблемных тестов?

Микко Охтамаа
источник

Ответы:

175

Я не уверен, что это решит вашу проблему, но вы можете перейти --durations=Nк печати самых медленных Nтестов после завершения набора тестов.

Используйте, --durations=0чтобы распечатать все.

Бруно Оливейра
источник
89
Если вы пройдете --durations=0время выполнения для ВСЕХ тестов, будет сообщено.
oLas
Вы знаете, есть ли возможность добавить его в сгенерированный отчет о покрытии HTML? Подобно тому, как добавление .coveragercфайла с содержимым [run] branch = Trueдобавляет информацию о покрытии ветвления?
Мартин Тома
Вам нужно будет добавить эту информацию самостоятельно, pytest-html поддерживает вставку дополнительного содержимого.
Бруно Оливейра
4
@oLas: Это неправда: если тесты «слишком быстрые», измеренное время, очевидно, может стать 0, и они все равно будут отфильтрованы. Отрицательный порог тоже в этом случае не помогает. Еще одна неприятность такого подхода заключается в том, что pytest всегда будет печатать, (0.00 durations hidden. Use -vv to show these durations.)что не имеет никакого смысла.
bluenote10
20

Вы можете передать номер с помощью --durations

pytest --durations=0 — Show all times for tests and setup and teardown

pytest --durations=1 — Just show me the slowest

pytest --durations=50 — Slowest 50, with times,  etc

Обратитесь к: https://medium.com/@brianokken/pytest-durations-0-show-all-times-for-tests-and-setup-and-teardown-848dccac85db

Или: https://docs.pytest.org/en/latest/usage.html#profiling-test-execution-duration

Phuong
источник