92 lines
3.8 KiB
Python
92 lines
3.8 KiB
Python
"""
|
||
Корневой 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 тестирования — Портал учёта животных"
|