сбор тестов pytest занимает много времени

#pytest

#pytest

Вопрос:

У меня есть небольшой проект с 1 тестом, сбор которого занимает много времени. Я зарегистрировал коллекции и отчеты о коллекциях. Между 22:51:59 и 22: 52: 04 я не уверен, что происходит, но именно здесь возникает пауза (простоя?).

 [pytest]
testpaths = myproject/tests
python_files = *.py
addopts = -s
norecursedirs = docs *.egg-info .git appdir .tox __pycache__ .cache

root@0d696173168f:/var/www/myproject# pytest myproject/tests/redis/
================================= test session starts =================================
platform linux -- Python 3.5.2, pytest-3.0.3, py-1.4.31, pluggy-0.4.0
rootdir: /var/www/myproject, inifile: pytest.ini
22:51:59: collection started
22:51:59: collecting file: /var/www/myproject/myproject/tests/redis/__init__.py
22:51:59: collecting file: /var/www/myproject/myproject/tests/redis/pubsub.py
collecting 0 items22:51:59: collection report: <CollectReport '' lenresult=2 outcome='passed'>
22:51:59: collection started
collecting 0 items22:52:04: collection report: <CollectReport 'myproject/tests/redis/__init__.py' lenresult=0 outcome='passed'>
22:52:04: collection started
22:52:04: collection started
collecting 0 items22:52:04: collection report: <CollectReport 'myproject/tests/redis/pubsub.py::RedisTest' lenresult=0 outcome='passed'>
22:52:04: collection started
22:52:04: collected item: <TestCaseFunction 'test_pass'>
collecting 1 items22:52:04: collection report: <CollectReport 'myproject/tests/redis/pubsub.py::RegisterTests' lenresult=1 outcome='passed'>
collecting 1 items22:52:04: collection report: <CollectReport 'myproject/tests/redis/pubsub.py' lenresult=2 outcome='passed'>
collected 1 items

myproject/tests/redis/pubsub.py .

============================== 1 passed in 5.64 seconds ===============================
  

Комментарии:

1. У меня была похожая проблема — оказывается, я добавил очень трудоемкие вычисления в модуль, в котором были функции, которые я импортировал в тестах. Помните, что импорт в Python запускает фактический файл. Поэтому важно защитить основной код с if __name__ == '__main__': помощью инструкции.

2. Не ответ, но в последнее время я время от времени замечал подобную проблему и понял, что она совпадает с проблемами при обновлении ОС до Big Sur на Mac. Короче говоря, сеть доступна, но не работает. Если я отключу сеть, паузы не будет. Как только я исправлю сеть, паузы не будет. Но если пакет pytest считает, что есть сеть, он потратит 30 секунд, пытаясь сделать что-то. Еще не понял, что именно.

Ответ №1:

Трудно сказать что-то конкретное, не взглянув на тестовый код.

Я рекомендую убедиться, что в тестовых модулях у вас есть только тестовые функции / классы и / или приспособления. Причина в том, что любой «развернутый» код в тестовых модулях будет выполняться pytest на этапе сбора.