Dynamische Properties beim Generieren injizieren¶
Diese Anleitung erklärt, wie Du mit DATAMIMIC dynamische Properties während des Generierungsprozesses einfügst, ohne die Projektdateien dauerhaft zu verändern. Das ist besonders nützlich, wenn Du das gleiche Projekt parallel mit unterschiedlichen Parametern ausführen möchtest – zum Beispiel in CI/CD-Pipelines oder bei Lasttests.
Das Problem¶
Stell Dir folgende Szenarien vor:
- Paralleles Testen: Du führst denselben Test-Workflow gleichzeitig in mehreren Branches oder Umgebungen aus.
- Lasttests: Du generierst mit demselben Datenmodell unterschiedliche Datenmengen.
- Feature-Flags: Du testest verschiedene Feature-Konfigurationen, ohne für jede Variante ein eigenes Projekt anzulegen.
- Umgebungsspezifische Werte: Du verwendest je nach Umgebung unterschiedliche Datenbankverbindungen oder API-Endpunkte.
Ohne dynamische Properties müsstest Du:
- Für jede Konfiguration ein eigenes Projekt anlegen (hoher Wartungsaufwand)
- Dateien vor jedem Lauf per API ändern (Race Conditions bei paralleler Ausführung)
- Komplexe Templating-Mechanismen nutzen (erhöhte Komplexität)
Die Lösung¶
Mit der Funktion Dynamische Properties Injection kannst Du:
- Projekte unverändert lassen: Die Originaldateien bleiben unangetastet.
- Werte pro Ausführung injizieren: Jeder API-Aufruf kann eigene Property-Werte mitgeben.
- Parallele Sicherheit gewährleisten: Keine Race Conditions bei gleichzeitigen Ausführungen.
- Isolierte Ausführungen sicherstellen: Jede Ausführung erhält ihre eigenen temporären Property-Werte.
Funktionsweise¶
Der Ablauf sieht wie folgt aus:
- Setup-Phase: Lege eine Properties-Datei in Deinem Projekt an (z.B.
runtime.properties
). - Konfigurationsphase: Binde diese Properties-Datei mit höchster Priorität in Dein Hauptmodell ein.
- Ausführungsphase: Starte die Generierung per API und übergib individuelle Property-Werte.
- Injektionsphase: DATAMIMIC erstellt eine temporäre Kopie Deines Projekts und überschreibt die Properties-Datei mit den übergebenen Werten.
- Verarbeitungsphase: Die Generierung läuft mit den individuellen Werten.
- Cleanup-Phase: Temporäre Dateien werden entfernt, das Originalprojekt bleibt unverändert.
Projekt-Setup¶
Schritt 1: Properties-Datei anlegen¶
Lege im conf
-Verzeichnis Deines Projekts eine Properties-Datei an. Der Dateiname muss auf .properties
enden.
conf/runtime.properties | |
---|---|
1 2 3 4 5 |
|
Schritt 2: Properties-Datei im Hauptmodell einbinden¶
Binde die Properties-Datei in Deiner Haupt-XML (datamimic.xml
) als letztes Include ein, damit sie die höchste Priorität hat:
datamimic.xml | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Reihenfolge der Includes ist wichtig
Properties-Dateien, die später eingebunden werden, überschreiben Werte aus früheren Includes. Binde daher die Runtime-Properties immer zuletzt ein.
Schritt 3: Properties in Modellen verwenden¶
Verwende die Properties in Deinen Datenmodellen wie folgt:
models/generate_users.xml | |
---|---|
1 2 3 4 5 6 7 8 |
|
API-Nutzung¶
Einfaches Beispiel¶
Nachdem Du Dein DATAMIMIC-Projekt in der UI eingerichtet hast, kannst Du per API den Generierungsprozess starten und dynamisch Property-Werte übergeben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Nach dem Absenden erhältst Du eine Task-ID, mit der Du den Status und das Ergebnis der Generierung abfragen kannst. Mehr dazu findest Du im Leitfaden zu Projekt-Zugriffstoken.
Mit diesem Ansatz kannst Du dasselbe Projekt parallel mit unterschiedlichen Konfigurationen ausführen – jede Ausführung erhält ihre eigenen isolierten Property-Werte.
Unterschiedliche Modell-Dateien pro Request verwenden¶
Du kannst auch pro Request eine andere Modell-Datei einbinden, indem Du den Dateinamen dynamisch übergibst. Angenommen, Du hast zwei Modell-Dateien: models/load_performance.xml
und models/integration_test.xml
.
Binde die Modell-Datei dynamisch ein:
1 2 3 4 5 6 7 8 9 10 |
|
Deine Datei conf/dynamic_model_path.properties
könnte so aussehen:
1 |
|
API-Request für den Lasttest:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
API-Request für den Integrationstest:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Diese Requests können parallel ausgeführt werden und liefern jeweils unterschiedliche Daten.
Fehlerbehebung¶
Häufige Probleme¶
1. Properties-Datei nicht gefunden¶
Fehler: FileNotFoundError: runtime.properties not existed
Lösung: Die Properties-Datei muss im Projekt vorhanden sein, bevor Du dynamische Werte injizierst.
1 2 3 4 5 6 7 8 9 |
|
2. Property-Werte werden nicht angewendet¶
Problem: Die generierten Daten spiegeln die injizierten Werte nicht wider.
Lösungen:
- Include-Reihenfolge prüfen: Runtime-Properties müssen zuletzt eingebunden werden.
- Property-Namen prüfen: Die Namen müssen exakt übereinstimmen.
- Syntax prüfen: Property-Referenzen müssen das Format
{property_name}
haben.
3. Ungültiger Property-Dateiname¶
Fehler: ValidationError: The file name must end with .properties
Lösung: Der Dateiname muss auf .properties
enden:
1 2 3 4 5 6 |
|
Debugging-Tipps¶
- Task-Logs prüfen: Mit der Task-ID kannst Du detaillierte Logs abrufen.
- Mit minimalen Properties testen: Starte mit einer Property, um Fehler einzugrenzen.
- JSON validieren: Stelle sicher, dass Dein API-Request korrekt formatiert ist.
- Dateiberechtigungen prüfen: Die Properties-Datei muss im Projekt lesbar sein.
Fazit¶
Mit der dynamischen Properties Injection kannst Du DATAMIMIC-Projekte sicher und flexibel parallel ausführen – ohne Race Conditions und mit sauberer Konfiguration. Die wichtigsten Erfolgsfaktoren sind:
- Durchdachtes Projekt-Setup mit strategischer Einbindung der Property-Dateien
- Sorgfältige API-Integration mit Fehlerbehandlung und Monitoring
Bei Fragen oder für fortgeschrittene Anwendungsfälle kontaktiere unser Support-Team.