130 lines
3.9 KiB
Python
130 lines
3.9 KiB
Python
import logging
|
|
import allure
|
|
import pytest
|
|
from selenium import webdriver
|
|
from selenium.webdriver.chrome.options import Options
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
from datetime import datetime
|
|
|
|
from config.ui_config import UIConfig
|
|
from tests.api.utils.api_client import APIClient
|
|
from utils import waiters
|
|
|
|
from api.utils.api_client import APIClient
|
|
from api.conftest import *
|
|
from fixtures.data_fixtures import *
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
@pytest.fixture
|
|
def driver(request):
|
|
"""Фикстура для браузера"""
|
|
logger.info("=" * 50)
|
|
logger.info("Initializing webdriver")
|
|
|
|
headless = UIConfig.BROWSER_HEADLESS
|
|
browser_name = UIConfig.BROWSER_NAME
|
|
fullscreen = UIConfig.BROWSER_FULLSCREEN
|
|
|
|
logger.info(f"Headless: {headless}")
|
|
logger.info("Browser: {browser_name}")
|
|
|
|
logger.info("=" * 50)
|
|
|
|
if browser_name == "chrome":
|
|
options = Options()
|
|
if headless:
|
|
options.add_argument("--headless")
|
|
if fullscreen:
|
|
options.add_argument("--start-maximized")
|
|
options.add_argument("--no-sandbox")
|
|
options.add_argument("--disable-dev-shm-usage")
|
|
options.add_argument("--window-size=1920,1080")
|
|
|
|
driver = webdriver.Chrome(
|
|
options=options
|
|
)
|
|
else:
|
|
options = webdriver.FirefoxOptions()
|
|
if headless:
|
|
options.add_argument("--headless")
|
|
if fullscreen:
|
|
options.add_argument("--kiosk")
|
|
options.add_argument("--width=1920")
|
|
options.add_argument("--height=1080")
|
|
driver = webdriver.Firefox(
|
|
options=options
|
|
)
|
|
|
|
driver.implicitly_wait(10)
|
|
driver.maximize_window()
|
|
|
|
waiters.waiter = WebDriverWait(driver, 10)
|
|
|
|
def fin():
|
|
if request.node.rep_call.failed:
|
|
try:
|
|
# Делаем скриншот при падении теста
|
|
screenshot = driver.get_screenshot_as_png()
|
|
allure.attach(
|
|
screenshot,
|
|
name=f"screenshot_{datetime.now().strftime('%Y%m%d_%H%M%S')}",
|
|
attachment_type=allure.attachment_type.PNG
|
|
)
|
|
|
|
# Получаем текущий URL
|
|
current_url = driver.current_url
|
|
allure.attach(
|
|
current_url,
|
|
name="current_url",
|
|
attachment_type=allure.attachment_type.TEXT
|
|
)
|
|
|
|
# Получаем исходный код страницы
|
|
page_source = driver.page_source
|
|
allure.attach(
|
|
page_source,
|
|
name="page_source",
|
|
attachment_type=allure.attachment_type.HTML
|
|
)
|
|
except:
|
|
pass
|
|
driver.quit()
|
|
|
|
request.addfinalizer(fin)
|
|
|
|
yield driver
|
|
driver.quit()
|
|
|
|
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
|
|
def pytest_runtest_makereport(item, call):
|
|
"""
|
|
Хук для получения результатов теста
|
|
"""
|
|
outcome = yield
|
|
rep = outcome.get_result()
|
|
setattr(item, "rep_" + rep.when, rep)
|
|
|
|
@pytest.fixture(scope="function")
|
|
def gen_data_fixture(auth_admin: APIClient, api_user_data, api_post_data):
|
|
with allure.step("Generating data"):
|
|
id = ''
|
|
user = api_user_data[0]
|
|
resp = auth_admin.create_user(user)
|
|
assert resp.status_code == 201
|
|
id = resp.json()['id']
|
|
|
|
post = api_post_data[0]
|
|
post['userId'] = id
|
|
auth_admin.create_post(post)
|
|
yield
|
|
|
|
with allure.step("Deleting generated data"):
|
|
posts = auth_admin.get_all_posts().json()
|
|
users = auth_admin.get_all_users().json()
|
|
|
|
for post in posts:
|
|
auth_admin.delete_post(post['id'])
|
|
|
|
for user in users:
|
|
auth_admin.delete_user(user['id'])
|