Experience Embedded

Professionelle Schulungen, Beratung und Projektunterstützung

Realistischere Applikationstests mit Linux-Containern

Autor: Michael Burkard, bbv Software Services AG

Beitrag - Embedded Software Engineering Kongress 2015

 

Wenn Sie Ihre Applikationstest auf dem Entwicklungsrechner ausführen, können Sie den Einfluss bestimmter Effekte auf Ihre Testresultate schlecht abschätzen. Nach einem Softwareupdate können Bibliotheken fehlen oder ersetzt worden sein, wodurch die Testresultate nicht mehr reproduzierbar sind. Und inwieweit stimmen die Ressourcen ihres Entwicklungsrechners mit denen des Zielsystems überein? Bei Embedded-Systemen sind die Unterschiede oft so groß, dass es nötig ist, die Tests auf dem Zielsystem laufen zu lassen. Mithilfe von Linux-Containern lässt sich eine Testumgebung erzeugen, welche isoliert vom Hostsystem läuft, den Rahmenbedingungen des Zielsystems entspricht und dennoch performant ist.

Gute Gründe, die Tests nicht auf dem Entwicklungsrechner auszuführen

Sie können Ihre Entwicklungsumgebung auf dem aktuellsten Stand halten und beeinflussen dabei nicht Ihre Testresultate. Sie können eine Testumgebung auswählen, welche die gleichen Ressourcen wie das Zielsystem hat, z.B. CPU-Architektur, Anzahl der CPU-Kerne oder der zur Verfügung stehende Arbeitsspeicher. Spezielle Software, Benutzer, Gruppen oder Berechtigungen, welche Sie nur zur Ausführung der Tests benötigen, sind explizit in der Testumgebung vorhanden und nicht auf Ihrem Entwicklungsrechner, wo diese störend sind und zu unerwünschten Nebeneffekten führen.

Anforderungen an eine Testumgebung

Einerseits soll eine Testumgebung immer die gleichen Rahmenbedingungen besitzen, damit die Resultate reproduzierbar sind. Zudem soll die Testumgebung das Zielsystem widerspiegeln; das bedeutet, sie soll so nahe an den Bedingungen des Zielsystems sein wie möglich. Daraus ergibt sich, dass die Applikationstests idealerweise in einer isolierten Umgebung laufen gelassen werden. Genau für solche Aufgaben sind Linux-Container geeignet.

Wieso Linux-Container die idealen Kandidaten sind

Sie denken jetzt vielleicht, wieso kommen nicht virtuelle Machinen zum Einsatz? Virtuelle Maschinen bieten eine isolierte Umgebung, und die Ressourcen lassen sich an Ihre Bedürfnisse anpassen. In den folgenden Punkten sind Linux-Container klar im Vorteil:

Bootvorgang – Linux-Container sind im Bruchteil einer Sekunde aufgestartet und wieder heruntergefahren. Dadurch lassen sich Linux-Container zur Ausführung der Tests nahtlos in Ihren Buildprozess einbauen.

Performance – Normalerweise ist keine Hardwaresimulation notwendig; aus diesem Grund werden Programme mit der nativen Geschwindigkeit des Hostsystems ausgeführt.

Einfaches Setup – Zusätzlich benötigte Tools können einfach über ein Shell-Skript installiert werden. Das Hinzufügen von Benutzer und Gruppen ist auf die gleiche Weise realisierbar.

Einfacher Austausch von Daten – Sei es die Testapplikation selbst oder die generierten Testresultate: Die Daten zwischen Container und Host lassen sich einfach austauschen.

Schritt-für-Schritt-Anleitung zur Erstellung eines Containers

Für dieses Beispiel gelten folgende Rahmenbedingungen: 32bit Ubuntu, 512MB RAM, Single Core und keine SWAP-Partition.

Wählen Sie die passende Linux-Distribution mit Release und CPU-Architektur aus, welche am besten zu Ihrem Zielsystem passt (siehe PDF für Code).

In der Container-Config-Datei lassen sich die Ressourcen limitieren. Mit folgenden Einträgen können Sie die Anzahl der CPU-Kerne und den Arbeitsspeicher beschränken (siehe PDF).

Zum Deaktivieren der SWAP-Partition müssen zuvor folgende Argumente dem Kernel übergeben werden (siehe PDF).

Anschließend können Sie in der Container-Config-Datei die SWAP-Partition deaktivieren, indem Sie den Speicherbereich für den Arbeitsspeicher und die SWAP-Partition auf den gleichen Wert wie der Arbeitsspeicher setzen (siehe PDF).

Um Daten innerhalb des Containers zur Verfügung zu stellen, lassen sich Verzeichnisse über die Container-Config-Datei mounten. Dadurch lässt sich das Testprogram im Container verfügbar machen, und die Testresultate stehen dem Host zur Verfügung (siehe PDF).

Die Ressourcen für den Container sind nun gesetzt. Was noch fehlt, sind eine Liste von Software, für den Test spezifische Benutzer/Gruppen und das Setzen von Berechtigungen. Alle diese Aufgaben können in einem Shell-Skript definiert werden, welches nach dem Erzeugen des Containers aufgerufen wird (siehe PDF).

Mit der gleichen Kommandoreihenfolge lässt sich später das Testskript ausführen. Der Vorgang zum Erstellen des Containers und der Ausführung der Tests lässt sich durch ein geeignetes Shell-Skript automatisieren (siehe PDF).

Zusammenfassung

Linux-Container decken die Anforderungen an eine Testumgebung optimal ab, ohne dass man dabei an Performance einbüßt. Wie Sie gesehen haben, sind die Konfiguration und die Ausführung der Testumgebung mit geringem Aufwand verbunden. Sei es auf dem Entwicklungsrechner oder in der Build-Umgebung: Nutzen Sie Linux-Container, um Ihre Applikation näher an den realen Bedingungen des Zielsystems zu testen.

Quellenverzeichnis

 

Beitrag als PDF downloaden

 


Open Source - unsere Trainings & Coachings

Wollen Sie sich auf den aktuellen Stand der Technik bringen?

Dann informieren Sie sich hier zu Schulungen/ Seminaren/ Trainings/ Workshops und individuellen Coachings von MircoConsult zum Thema Open Source / Embedded Software Engineering.

 

Training & Coaching zu den weiteren Themen unseren Portfolios finden Sie hier.


Open Source - Fachwissen

Wertvolles Fachwissen zum Thema Open Source / Embedded Software Engineering steht hier für Sie zum kostenfreien Download bereit.

Zu den Fachinformationen

 
Fachwissen zu weiteren Themen unseren Portfolios finden Sie hier.