lcc_tool/test/conftest.py

101 lines
No EOL
3.2 KiB
Python

# conftest.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from pathlib import Path
import openpyxl
@pytest.fixture(scope="session")
def browser_options():
options = Options()
options.add_argument("--start-maximized")
# options.add_argument("--headless") # Optional für CI/CD
return options
@pytest.fixture(scope="function")
def driver(browser_options):
"""Erstellt einen neuen Browser pro Test"""
driver = webdriver.Chrome(options=browser_options)
driver.implicitly_wait(10)
yield driver
driver.quit()
@pytest.fixture(scope="function")
def wait(driver):
"""WebDriverWait Instanz"""
return WebDriverWait(driver, 20)
@pytest.fixture
def base_url():
"""Basis-URL deiner Anwendung"""
return "http://localhost:5173"
def pytest_generate_tests(metafunc):
"""Parametrisiert Tests basierend auf Excel-Dateien im testdata Ordner"""
if "testcase_file" in metafunc.fixturenames:
testdata_dir = Path("testcases")
excel_files = list(testdata_dir.glob("*.xlsx"))
# IDs für bessere Testausgabe
ids = [f.stem for f in excel_files]
metafunc.parametrize("testcase_file", excel_files, ids=ids)
@pytest.fixture
def test_data(testcase_file):
"""Lädt Testdaten aus Excel-Datei"""
wb = openpyxl.load_workbook(testcase_file)
# Eingabedaten aus "in" Sheet
input_sheet = wb["in"]
input_data = {}
groups = {}
for row in input_sheet.iter_rows(values_only=True):
if row[0]: # Feldname in Spalte A
if '_' in row[0]:
[remainder, suffix] = row[0].rsplit('_',1)
if suffix.isdigit():
[prefix, name] = remainder.split('_',1)
if prefix not in groups:
groups[prefix] = {}
if groups[prefix].get(suffix) is None:
groups[prefix][suffix] = {}
groups[prefix][suffix][name] = row[1]
else:
input_data[row[0]] = row[1]
else:
input_data[row[0]] = row[1] # Wert in Spalte B
input_data.update(groups)
# Erwartete Ausgaben aus "out" Sheet
output_sheet = wb["out"]
expected_data = {}
expected_groups = {}
for row in input_sheet.iter_rows(values_only=True):
if row[0]: # Feldname in Spalte A
if '_' in row[0]:
[remainder, suffix] = row[0].rsplit('_',1)
if suffix.isdigit():
[prefix, name] = remainder.split('_',1)
if prefix not in expected_groups:
expected_groups[prefix] = {}
if expected_groups[prefix].get(suffix) is None:
expected_groups[prefix][suffix] = {}
expected_groups[prefix][suffix][name] = row[1]
else:
expected_data[row[0]] = row[1]
else:
expected_data[row[0]] = row[1] # Wert in Spalte B
expected_data.update(expected_groups)
return {
"input": input_data,
"expected": expected_data,
"filename": testcase_file.name
}