101 lines
No EOL
3.2 KiB
Python
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
|
|
} |