Тесты бэкенда PyPI шли 163 секунды, стали 30 — при том что самих… — Zen of Python — TG.ME

Тесты бэкенда PyPI шли 163 секунды, стали 30 — при том что самих тестов стало больше: было около 3900, стало больше 4700.

Алексис Шалланд описал, что именно сделали. Порядок действий подойдёт любому медленному набору на 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
🔥5❤2
August 24, 2026 1.6K 24