perf(tradein-tests): убираем реальные паузы из 5 медленных тестов #3500

Merged
lekss361 merged 1 commit from perf/3471-tests-faster-tradein into main 2026-09-12 13:46:30 +00:00
Owner

Summary

  • test_2924_yandex_resolve_tried_at::test_successful_resolve_does_not_mark (26.21с -> ~0.02с): мокнутый db.execute дублирует одну строку в retry- и fresh-выборках backfill_house_imv, из-за чего реально выполняется await asyncio.sleep(5) анти-бот паузы между "двумя" домами. Фикс: request_delay_sec=0 в вызове теста (прод-дефолт 5.0с не тронут).
  • Тот же паттерн дублирования строки бил ровно на 5.01с ещё 4 теста: test_house_imv_backfill_browser_flag (2 теста), test_2698_imv_sidecar_wiring::test_backfill_browser_fetcher_gets_proxy_pool_wiring, test_scraper_kit_group_c_backfill_kit_parity::test_house_imv_backfill_browser_fetcher_uses_settings_endpoint — тот же фикс.
  • test_3033_avito_native_secondary_filter (2 теста, 7.82с + 5.72с): fetch_around с одной страницей всё равно делает "trailing sleep" анти-бана (request_delay_sec=5.0*jitter) после единственного мокнутого запроса — передан delay_override_sec=0 (сеть уже подменена fake_fetch).

Не удалено ни одного теста, ни одного assert. Прод-задержки (anti-bot 5с в house_imv_backfill.py, request_delay_sec=5.0 в scraper-kit base.py) не менялись — ускорен только тестовый прогон.

Не успел (бюджет 35 вызовов / 15 мин)

  • test_auth_api (3 теста, ~12с суммарно) — задержка настоящая: реальный bcrypt cost=12 на каждую попытку логина, не sleep. Требует отдельного анализа (monkeypatch _BCRYPT_ROUNDS в app/core/password.py для конкретных тестов, аккуратно — это security-параметр).
  • test_3398_estimator_valuations_proxy_pool::test_yandex_lease_released_once_on_success (5.57с) — не дошли.
  • test_alerts_become_events.py (10 тестов ~2.05с каждый, ~20с суммарно) — общий источник паузы не найден, похоже на фикстуру.
  • test_backfill_wave2::test_backfill_yandex_addresses_error_on_non_200 (3.02с) — не дошли.
  • test_estimator_event_loop_2207::test_estimate_quality_does_not_block_event_loop (2.42с) — вероятно НЕ стоит трогать: тест намеренно делает реальный time.sleep(0.3), чтобы доказать, что estimate_quality не блокирует event loop (сравнивает с параллельной корутиной). Решение по нему — за владельцем.

Test plan

  • ruff check по всем 5 изменённым файлам — чисто
  • uv run pytest tests/test_2924_yandex_resolve_tried_at.py tests/test_house_imv_backfill_browser_flag.py tests/test_2698_imv_sidecar_wiring.py tests/test_scraper_kit_group_c_backfill_kit_parity.py tests/test_3033_avito_native_secondary_filter.py — 27 passed за 4.07с (было ~55-60с)
  • Полный прогон (pytest -q) не запускался в рамках этой сессии (бюджет) — рекомендую прогнать в CI

🤖 Generated with Claude Code

https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG

