mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 04:29:35 +01:00
Einheitliches Paginierungs-Pattern mit page, size und Multi-Field sort
für alle 14 List-Endpoints. Response-Format ändert sich von [...] zu
{ content: [...], page: { number, size, totalElements, totalPages } }.
Backend:
- Shared Kernel: Page<T>, PageRequest, SortField, SortDirection
- PaginationHelper (SQL ORDER BY mit Whitelist), PageResponse DTO
- Paginated Methoden in allen 14 Domain-Repos + JDBC-Implementierungen
- Safety-Limit (500) für findAllBelowMinimumLevel/ExpiryRelevantBatches
- Alle List-Use-Cases akzeptieren PageRequest, liefern Page<T>
- Alle Controller mit page/size/sort Query-Params + PageResponse
Frontend:
- PagedResponse<T> Type auf nested page-Format aktualisiert
- Alle 14 API-Client-Resourcen liefern PagedResponse mit PaginationParams
- Alle Hooks mit Pagination-State (currentPage, totalPages, pageSize)
- Alle List-Screens mit Seiten-Navigation (Pfeiltasten) und Footer
Loadtest:
- Podman-Support im justfile (DOCKER_HOST auto-detect)
- Verschärfte Performance-Schwellwerte basierend auf Ist-Werten
|
||
|---|---|---|
| .. | ||
| src/test | ||
| pom.xml | ||
| README.md | ||
Lasttests (Gatling)
Last- und Performance-Tests fuer Effigenix ERP auf Basis von Gatling.
Voraussetzungen
- Java 21
- Maven
- Docker oder Podman (fuer Testcontainers/PostgreSQL)
- Backend muss vorher gebaut sein (
mvn installim Root oderbackend/)
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:
cd backend
mvn clean install -DskipTests
Lasttests starten
cd loadtest
mvn gatling:test
Das startet automatisch:
- PostgreSQL via Testcontainers (Docker/Podman)
- Spring Boot embedded mit Liquibase-Migrationen
- Testdaten-Seeding (120 Artikel, 30 Lieferanten, 50 Kunden, 30 Rezepte, ~1500 Chargen, 100 Produktionsauftraege)
- 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/<simulation-name>/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