From fb9c27977d382ef0e3423957db50e95389ae5543 Mon Sep 17 00:00:00 2001 From: gglamer Date: Sat, 26 Sep 2026 19:27:52 +0000 Subject: [PATCH] =?UTF-8?q?perf:=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=20?= =?UTF-8?q?=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B5=D0=B2=20=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D0=BD=20=D1=80=D0=B0=D0=B7=20=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/tests/conftest.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 2366ade..efd808e 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -5,8 +5,10 @@ логинятся через `dev-token` — так же, как `make lesson` (tasks/lct-23-auth-roles.md). """ +import copy import os import socket +from pathlib import Path from urllib.parse import urlparse os.environ.setdefault("DEV_AUTH_BYPASS", "true") @@ -43,6 +45,29 @@ def _dev_auth(): yield +@pytest.fixture(autouse=True, scope="session") +def _parsed_yaml_once(): + """Каждый `TestClient` на старте перечитывает всю библиотеку сценариев: + ~200 YAML — это 0.2 с на тест и минута на прогон. Разбор кешируется на + сессию; проверка схемы и сборка эталона идут по-прежнему на каждый старт. + Копия — чтобы правка словаря в одном тесте не протекла в другой. + """ + from app.scenarios import loader + + original = loader._read_yaml + cache: dict[tuple[Path, int], dict] = {} + + def cached(path: Path) -> dict: + key = (path.resolve(), path.stat().st_mtime_ns) + if key not in cache: + cache[key] = original(path) + return copy.deepcopy(cache[key]) + + loader._read_yaml = cached + yield + loader._read_yaml = original + + @pytest.fixture(autouse=True) def _fresh_engine(): """Движок базы — на тест, а не на процесс.