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
5 changed files with 30 additions and 6 deletions

View file

@ -65,7 +65,9 @@ async def test_backfill_browser_fetcher_gets_proxy_pool_wiring(
db.execute.return_value.mappings.return_value.all.return_value = [
{"id": 1, "address": "ЕКБ, ул. X, 1", "full_address": None, "lat": 56.8, "lon": 60.6}
]
await hib.backfill_house_imv(db, batch_size=1)
# request_delay_sec=0: мок дублирует строку в retry+fresh (2 записи вместо 1) — реальный
# анти-бот sleep(5с) между ними тут не нужен.
await hib.backfill_house_imv(db, batch_size=1, request_delay_sec=0)
captured = _CapturingFetcher.captured
assert captured["source"] == "avito"

View file

@ -101,6 +101,12 @@ async def _run(pending: list[dict], *, force: bool = False, resolved: str | None
),
patch.object(mod, "_sleep_with_jitter", AsyncMock(return_value=None)),
patch("app.services.scraper_adapters.RealScraperConfig", MagicMock()),
# Удачный резолв доходит до fetch_jk — без мока это реальный BrowserFetcher/прокси-пул
# (26с на живом прогоне); тесту нужен только факт «маркер не выставлен», не сам fetch.
patch(
"scraper_kit.providers.yandex.newbuilding.YandexNewbuildingScraper.fetch_jk",
AsyncMock(return_value=None),
),
):
await mod.enrich_yandex_newbuilding_sweep(
db, city="ekaterinburg", limit=5, force=force, request_delay_sec=0

View file

@ -129,7 +129,11 @@ def _capture(method: str, **kw: object) -> list[str]:
def test_anchor_sweep_uses_secondary_slug_by_default() -> None:
"""fetch_around по умолчанию — путь вторички, geoCoords/radius сохранены в query."""
urls = _capture("fetch_around", lat=56.84, lon=60.6, radius_m=1000, pages=1)
# delay_override_sec=0: сеть подменена, anti-ban sleep(5с*jitter) после единственной
# страницы тут не защищает ничего реального.
urls = _capture(
"fetch_around", lat=56.84, lon=60.6, radius_m=1000, pages=1, delay_override_sec=0
)
assert urls, "fetch_around не сделал запроса"
u = urlparse(urls[0])
assert u.path == f"/ekaterinburg/kvartiry/prodam/{SECONDARY_SLUG}", u.path
@ -139,8 +143,15 @@ def test_anchor_sweep_uses_secondary_slug_by_default() -> None:
def test_anchor_sweep_secondary_only_false_keeps_general_path() -> None:
"""Контроль: secondary_only=False — прежняя общая выдача."""
# delay_override_sec=0: тот же anti-ban trailing sleep, что и в тесте выше.
urls = _capture(
"fetch_around", lat=56.84, lon=60.6, radius_m=1000, pages=1, secondary_only=False
"fetch_around",
lat=56.84,
lon=60.6,
radius_m=1000,
pages=1,
secondary_only=False,
delay_override_sec=0,
)
assert urlparse(urls[0]).path == "/ekaterinburg/kvartiry/prodam-ASgBAgICAUSSA8YQ"

View file

@ -64,7 +64,9 @@ async def test_backfill_flag_on_constructs_browser_and_threads_it(
monkeypatch.setattr(house_imv_backfill, "_process_one_house", _fake_process)
db = _fake_db_with_one_row()
await house_imv_backfill.backfill_house_imv(db, batch_size=10)
# request_delay_sec=0: мок дублирует строку в retry+fresh (2 записи вместо 1) — реальный
# анти-бот sleep(5с) между ними тут не нужен.
await house_imv_backfill.backfill_house_imv(db, batch_size=10, request_delay_sec=0)
# Ровно один BrowserFetcher(source="avito"), вошли в контекст.
assert len(_FakeBrowserFetcher.instances) == 1
@ -91,7 +93,8 @@ async def test_backfill_flag_off_no_browser_and_none_threaded(
monkeypatch.setattr(house_imv_backfill, "_process_one_house", _fake_process)
db = _fake_db_with_one_row()
await house_imv_backfill.backfill_house_imv(db, batch_size=10)
# request_delay_sec=0: та же дублирующая мок-строка retry+fresh, что и в тесте выше.
await house_imv_backfill.backfill_house_imv(db, batch_size=10, request_delay_sec=0)
# Флаг OFF → BrowserFetcher не конструируется, browser_fetcher=None.
assert _FakeBrowserFetcher.instances == []

View file

@ -186,7 +186,9 @@ async def test_house_imv_backfill_browser_fetcher_uses_settings_endpoint() -> No
db.execute.return_value.mappings.return_value.all.return_value = [
{"id": 1, "address": "ЕКБ, ул. X, 1", "full_address": None, "lat": 56.8, "lon": 60.6}
]
await house_imv_backfill.backfill_house_imv(db, batch_size=1)
# request_delay_sec=0: мок дублирует строку в retry+fresh (2 записи вместо 1) —
# реальный анти-бот sleep(5с) между ними тут не нужен.
await house_imv_backfill.backfill_house_imv(db, batch_size=1, request_delay_sec=0)
# #2698: к endpoint= добавилась проводка пула — без неё сайдкар брал env-прокси
# (узел с affinity='domclick'), и домовая оценка падала 34 дня подряд.