Files
e2e_Pets/tests/01_vetdept/BP01_navigation/test_bp01_navigation.py
VolandSZ e718bf48d4 refactor: hierarchical test architecture (Project > Role > BP > Steps)
Реструктурированы тесты под иерархию Проект > Личный кабинет > БП > Шаги.

Архитектура:
- Бизнес-процесс = Python-класс, шаг = метод класса
- Шаги именуются test_s01_*, test_s02_* и т.д.
- БП именуются BP01_, BP02_ и т.д., каждый в своей папке

Передача данных:
- browser_page (scope=class) — один браузер на весь БП, авторизация 1 раз
- bp_state (scope=class) — словарь для передачи данных между шагами одного БП
- shared_state (scope=session) — словарь для передачи между разными БП

Зависимости шагов (pytest-dependency):
- Если шаг N упал, шаги N+1... получают статус SKIPPED автоматически
- Имена зависимостей: BP01::s01, BP01::s02 и т.д.

Изменения файлов:
- tests/conftest.py: добавлены browser_page и bp_state, вынесены
  вспомогательные функции _get_role и _login, сохранена role_page
  (deprecated) для обратной совместимости
- tests/01_vetdept/conftest.py: новый, содержит shared_state
- tests/01_vetdept/BP01_navigation/: новая папка с тестом навигации
- tests/01_vetdept/001_login_test.py: удалён (переписан в BP01)
- requirements.txt: добавлен pytest-dependency
- pytest.ini: добавлен маркер dependency
2026-08-31 17:37:21 +03:00

57 lines
2.5 KiB
Python
Raw 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.

import os
import pytest
# pyrefly: ignore [missing-import]
from playwright.sync_api import Page, expect
BASE_URL = os.getenv("BASE_URL", "https://vet.goznak.ru")
@pytest.mark.vetdept
@pytest.mark.usefixtures("browser_page")
class TestBP01Navigation:
"""
BP01: Навигация по разделам портала
Проверяет что пользователь с ролью 'Управление Ветеринарии' может:
- Открыть главную страницу (Dashboard)
- Видеть заголовок своей организации
- Перейти в раздел Организации
- Перейти в раздел Заявки на отлов
"""
@pytest.mark.dependency(name="BP01::s01")
def test_s01_open_dashboard(self, browser_page: Page, bp_state: dict):
"""Шаг 1: Открыть главную страницу (Dashboard)"""
browser_page.goto(BASE_URL + "/dashboard")
expect(browser_page).to_have_url(BASE_URL + "/dashboard")
bp_state["start_url"] = browser_page.url
@pytest.mark.dependency(name="BP01::s02", depends=["BP01::s01"])
def test_s02_check_org_header(self, browser_page: Page, bp_state: dict):
"""Шаг 2: Проверить заголовок организации в интерфейсе"""
expect(browser_page.locator("#app")).to_contain_text(
"Управление Ветеринарии Гознак"
)
@pytest.mark.dependency(name="BP01::s03", depends=["BP01::s02"])
def test_s03_go_to_organizations(self, browser_page: Page, bp_state: dict):
"""Шаг 3: Перейти в раздел Организации"""
browser_page.get_by_role("link", name="Организации").click()
expect(browser_page).to_have_url(
BASE_URL + "/organizations", timeout=10000
)
expect(
browser_page.get_by_text("Подведомственные организации")
).to_be_visible(timeout=10000)
@pytest.mark.dependency(name="BP01::s04", depends=["BP01::s03"])
def test_s04_go_to_claims(self, browser_page: Page, bp_state: dict):
"""Шаг 4: Перейти в раздел Заявки на отлов"""
browser_page.get_by_role("link", name="Заявки на отлов").click()
expect(browser_page).to_have_url(
BASE_URL + "/claims-list", timeout=10000
)
expect(browser_page.get_by_text("Мои заявки")).to_be_visible(
timeout=10000
)