# Lasttests (Gatling) Last- und Performance-Tests fuer Effigenix ERP auf Basis von [Gatling](https://gatling.io/). ## Voraussetzungen - Java 21 - Maven - Docker oder Podman (fuer Testcontainers/PostgreSQL) - Backend muss vorher gebaut sein (`mvn install` im Root oder `backend/`) ## Backend bauen Das Loadtest-Modul bindet das Backend als Dependency ein und startet es embedded. Daher muss das Backend-Artefakt im lokalen Maven-Repository vorhanden sein: ```bash cd backend mvn clean install -DskipTests ``` ## Lasttests starten ```bash cd loadtest mvn gatling:test ``` Das startet automatisch: 1. PostgreSQL via Testcontainers (Docker/Podman) 2. Spring Boot embedded mit Liquibase-Migrationen 3. Testdaten-Seeding (120 Artikel, 30 Lieferanten, 50 Kunden, 30 Rezepte, ~1500 Chargen, 100 Produktionsauftraege) 4. Gatling-Simulation mit ~2500 Requests ## Lastprofil | Szenario | User | Repeat | ~Requests | |---|---|---|---| | Stammdaten CRUD | 15 | 15x | ~240 | | Produktions-Workflow | 30 | 1x (Chain) | ~270 | | Lagerverwaltung | 15 | 15x | ~240 | | Produktion Read-Only | 50 | 15x | ~800 | | Stammdaten Read-Only | 50 | 15x | ~800 | | **Gesamt** | | | **~2350** | ## Ergebnisse Nach dem Lauf liegt der HTML-Report unter: ``` loadtest/target/gatling//index.html ``` ## Assertions - p95 < 500ms (global) - p99 < 1000ms (global) - Fehlerrate < 5% - Einzeldatensatz-Reads: mean < 20ms - Listen (wenig Daten): mean < 35ms - Listen (viel Daten): mean < 75ms - Write-Requests: mean < 50ms ## Konfiguration - `src/test/resources/gatling.conf` - Gatling-Einstellungen (Charting, HTTP-Cache, Writer) - `src/test/resources/logback-test.xml` - Log-Level waehrend der Tests ## Aufbau ``` loadtest/ src/test/java/de/effigenix/loadtest/ infrastructure/ LoadTestInfrastructure.java # Startet PostgreSQL + Spring Boot LoadTestDataSeeder.java # Erzeugt realistische Testdaten via REST-API scenario/ AuthenticationScenario.java # Login-Chain MasterDataScenario.java # Artikel, Lieferanten, Kunden ProductionScenario.java # Rezepte, Chargen, Produktionsauftraege InventoryScenario.java # Lagerorte, Bestaende simulation/ FullWorkloadSimulation.java # Haupt-Simulation (kombiniert alle Szenarien) util/ JsonBodyBuilder.java # JSON-Request-Body-Erzeugung ```