mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:09:35 +01:00
feat(loadtest): Gatling-Lasttests mit ~2500 Requests für komprimiertes Jahres-Volumen
Szenarien: Stammdaten-CRUD, Produktions-Workflow, Lagerverwaltung, Read-Only-Zugriffe. Batch-Repository auf Summary-Projektion umgestellt, Permissions-Changeset Merge-Konflikt aufgelöst, Unit-Enum im JsonBodyBuilder korrigiert (KILOGRAM → KG).
This commit is contained in:
parent
8a9bf849a9
commit
11fb62383b
21 changed files with 1856 additions and 38 deletions
87
loadtest/README.md
Normal file
87
loadtest/README.md
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
# 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/<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
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue