© Excellent backgrounds/Shutterstock.com
Java Magazin
Automatisiertes Testen mit Lognachrichten

Ein nicht invasiver Eingriff


Zahlreiche Microservices auf diversen Servern von verschiedenen Entwicklerteams kommunizieren nicht mehr nur untereinander, sondern auch mit oft unzähligen kleinen Systemen aus dem Internet der Dinge. Meist werden die notwendigen Integrationstests aufgrund der inhärenten Komplexität bei der Umsetzung und Ausführung manuell durchgeführt. Jedes System lässt sich aber mithilfe der ohnehin vorhandenen Lognachrichten einfach für automatisierte Integrationstests fit machen.

Die Idee hinter automatisierten Tests mit Lognachrichten ist es, sich zunutze zu machen, dass jedes einzelne System Lognachrichten produziert. Oft liest der Entwickler beim Programmieren diese Nachrichten oder analysiert die Loghistorie, um einen Bug aufzuspüren. Lognachrichten nehmen bei diesem Ansatz eine weitere entscheidende Rolle ein: Alle Lognachrichten aller Systeme werden zentral gesammelt und stehen dem Testsystem zur Verfügung. Sie dienen dazu, nachzuvollziehen, in welchem Zustand sich die einzelnen Systeme befinden und ob bestimmte Aktionen ausgelöst wurden. Daraufhin kann der Test dann die externen Schnittstellen des Systems nutzen, um das System in einen anderen Zustand zu bringen und anschließend wieder auf die entsprechende Reaktion in den Logmeldungen zu hören. Löst eine Aktion nicht oder nicht innerhalb eines Zeitrahmens eine bestimmte Logmeldung aus, ist der Test fehlgeschlagen.

Lognachrichten bieten einen beliebig tiefen und detaillierten Einblick in ein System. Entscheidend ist dabei die Qualität der Logmeldungen. Die einzige Anpassung an einem System, um es für die Integrationstests verwenden zu können, ist das Weiterleiten der Lognachrichten an eine zentrale Instanz – bereits weit verbreitet ist z. B. der Elk Stack [1]. Meist muss für das Weiterleiten nur die Konfigurationsdatei des verwendeten Logging-Frameworks angepasst werden. Somit hält sich der Aufwand durchaus im Rahmen. Das Gesamtsystem kann für den Test als Blackbox betrachtet werden. Insbesondere müssen keine Datenbanken ausgelesen und interne Schnittstellen nach außen und somit über Sicherheitsbarrieren hinaus verfügbar gemacht werden. Natürlich sind auch Lognachrichten schützenswerte Informationen. Beachtet man jedoch die Vorgabe, dass keine sensiblen Daten im Klartext geloggt werden dürfen, kann ein Angreifer auf ein Produktivsystem, bei dem vergessen wurde, das Test-Set-up zu deaktivieren, lediglich die Lognachrichten mitlesen.

Abbildung 1 zeigt das Testsystem und die für den Test wichtigen Interaktionen ...

Java Magazin
Automatisiertes Testen mit Lognachrichten

Ein nicht invasiver Eingriff

Zahlreiche Microservices auf diversen Servern von verschiedenen Entwicklerteams kommunizieren nicht mehr nur untereinander, sondern auch mit oft unzähligen kleinen Systemen aus dem Internet der Dinge. Meist werden die notwendigen Integrationstests aufgrund der inhärenten Komplexität bei der Umsetzung und Ausführung manuell durchgeführt. Jedes System lässt sich aber mithilfe der ohnehin vorhandenen Lognachrichten einfach für automatisierte Integrationstests fit machen.

Matthias Putz


Zahlreiche Microservices auf diversen Servern von verschiedenen Entwicklerteams kommunizieren nicht mehr nur untereinander, sondern auch mit oft unzähligen kleinen Systemen aus dem Internet der Dinge. Meist werden die notwendigen Integrationstests aufgrund der inhärenten Komplexität bei der Umsetzung und Ausführung manuell durchgeführt. Jedes System lässt sich aber mithilfe der ohnehin vorhandenen Lognachrichten einfach für automatisierte Integrationstests fit machen.

Die Idee hinter automatisierten Tests mit Lognachrichten ist es, sich zunutze zu machen, dass jedes einzelne System Lognachrichten produziert. Oft liest der Entwickler beim Programmieren diese Nachrichten oder analysiert die Loghistorie, um einen Bug aufzuspüren. Lognachrichten nehmen bei diesem Ansatz eine weitere entscheidende Rolle ein: Alle Lognachrichten aller Systeme werden zentral gesammelt und stehen dem Testsystem zur Verfügung. Sie dienen dazu, nachzuvollziehen, in welchem Zustand sich die einzelnen Systeme befinden und ob bestimmte Aktionen ausgelöst wurden. Daraufhin kann der Test dann die externen Schnittstellen des Systems nutzen, um das System in einen anderen Zustand zu bringen und anschließend wieder auf die entsprechende Reaktion in den Logmeldungen zu hören. Löst eine Aktion nicht oder nicht innerhalb eines Zeitrahmens eine bestimmte Logmeldung aus, ist der Test fehlgeschlagen.

Lognachrichten bieten einen beliebig tiefen und detaillierten Einblick in ein System. Entscheidend ist dabei die Qualität der Logmeldungen. Die einzige Anpassung an einem System, um es für die Integrationstests verwenden zu können, ist das Weiterleiten der Lognachrichten an eine zentrale Instanz – bereits weit verbreitet ist z. B. der Elk Stack [1]. Meist muss für das Weiterleiten nur die Konfigurationsdatei des verwendeten Logging-Frameworks angepasst werden. Somit hält sich der Aufwand durchaus im Rahmen. Das Gesamtsystem kann für den Test als Blackbox betrachtet werden. Insbesondere müssen keine Datenbanken ausgelesen und interne Schnittstellen nach außen und somit über Sicherheitsbarrieren hinaus verfügbar gemacht werden. Natürlich sind auch Lognachrichten schützenswerte Informationen. Beachtet man jedoch die Vorgabe, dass keine sensiblen Daten im Klartext geloggt werden dürfen, kann ein Angreifer auf ein Produktivsystem, bei dem vergessen wurde, das Test-Set-up zu deaktivieren, lediglich die Lognachrichten mitlesen.

Abbildung 1 zeigt das Testsystem und die für den Test wichtigen Interaktionen ...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang