Есть ли способ ускорить повторное выполнение py.test
? Кажется, что он тратит много времени на сбор тестов, даже если я укажу, какие файлы выполнять в командной строке. Я знаю, что это не проблема скорости диска, так как запуск pyflakes по всем файлам .py очень быстр.Как ускорить py.test
ответ
Использование опции norecursedirs
в pytest.ini или tox.ini может сэкономить много времени на сбор, в зависимости от того, какие другие файлы у вас есть в вашем рабочем каталоге. Время моей коллекции примерно вдвое сокращено для набора из 300 тестов, когда у меня есть это на месте (0,34 с против 0,64).
Если вы уже используете tox, как я, вам просто нужно добавить следующее в вашем tox.ini:
[pytest]
norecursedirs = docs *.egg-info .git appdir .tox
Вы также можете добавить его в свободно стоящем pytest.ini файл.
В документации к pytest имеется more details on py.test configuration files.
Дополнительно (или вместо этого) вы должны настроить 'testpaths', то есть' testpaths = src/tests'. Тогда вам не нужно пропускать '.git',' .tox' и т. Д. – blueyed
У меня была такая же проблема, когда я звонил py.test
в корень моего проекта, а мои тесты были три подкаталога вниз. Сбор составлял 6-7 секунд до 0,4 секунды фактического выполнения теста.
Мое решение изначально было назвать py.test
с относительным путем к тестам:
py.test src/www/tests/
Если делать это ускоряет сбор также, вы можете добавить относительный путь к тестам на конец addopts
установка в вашем pytest.ini
- например:
[pytest]
addopts = --doctest-glob='test_*.md' -x src/www/tests/
Это уронил время сбора + исполнения вплоть до около второго, и я все еще мог просто позвонить py.test
, как я был раньше.
Лучше всего настроить это с помощью 'testpaths', то есть' testpaths = src/www/tests'. – blueyed
С помощью xdist вы можете распараллелить запуск py.test. Это позволяет даже отправлять тесты на удаленные компьютеры. Зависит от вашей настройки, это может ускориться совсем немного :)
В специальном случае, когда вы работаете под управлением python cygwin, его обработка файлов в стиле unix выполняется медленно. См. pytest.py test very slow startup in cygwin о том, как ускорить работу в этой особой ситуации.
Если у вас есть антивирусное программное обеспечение, попробуйте отключить его. У меня была такая же проблема. Сбор тестов проходил невероятно медленно. Это оказалось моим антивирусным программным обеспечением (Avast), которое вызывало проблему. Когда я отключил антивирусное программное обеспечение, коллекция тестов работала примерно в пять раз быстрее. Я тестировал его несколько раз, включив и выключил антивирус, поэтому я не сомневаюсь, что это было причиной в моем случае.
- 1. Как установить py.test?
- 2. Py.test поиск
- 3. Как использовать py.test из Python?
- 4. Как установить py.test на Windows
- 5. Как показывать предупреждения в py.test
- 6. Запуск py.test под pypy
- 7. параметрирование объектов fi.test py.test
- 8. Py.test модуля не назван *
- 9. py.test отслеживающего дисплей пути
- 10. Проекты, использующие py.test
- 11. Запуск py.test от emacs
- 12. py.test and teardown
- 13. py.test main() примеры вызова
- 14. catch sys.exit с py.test
- 15. Команда «py.test» vs «pytest»
- 16. В чем разница между «py.test somepath» и «py.test --pyargs pkg»
- 17. tmpdir in py.test setup_class
- 18. Несколько копий py.test арматуры
- 19. py.test: ошибка: Непризнанные аргументы
- 20. Py.test не найти тесты
- 21. py.test не находит модуль
- 22. py.test: протоколирование числа сбоев
- 23. Измените имя тестов py.test
- 24. Turbogears2 и py.test
- 25. классы тестирования параметрирования py.test
- 26. Регистрация в тестах py.test
- 27. Как узнать py.test, чтобы установить необходимые модули?
- 28. Как проверить поведение в приборах py.test?
- 29. Как добавить аргументы cli в py.test?
- 30. Как отправить переменную config в тест py.test?
Вы уверены, что фаза "сбора" замедленна? Попробуйте запустить py.test с помощью '--collectonly'. – alecxe
Да, это медленная коллекция. Я могу видеть, что счетчик сбора начинается с 0, перейдите к 2, затем 7. Я проверил это снова с помощью '--collectonly'. Почтовый сбор: исполнение почти сразу. –
У меня есть проект с более чем 400 тестами, и фаза сбора очень быстро. Кроме того, у меня есть conftest.py, который добавляет много волшебства, множество «параметритов», «светильников» и «pytest_generate_tests», которые делают сбор медленнее, несмотря на то, что сбор в этом случае происходит быстро. Убедитесь, что у вас нет собственного кода, который взаимодействует с фазой сбора данных pytest и замедляет работу. Если нет, вы можете запустить профилировщик как профилировщик строк, чтобы увидеть, какой код медленный. – spinus