Цель
Ускорить и упорядочить прогон тестов. Сейчас полный pytest идёт ~93с последовательно; быстрый unit-прогон возможен за ~20с, но не отделён по умолчанию.
Замеры (профиль, 2026-06-19)
- Полный
pytest: 2596 passed, 50 skipped — ~93с.
- Только unit (
--ignore=tests/test_integration*.py -k "not live and not integration"): 2511 passed — ~20с.
- Разницу (~73с) дают сетевые тесты. Top-15
--durations — почти целиком tests/test_integration.py и tests/test_v4_live_contracts.py (5.6с / 3.4с / 3.4с …), т.е. живые вызовы API.
- Причина, по которой сеть гоняется на обычном
pytest: в .env есть YANDEX_DIRECT_TOKEN, а integration/live-тесты по правилу резолва кредов (env/.env → profile → skip) перестают автоскипаться. На машине разработчика с токеном pytest молча ходит в прод-read.
pytest-xdist установлен (3.8.0), но в addopts не включён — прогон последовательный.
Направления (делать потом, отдельными шагами)
- Скорость — параллельный прогон. Включить xdist для unit-слоя (
-n auto). Сетевые тесты, чувствительные к порядку/общему состоянию, при необходимости пометить serial. Ожидаемый выигрыш на ~20с unit-слое заметный, на сетевом — ограничен задержками API.
- Разделить unit / сеть. Сетевые тесты (live-contracts, integration, WSDL/docs fetch) под отдельный маркер/профиль, чтобы дефолтный
pytest был быстрым и оффлайновым, а сеть запускалась явно (-m integration / отдельная CI-джоба). Сейчас @pytest.mark.integration есть у части — нужно ревизовать охват и поведение при наличии токена в .env.
- Убрать дубли / общие fixture. Поискать повторную сборку
CliRunner/клиента в каждом тесте, переиспользовать session-scoped fixture; найти избыточно дублирующиеся проверки.
Что НЕ делаем
- Не меняем правило резолва кредов в тестах (env/.env > profile > skip) — оно намеренно (CLAUDE.md: developer machine must not silently hit production). Но при разделении слоёв дефолтный быстрый прогон не должен требовать/использовать токен.
Файлы-ориентиры
pyproject.toml ([tool.pytest.ini_options], addopts) — где включать xdist/маркеры.
tests/test_integration.py, tests/test_integration_write.py, tests/test_v4_live_contracts.py — сетевой слой.
tests/conftest.py — общие fixture/резолв кредов.
Цель
Ускорить и упорядочить прогон тестов. Сейчас полный
pytestидёт ~93с последовательно; быстрый unit-прогон возможен за ~20с, но не отделён по умолчанию.Замеры (профиль, 2026-06-19)
pytest: 2596 passed, 50 skipped — ~93с.--ignore=tests/test_integration*.py -k "not live and not integration"): 2511 passed — ~20с.--durations— почти целикомtests/test_integration.pyиtests/test_v4_live_contracts.py(5.6с / 3.4с / 3.4с …), т.е. живые вызовы API.pytest: в.envестьYANDEX_DIRECT_TOKEN, а integration/live-тесты по правилу резолва кредов (env/.env → profile → skip) перестают автоскипаться. На машине разработчика с токеномpytestмолча ходит в прод-read.pytest-xdistустановлен (3.8.0), но вaddoptsне включён — прогон последовательный.Направления (делать потом, отдельными шагами)
-n auto). Сетевые тесты, чувствительные к порядку/общему состоянию, при необходимости пометитьserial. Ожидаемый выигрыш на ~20с unit-слое заметный, на сетевом — ограничен задержками API.pytestбыл быстрым и оффлайновым, а сеть запускалась явно (-m integration/ отдельная CI-джоба). Сейчас@pytest.mark.integrationесть у части — нужно ревизовать охват и поведение при наличии токена в.env.CliRunner/клиента в каждом тесте, переиспользовать session-scoped fixture; найти избыточно дублирующиеся проверки.Что НЕ делаем
Файлы-ориентиры
pyproject.toml([tool.pytest.ini_options],addopts) — где включать xdist/маркеры.tests/test_integration.py,tests/test_integration_write.py,tests/test_v4_live_contracts.py— сетевой слой.tests/conftest.py— общие fixture/резолв кредов.