Skip to content

tests: ускорить и упорядочить прогон (xdist не включён; ~93с полный vs ~20с unit; сеть гоняется из-за токена в .env) #579

@axisrow

Description

@axisrow

Цель

Ускорить и упорядочить прогон тестов. Сейчас полный 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 не включён — прогон последовательный.

Направления (делать потом, отдельными шагами)

  1. Скорость — параллельный прогон. Включить xdist для unit-слоя (-n auto). Сетевые тесты, чувствительные к порядку/общему состоянию, при необходимости пометить serial. Ожидаемый выигрыш на ~20с unit-слое заметный, на сетевом — ограничен задержками API.
  2. Разделить unit / сеть. Сетевые тесты (live-contracts, integration, WSDL/docs fetch) под отдельный маркер/профиль, чтобы дефолтный pytest был быстрым и оффлайновым, а сеть запускалась явно (-m integration / отдельная CI-джоба). Сейчас @pytest.mark.integration есть у части — нужно ревизовать охват и поведение при наличии токена в .env.
  3. Убрать дубли / общие 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/резолв кредов.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions