Files
espocrm/custom/scripts/E2E_TESTS_README.md
2026-01-25 12:57:12 +01:00

5.4 KiB

EspoCRM E2E Test Suite

Automatisierte End-to-End Tests für Custom EspoCRM Entities.

Überblick

Das Test-Framework führt automatisiert folgende Tests durch:

CRUD-Operationen

  • Create: Erstellen von Testdatensätzen für alle Custom Entities
  • Read: Validierung der erstellten Datensätze
  • Update: Änderung von Feldern
  • Delete: Löschen der Test-Daten

🔗 Relationship-Tests

  • Link: Verknüpfung von Entities über Relationships
  • Unlink: Entfernung von Verknüpfungen
  • Verification: Prüfung der korrekten Verknüpfung

Getestete Entities

  1. CMietobjekt - Mietobjekte (Wohnungen, Häuser, etc.)
  2. CVmhMietverhältnis - Mietverhältnisse
  3. CKündigung - Kündigungen
  4. CBeteiligte - Beteiligte Personen (Mieter, Vermieter)
  5. CMietinkasso - Mietinkasso-Verfahren
  6. CVmhRäumungsklage - Räumungsklagen

Getestete Relationships

  • CVmhMietverhältnis ↔ CMietobjekt
  • CKündigung ↔ CVmhMietverhältnis
  • CBeteiligte ↔ CVmhMietverhältnis (als Mieter/Vermieter)

Installation

Voraussetzungen

  • Python 3.6+
  • requests Bibliothek
pip3 install requests

Verwendung

Schnellstart

./run_e2e_tests.sh

Direkte Python-Ausführung

python3 e2e_tests.py

Konfiguration

Die Konfiguration erfolgt in e2e_tests.py:

CONFIG = {
    'base_url': 'https://crm.bitbylaw.com',
    'api_key': '2b0747ca34d15032aa233ae043cc61bc',
    'username': 'dev-test'
}

Ausgabe

Das Framework generiert eine detaillierte Testübersicht:

================================================================================
                              TEST SUMMARY                                    
================================================================================

✅ CMietobjekt: 4/4 tests passed
   ✓ create                                  0.234s
   ✓ read                                    0.123s
   ✓ update                                  0.156s
   ✓ delete                                  0.089s

✅ CVmhMietverhltnis: 4/4 tests passed
   ✓ create                                  0.267s
   ✓ read                                    0.134s
   ✓ update                                  0.178s
   ✓ delete                                  0.092s

================================================================================
Total: 24/24 tests passed (0 failed)
Time: 3.45s
================================================================================

Architektur

Komponenten

1. espocrm_api_client.py

API-Client für EspoCRM REST API mit folgenden Features:

  • CRUD-Operationen (Create, Read, Update, Delete)
  • Relationship-Management (Link, Unlink)
  • Fehlerbehandlung und Logging

2. e2e_tests.py

Haupttest-Framework mit:

  • EntityTestBase: Basis-Klasse für Entity-Tests
  • Spezifische Test-Klassen für jede Entity
  • TestTracker: Ergebnis-Tracking und Reporting
  • Automatisches Cleanup

3. run_e2e_tests.sh

Shell-Wrapper mit:

  • Dependency-Checks
  • Farbiger Ausgabe
  • Exit-Code-Handling

Erweiterung

Neue Entity hinzufügen

  1. Neue Test-Klasse erstellen:
class CMyEntityTest(EntityTestBase):
    def __init__(self, client: EspoCRMAPIClient, tracker: TestTracker):
        super().__init__(client, tracker)
        self.entity_type = 'CMyEntity'
    
    def run_full_test(self) -> Optional[str]:
        # Create
        data = {
            'name': f'Test Entity {datetime.now().strftime("%Y%m%d_%H%M%S")}',
            # ... weitere Felder
        }
        
        record_id = self.test_create(data)
        if not record_id:
            return None
        
        # Read
        self.test_read(record_id)
        
        # Update
        self.test_update(record_id, {'field': 'new_value'})
        
        return record_id
  1. Test in run_all_tests() einbinden:
print("\n🔷 Testing CMyEntity...")
myentity_test = CMyEntityTest(client, tracker)
myentity_id = myentity_test.run_full_test()
  1. Cleanup-Order anpassen falls Dependencies bestehen

Neue Relationships testen

# Link testen
entity_test.test_link(
    record_id='123',
    link_name='relationshipName',
    foreign_id='456'
)

# Unlink testen
entity_test.test_unlink(
    record_id='123',
    link_name='relationshipName',
    foreign_id='456'
)

Fehlerbehebung

Connection Fehler

❌ Connection failed: HTTPError 401

→ API-Key oder Username prüfen

Entity nicht gefunden

❌ API Error: POST https://crm.bitbylaw.com/api/v1/CMyEntity
   Status: 404

→ Entity-Name prüfen (z.B. CKndigung statt CKuendigung)

Relationship nicht gefunden

AssertionError: Link not found: xyz123

→ Relationship-Name und Richtung prüfen

Best Practices

  1. Immer cleanup durchführen: Tests hinterlassen keine Datenreste
  2. Eindeutige Namen: Timestamps in Test-Daten-Namen
  3. Dependencies beachten: Lösch-Reihenfolge ist wichtig
  4. Fehlerbehandlung: Jeder Test ist isoliert

Weitere Informationen

Support

Bei Fragen oder Problemen:

  1. Logs prüfen: Test-Ausgabe enthält detaillierte Fehlermeldungen
  2. API-Dokumentation konsultieren
  3. Entity-Definitionen in custom/Espo/Custom/Resources/metadata/entityDefs/ prüfen