Алексис Шалланд описал, что именно сделали. Порядок действий подойдёт любому медленному набору на pytest:
🔘 распараллелить через
pytest-xdist с --numprocesses=auto; на 32 ядрах замер упал с 191 до 63 секунд;🔘 чтобы процессы не топтали данные друг друга, фикстура базы берёт идентификатор рабочего процесса: у каждого своя база
tests-{worker_id};🔘 для покрытия в параллельном режиме добавить
sitecustomize.py с coverage.process_startup();🔘 переключить измерение покрытия на механизм наблюдения из Python 3.12 через
COVERAGE_CORE=sysmon — с 58 до 27 секунд;🔘 указать
testpaths: сбор тестов ускорился с 7,84 до 2,60 секунды;🔘 прогнать
python -X importtime и выкинуть лишний импорт.Логику тестов при этом не меняли и покрытие не снижали.
@zen_of_python
