Noob_test/KVSTest/features/environment.py
2026-05-15 11:34:24 +03:00

34 lines
1.4 KiB
Python

from __future__ import annotations
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
# Стек очистки: функции вызываются в обратном порядке (LIFO).
context._cleanup_fns: list[Callable[[], None]] = [] # type: ignore[attr-defined]
# Свежие фабрики данных на сценарий (иначе кешируются place_id/account_id после cleanup).
for attr in ("kvs_test_data", "kvs_subscription_test_data"):
if hasattr(context, attr):
delattr(context, attr)
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:
# Cleanup не должен скрывать причину падения сценария, но полезно приложить traceback в Allure.
allure.attach(
traceback.format_exc(),
name="Cleanup error",
attachment_type=AttachmentType.TEXT,
)