from __future__ import annotations import os import traceback from typing import Any, Callable import allure # pyright: ignore[reportMissingImports] from allure_commons.types import AttachmentType # pyright: ignore[reportMissingImports] def before_scenario(context: Any, scenario: Any) -> None: # noqa: ARG001 # behave context не типизирован, поэтому сохраняем список без аннотации справа (pyright ругается). context._cleanup_fns = [] # type: ignore[attr-defined] # GraphQL endpoint выбирается в worklib.graphql_client.execute_graphql: # - явный аргумент graphql_url # - env GRAPHQL_URL # - DEFAULT_GRAPHQL_URL # # Для Mockoon (proxy или чистый mock) достаточно перед запуском тестов выставить: # GRAPHQL_URL=http://localhost:8080/graphql # # Если пользователь выставил env USE_MOCKOON=1, аккуратно подменим GRAPHQL_URL, # но не трогаем его, если он уже задан явно. if os.getenv("USE_MOCKOON") in {"1", "true", "True"} and not os.getenv("GRAPHQL_URL"): os.environ["GRAPHQL_URL"] = "http://localhost:8081/graphql" context.graphql_url = os.getenv("GRAPHQL_URL") def after_scenario(context: Any, scenario: Any) -> None: # noqa: ARG001 cleanup_fns: list[Callable[[], None]] = getattr(context, "_cleanup_fns", []) while cleanup_fns: fn = cleanup_fns.pop() try: with allure.step(f"Cleanup: {getattr(fn, '__name__', 'cleanup')}"): fn() except Exception: allure.attach( traceback.format_exc(), name="Cleanup error", attachment_type=AttachmentType.TEXT, )