From f5111022899701b86d4ced07823c410d26c2886b Mon Sep 17 00:00:00 2001 From: VolandSZ <{E-MAIL}> Date: Wed, 2 Sep 2026 10:42:51 +0300 Subject: [PATCH] feat: customize HTML report Environment block and title MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit conftest.py (корневой, новый): - pytest_sessionstart — заменяет блок Environment: Проект / Портал / Окружение / Браузер / Тестировщик - pytest_html_report_title — заголовок 'Отчёт E2E тестирования' - Использует config.stash[metadata_key] (правильный API для pytest-metadata 3.x + pytest-html 4.x) - Fallback на config._metadata для старых версий tests/conftest.py: - Убраны дублирующие хуки (перенесены в корневой conftest) Переменные окружения для кастомизации: TEST_ENV — название среды (по умолчанию 'Production') TESTER_NAME — имя тестировщика (по умолчанию 'QA Team') --- conftest.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++ tests/conftest.py | 2 ++ 2 files changed, 57 insertions(+) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..5486220 --- /dev/null +++ b/conftest.py @@ -0,0 +1,55 @@ +""" +Корневой conftest.py — конфигурация на уровне всей сессии. +Здесь размещены хуки которые должны работать глобально. +""" +import os +# pyrefly: ignore [missing-import] +from dotenv import load_dotenv + +load_dotenv() +BASE_URL = os.getenv("BASE_URL", "https://vet.goznak.ru") + + +# --------------------------------------------------------------------------- +# Настройка блока Environment и заголовка HTML-отчёта +# --------------------------------------------------------------------------- + +def pytest_sessionstart(session): + """ + Заменяет технические данные в блоке Environment отчёта на значимые. + + pytest-html 4.x читает данные через config.stash[metadata_key] + (API pytest-metadata 3.x). Наш хук изменяет именно этот stash. + + Чтобы изменить содержимое — редактируй словарь ниже. + Чтобы убрать строку — удали соответствующий ключ. + Чтобы добавить строку — добавь новую пару ключ/значение. + Порядок записей соответствует порядку в отчёте. + """ + config = session.config + + try: + # pytest-metadata 3.x — используется pytest-html 4.x + from pytest_metadata.plugin import metadata_key + metadata = config.stash[metadata_key] + except (ImportError, KeyError): + # Fallback на старый API (pytest-metadata < 3.0) + metadata = getattr(config, "_metadata", None) + if metadata is None: + return + + # Сбрасываем технические данные от pytest-metadata + metadata.clear() + + # Заполняем значимыми данными для отчёта руководителю + # ↓ Редактируй эти значения под свой проект ↓ + metadata["Проект"] = "e2e_Pets — Учёт домашних животных" + metadata["Портал"] = BASE_URL + metadata["Окружение"] = os.getenv("TEST_ENV", "Production") + metadata["Браузер"] = "Chromium (Playwright)" + metadata["Тестировщик"] = os.getenv("TESTER_NAME", "QA Team") + + +def pytest_html_report_title(report): + """Задаёт заголовок HTML-отчёта.""" + report.title = "Отчёт E2E тестирования — Портал учёта животных" diff --git a/tests/conftest.py b/tests/conftest.py index 1c5cf6e..56bc9f1 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -12,6 +12,8 @@ load_dotenv() # Базовый URL портала — берётся из .env или дефолт BASE_URL = os.getenv("BASE_URL", "https://vet.goznak.ru") + + # Учётные данные для разных ролей — берутся из .env CREDENTIALS = { "vetdept": {