lcc_tool/test/test_calculation.py

70 lines
2.5 KiB
Python

# tests/test_calculation.py
import pytest
from pages.dev_page import DevPage
from pages.navigation import Navigation
from pages.calculation_page import CalculationPage
from pages.results_page import ResultsPage
class TestCalculation:
"""Testklasse für Berechnungslogik"""
def test_calculation_workflow(self, driver, wait, base_url, test_data):
"""
Haupttest: Führt einen kompletten Berechnungsdurchlauf durch
Wird automatisch für jede Excel-Datei parametrisiert
"""
login_page = DevPage(driver, wait)
login_page.dev_login(base_url, user_name="John")
# Setup assistant
nav = Navigation(driver, wait)
assistant = nav.start_calculation(base_url)
assistant.search_part_numbers(test_data["input"])
assistant.delete_preselected_suppliers()
assistant.select_supplier(test_data["input"])
assistant.create_calculation(test_data["input"])
# Fill calculation page
calc_page = CalculationPage(driver, wait)
calc_page.fill_form(test_data["input"])
for destination in test_data["input"]["DESTINATION"].values():
calc_page.add_destination(destination)
calc_page.fill_destination(destination)
# Ergebnisse lesen
results_page = ResultsPage(driver, wait)
actual_results = results_page.read_results()
# Assertions: Vergleich mit erwarteten Werten aus "out" Sheet
expected = test_data["expected"]
for field_name, expected_value in expected.items():
actual_value = actual_results.get(field_name)
# Numerische Werte mit Toleranz vergleichen
if self._is_numeric(expected_value):
expected_num = float(expected_value)
actual_num = float(actual_value.replace("", "").replace(",", ".").strip())
assert pytest.approx(expected_num, rel=0.01) == actual_num, \
f"Feld '{field_name}': Erwartet {expected_num}, erhalten {actual_num}"
else:
# String-Vergleich
assert str(actual_value).strip() == str(expected_value).strip(), \
f"Feld '{field_name}': Erwartet '{expected_value}', erhalten '{actual_value}'"
print(f"✓ Test erfolgreich für {test_data['filename']}")
@staticmethod
def _is_numeric(value):
"""Prüft ob Wert numerisch ist"""
try:
float(str(value).replace(",", "."))
return True
except (ValueError, AttributeError):
return False