## Summary - `test_2924_yandex_resolve_tried_at::test_successful_resolve_does_not_mark` (26.21с -> ~0.02с): мокнутый `db.execute` дублирует одну строку в retry- и fresh-выборках `backfill_house_imv`, из-за чего реально выполняется `await asyncio.sleep(5)` анти-бот паузы между "двумя" домами. Фикс: `request_delay_sec=0` в вызове теста (прод-дефолт 5.0с не тронут). - Тот же паттерн дублирования строки бил ровно на 5.01с ещё 4 теста: `test_house_imv_backfill_browser_flag` (2 теста), `test_2698_imv_sidecar_wiring::test_backfill_browser_fetcher_gets_proxy_pool_wiring`, `test_scraper_kit_group_c_backfill_kit_parity::test_house_imv_backfill_browser_fetcher_uses_settings_endpoint` — тот же фикс. - `test_3033_avito_native_secondary_filter` (2 теста, 7.82с + 5.72с): `fetch_around` с одной страницей всё равно делает "trailing sleep" анти-бана (`request_delay_sec=5.0*jitter`) после единственного мокнутого запроса — передан `delay_override_sec=0` (сеть уже подменена fake_fetch). Не удалено ни одного теста, ни одного `assert`. Прод-задержки (anti-bot 5с в `house_imv_backfill.py`, `request_delay_sec=5.0` в scraper-kit `base.py`) не менялись — ускорен только тестовый прогон. ## Не успел (бюджет 35 вызовов / 15 мин) - `test_auth_api` (3 теста, ~12с суммарно) — задержка настоящая: реальный bcrypt cost=12 на каждую попытку логина, не `sleep`. Требует отдельного анализа (monkeypatch `_BCRYPT_ROUNDS` в `app/core/password.py` для конкретных тестов, аккуратно — это security-параметр). - `test_3398_estimator_valuations_proxy_pool::test_yandex_lease_released_once_on_success` (5.57с) — не дошли. - `test_alerts_become_events.py` (10 тестов ~2.05с каждый, ~20с суммарно) — общий источник паузы не найден, похоже на фикстуру. - `test_backfill_wave2::test_backfill_yandex_addresses_error_on_non_200` (3.02с) — не дошли. - `test_estimator_event_loop_2207::test_estimate_quality_does_not_block_event_loop` (2.42с) — вероятно НЕ стоит трогать: тест намеренно делает реальный `time.sleep(0.3)`, чтобы доказать, что `estimate_quality` не блокирует event loop (сравнивает с параллельной корутиной). Решение по нему — за владельцем. ## Test plan - [x] `ruff check` по всем 5 изменённым файлам — чисто - [x] `uv run pytest tests/test_2924_yandex_resolve_tried_at.py tests/test_house_imv_backfill_browser_flag.py tests/test_2698_imv_sidecar_wiring.py tests/test_scraper_kit_group_c_backfill_kit_parity.py tests/test_3033_avito_native_secondary_filter.py` — 27 passed за 4.07с (было ~55-60с) - [ ] Полный прогон (`pytest -q`) не запускался в рамках этой сессии (бюджет) — рекомендую прогнать в CI 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
lekss361 added 1 commit 2026-09-12 13:34:49 +00:00
perf(tradein-tests): убираем реальные паузы из 5 медленных тестов
All checks were successful
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 11s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 6m50s
b21f4cb044
test_2924_yandex_resolve_tried_at::test_successful_resolve_does_not_mark (26с):
мокнутый db.execute дублирует одну строку в retry- и fresh-выборках,
backfill_house_imv видит 2 строки и делает реальный await asyncio.sleep(5) между
ними (анти-бот задержка); фикс — request_delay_sec=0 в вызове теста, дефолт в
проде не тронут.

Тот же паттерн дублирования строки бьёт ещё 4 теста ровно на 5.01с каждый:
test_house_imv_backfill_browser_flag (2 теста), test_2698_imv_sidecar_wiring,
test_scraper_kit_group_c_backfill_kit_parity — тот же фикс.

test_3033_avito_native_secondary_filter (2 теста, 7.82с + 5.72с): fetch_around
с одной страницей всё равно делает "trailing sleep" анти-бана
(request_delay_sec=5.0*jitter) после единственного мокнутого запроса — передаём
delay_override_sec=0, сеть и так подменена fake_fetch.

Не удалено ни одного теста и ни одного assert. Прод-задержки (anti-bot 5с,
request_delay_sec=5.0 в scraper_kit) не менялись.

Не успел в рамках бюджета: test_auth_api (реальный bcrypt cost=12, не sleep —
требует отдельного анализа), test_3398_estimator_valuations_proxy_pool,
test_alerts_become_events (10 тестов ~2.05с), test_backfill_wave2,
test_estimator_event_loop_2207 (последний, вероятно, специально измеряет
реальный sleep(0.3с) для доказательства non-blocking — трогать осторожно).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
lekss361 merged commit 1f3585c136 into main 2026-09-12 13:46:30 +00:00
lekss361 deleted branch perf/3471-tests-faster-tradein 2026-09-12 13:46:30 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3500
No description provided.