In den vergangenen Artikeln haben wir gezeigt, wie sich Android-Apps auf einem Jenkins-Buildserver bauen lassen.
Mit dem Emulieren von Android-Devices auf unserem Buildserver schaffen wir uns nun die Möglichkeit, automatisierte Unit-Tests über dieses Werkzeug zu steuern.
Auf unserem Server ist das Android-SDK bereits installiert. Da wir auch die Umgebungs-Variable $ANDROID_HOME
gesetzt haben, müssen wir in unserem Jenkins nur noch das Android-Emulator-Plugin installieren. Weitere Konfigurationen sind dann nur noch in den einzelnen Build-Projekten vorzunehmen.
Konfiguration
Für jeden Build können dort die gewünschte Android-OS-Version, Bildschirmauflösung, SD-Kartengröße und lokale Informationen konfiguriert werden. Darüber hinaus können weitere generische Properties als Key-Value-Paare hinzugefügt werden.
Bei jedem Build-Vorgang wird dann auf dem Server die gewünschte Emulations-Instanz hochgefahren. Gegen diese können dann Unit-Tests durchgeführt werden. Es können APKs auf dem virtuellen Device installiert und deinstalliert werden. Stress-Tests mit dem Werkzeug Monkey sind ebenfalls möglich.
Verteiltes Bauen
Jenkins bietet eine Reihe weiterer Plugins an, um Build-Vorgänge auf separate Slave-Rechner zu verteilen. Bei den relativ lange laufenden Android-Emulatoren bieten sich Slaves auf jeden Fall an. Das PXE-Plugin ist dafür die erste Wahl, das es insbesondere das Konfigurieren der Slaves zum Kinderspiel macht.
Etwas fürs Auge
Bei der hier vorgestellten Konfiguration läuft der Android-Emulator nur als Kommandozeilen-Variante ohne Anzeige des Android-Displays. Für das Kompilieren der App und die allermeisten Unit-Tests sollte das völlig ausreichen.
Nice-to-have: Falls gewünscht ist, dass das Android-Display während des automatischen Tests sichtbar ist, kann dies mithilfe eines weiteren Jenkins-Plugins, dem Xvnc-Plugin, realisiert werden. Dazu muss auf dem Build-Server ein VNC-Server installiert sein. Damit lassen sich dann via VNC-Client von einem lokalen Rechner aus die automatischen Tests auf dem Build-Server betrachten.
Fazit
Will man Android-Builds und -Tests professionell und in großem Umfang durchführen, ist Jenkins mit seinen unzähligen Plugins das Mittel der Wahl. Man muss ein wenig Aufwand in den Aufbau der Infrastruktur investieren, doch danach können Integrations-Builds und Unit-Tests sehr komfortabel und vor allem automatisiert abgewickelt werden.