Files
e2e_Pets/conftest.py
2026-09-03 15:40:00 +03:00

92 lines
3.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Корневой conftest.py — конфигурация на уровне всей сессии.
Здесь размещены хуки, которые должны работать глобально.
"""
import os
# pyrefly: ignore [missing-import]
import pytest
# pyrefly: ignore [missing-import]
from dotenv import load_dotenv
from tests.utils.tls import detect_tls_mode, tls_info_key, find_gost_browser_executable
load_dotenv()
BASE_URL = os.getenv("BASE_URL", "https://vet.goznak.ru")
# ---------------------------------------------------------------------------
# Регистрация CLI аргументов запуска
# ---------------------------------------------------------------------------
def pytest_addoption(parser):
"""Регистрирует дополнительные флаги командной строки для pytest."""
parser.addoption(
"--tls-mode",
action="store",
default="auto",
choices=["auto", "gost", "standard"],
help="Режим TLS: auto (по умолчанию — автоопределение), gost (принудительно ГОСТ TLS), standard (обычный TLS).",
)
parser.addoption(
"--ignore-https-errors",
action="store_true",
default=True,
help="Игнорировать ошибки SSL сертификатов в браузере (по умолчанию: True).",
)
# ---------------------------------------------------------------------------
# Настройка блока Environment и заголовка HTML-отчёта
# ---------------------------------------------------------------------------
def pytest_sessionstart(session):
"""
Заменяет технические данные в блоке Environment отчёта на значимые.
pytest-html 4.x читает данные через config.stash[metadata_key]
(API pytest-metadata 3.x). Наш хук изменяет именно этот stash.
"""
config = session.config
# Получаем режим TLS из CLI аргумента или .env
cli_tls_mode = config.getoption("--tls-mode", default="auto")
force_mode = None if cli_tls_mode == "auto" else cli_tls_mode
# Определяем режим TLS с кэшированием и сохраняем в stash сессии
is_gost, tls_desc = detect_tls_mode(BASE_URL, force_mode=force_mode)
config.stash[tls_info_key] = (is_gost, tls_desc)
if is_gost:
gost_exec = find_gost_browser_executable()
if gost_exec and "yandex" in gost_exec.lower():
browser_name = "Яндекс.Браузер (ГОСТ)"
else:
browser_name = "Chromium GOST"
else:
browser_name = "Chromium (Playwright)"
try:
# pyrefly: ignore [missing-import]
from pytest_metadata.plugin import metadata_key
metadata = config.stash[metadata_key]
except (ImportError, KeyError):
metadata = getattr(config, "_metadata", None)
if metadata is None:
return
# Сбрасываем технические данные от pytest-metadata
metadata.clear()
# Заполняем значимыми данными для отчёта руководителю
metadata["Проект"] = "e2e_Pets — Учёт домашних животных"
metadata["Портал"] = BASE_URL
metadata["TLS Режим"] = tls_desc
metadata["Браузер"] = browser_name
metadata["Окружение"] = os.getenv("TEST_ENV", "Production")
metadata["Тестировщик"] = os.getenv("TESTER_NAME", "QA Team")
def pytest_html_report_title(report):
"""Задаёт заголовок HTML-отчёта."""
report.title = "Отчёт E2E тестирования — Портал учёта животных"