- Remove hardcoded logins/passwords from conftest.py - Load credentials via python-dotenv from .env (excluded from git) - Add BASE_URL env variable for easy environment switching - Add .env.example template for new contributors - Add validation: clear error message if .env is not filled - Add python-dotenv to requirements.txt
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
import os
|
||
import pytest
|
||
from dotenv import load_dotenv
|
||
from playwright.sync_api import Page
|
||
|
||
# Загружаем переменные из .env (файл находится в корне проекта)
|
||
load_dotenv()
|
||
|
||
# Базовый URL портала — берётся из .env или дефолт
|
||
BASE_URL = os.getenv("BASE_URL", "https://vet.goznak.ru")
|
||
|
||
# Словарь с учетными данными для разных ролей — берутся из .env
|
||
CREDENTIALS = {
|
||
"vetdept": {
|
||
"login": os.getenv("VETDEPT_LOGIN"),
|
||
"password": os.getenv("VETDEPT_PASSWORD"),
|
||
},
|
||
"vetstation": {
|
||
"login": os.getenv("VETSTATION_LOGIN"),
|
||
"password": os.getenv("VETSTATION_PASSWORD"),
|
||
},
|
||
"prefecture": {
|
||
"login": os.getenv("PREFECTURE_LOGIN"),
|
||
"password": os.getenv("PREFECTURE_PASSWORD"),
|
||
},
|
||
}
|
||
|
||
|
||
@pytest.fixture(scope="function")
|
||
def role_page(page: Page, request):
|
||
"""
|
||
Фикстура, которая определяет роль теста и автоматически авторизует пользователя.
|
||
Учётные данные загружаются из файла .env (не хранятся в коде).
|
||
"""
|
||
role = None
|
||
|
||
for marker in request.node.iter_markers():
|
||
if marker.name in CREDENTIALS:
|
||
role = marker.name
|
||
break
|
||
|
||
# Если маркер не найден, честно говорим об этом (вместо молчаливого NameError)
|
||
if role is None:
|
||
pytest.fail("ОШИБКА: У теста нет маркера роли (например, @pytest.mark.vetstation)!")
|
||
|
||
creds = CREDENTIALS[role]
|
||
|
||
# Проверяем что .env заполнен
|
||
if not creds["login"] or not creds["password"]:
|
||
pytest.fail(
|
||
f"ОШИБКА: Переменные окружения для роли '{role}' не заданы. "
|
||
f"Скопируй .env.example в .env и заполни данные."
|
||
)
|
||
|
||
print(f"\n[АВТОЛОГИН] Выполняется вход под ролью: {role}")
|
||
|
||
page.goto(BASE_URL)
|
||
page.get_by_role("textbox", name="Email").fill(creds["login"])
|
||
page.get_by_role("textbox", name="Введите пароль").fill(creds["password"])
|
||
page.get_by_role("button", name="Войти в аккаунт").click()
|
||
|
||
page.wait_for_selector("#app", timeout=10000)
|
||
|
||
yield page
|
||
|
||
page.context.clear_cookies() |