In der Abbildung ist eine Hand sichtbar, welche ein Smartphone hält. Aus dem Smartphone kommen bunte Wellen heraus.
Testen von mobilen Anwendungen
Erstellung automatisierter Testfälle für Android-Anwendungen (13.07.2020)

Für das Testen von mobilen Anwendungen stehen verschiedene Methoden zur Verfügung.

Bei Funktionsstests wird unter anderem getestet, ob sich die Anwendung korrekt installieren und deinstallieren lässt, ob alle Funktionen gemäß deren Spezifikationen arbeiten und ob es zu unvorhergesehenen Abstürzen der Anwendung kommt. Will man beispielsweise die Funktionalität der Codebasis samt all ihrer Funktionen testen, so werden sogenannte Unit-Tests eingesetzt. Üblicherweise werden Unit-Test in einem Entwicklungsverfahren, genannt Test-Driven-Development, noch vor dem tatsächlichen Code geschrieben. Mit Unit-Tests werden einzelne Komponenten auf ihre korrekte funktionsweise überprüft.

Wenn man die Bedienbarkeit und Benutzerfreundlichkeit einer Anwendung testen möchte, so geschieht dies über Usability-Tests. Bei diesen Tests lässt sich feststellen, ob die Darstellung beziehungsweise Platzierung der Inhalte gut ist, dass die wichtigen Funktionen immer sichtbar sind und ob zum Beispiel Buttons groß genug und gut erreichbar sind. Diese Art des Testens wird zumeist durch Menschen durchgeführt bei welchen es sich bestenfalls sogar um Personen aus der Zielgruppe, für welche die Anwendung gedacht ist, handelt. Usability-Tests sind sehr zeitaufwändig, da sie meistens manuell durchgeführt werden müssen. Sie liefern aber sehr wertvolle Einsichten in die Benutzerfreundlichkeit einer Anwendung und generieren wertvolles Feedback für die Entwickler.

Dann gibt es noch die Performance-Tests, bei welchen die Ressourcennutzung bei der Ausführung der Anwendung im Mittelpunkt steht. Dabei wird beispielsweise beobachtet, wie sich eine Anwendung verhält, wenn kaum Speicherplatz vorhanden ist oder der Akku fast leer ist. Um die Art der Tests geht es auch in meiner Masterarbeit. Hierbei untersuche ich, wie hoch die CPU- und RAM-Auslastung bei bestimmten User Interface-Interaktionen ist. Dabei wird detailliert untersucht, wie stark ein Swipe, ein Klick (Touch) oder ein Scroll durch eine Liste die CPU und den Arbeitsspeicher belastet. Da ich hierfür fünf Anwendungen mit unterschiedlichen Entwicklungsansätzen (nativ für Android und iOS, ReactNative, Flutter und Ionic) vergleiche, ist es wichtig, die Performance Tests automatisiert ablaufen zu lassen. Dies dient der Schaffung einer gemeinsamen Plattform, auf welcher ein direkter Vergleich der Ergebnisse möglich wird.

Der Zugang zum Testen von Android und iOS Anwendungen unterscheidet sich sehr stark. Da Android ein offenes Betriebssystem ist und auch Software von Drittanbietern zulässt, ist es relativ einfach durch die Verwendung von externen Bibliotheken und Programmen zur Leistungsmessung, automatisierte Tests zu erstellen.

Testautomatisierung für Android

Für den Ablauf der Tests wurde die Python-Bibliothek AndroidViewClient verwendet. Mit ihr lassen sich Testskripte in Python erstellen, welche eine Interaktion mit der Anwendung simulieren. Die Verbindung zwischen dem Computer und dem Android-Gerät erfolgt über die Software-Schnittstelle Andoid Debug Bridge (ADB), welche bereits Teil des Andorid Software Development Kits ist. Auf diese Weise kann man Befehle direkt via USB-Kabel an das verbundene Gerät senden. Die Leistungsmessung selbst erfolgt über vmstat. Dies ist ein Linux-Tool zur Ausführung von kontinuierlichen Messungen verschiedener leistungsspezifischer Parameter. In meiner Arbeit werte ich die CPU-Nutzlast und den frei verfügbaren Arbeitsspeicher aus. Mit vmstat ist es möglich ein Aufzeichnungsintervall anzugeben. So kann das Aufzeichnungsintervall auf zum Beispiel 30 Sekunden eingestellt werden und als Ergebnis bekommt man eine Zeitreihe von 30 Messungen pro Testfall.

Ein Testfall ist folgendermaßen aufgebaut (am Beispiel der Interaktion Öffnen und Schließen des Navigation Drawers):

  • Installieren der Anwendung auf dem Android-Gerät
  • Starten der ausgewählten Anwendung
  • 10 Sekunden Wartezeit, damit die Anwendung vollständig geladen werden kann
  • Starten von vmstat mit einer Aufzeichnungszeit von 35 Sekunden
  • 5 Sekunden Wartezeit
  • Start des Interaktionsszenarios, dieses Szenario wird 5x hintereinander ausgeführt:
    • Swipe von links nach rechts zum Öffnen des Navigation Drawers
    • 3 Sekunden Wartezeit
    • Schließen des Navigation Drawers durch einen Klick außerhalb des Drawers
    • 2 Sekunden Wartezeit
  • Anwendung schließen
  • Messergebnisse aus vmstat am Android-Gerät persistieren
  • Messergebnisse vom Android-Gerät herunterladen

Der exakt gleiche Testfall kann auf den verschiedenen Anwendungen mit den vier unterschiedlichen Entwicklungsansätzen angewendet werden. Auf diese Weise wird sichergestellt, dass die Testfälle in der exakt gleichen Art und Weise durchgeführt werden und man Ergebnisse bekommt, welche miteinander vergleichbar sind.

Wie man sieht ist ein einheitliches Testen von mobilen Anwendungen auf Android-Geräten möglich. Mit einem Testscript können alle vier Anwendungen getestet werden. Ganz anders sieht es bei iOS aus. Wie das Testen von auf iOS funktioniert und welche Probleme dabei aufgetaucht sind, werde ich im nächsten Blogbeitrag beschreiben.

CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.
    Datenschutzinformation
    Der datenschutzrechtliche Verantwortliche (Internet Privatstiftung Austria - Internet Foundation Austria, Österreich) würde gerne mit folgenden Diensten Ihre personenbezogenen Daten verarbeiten. Zur Personalisierung können Technologien wie Cookies, LocalStorage usw. verwendet werden. Dies ist für die Nutzung der Website nicht notwendig, ermöglicht aber eine noch engere Interaktion mit Ihnen. Falls gewünscht, können Sie Ihre Einwilligung jederzeit via unserer Datenschutzerklärung anpassen oder widerrufen.