Tutorial zum Testen von Android-Apps mit dem Automation Framework

Warum Android-Tests?

Android ist das größte Betriebssystem der Welt. Gleichzeitig ist Android fragmentiert. Es gibt unzählige Geräte und Android-Versionen, mit denen Ihre App kompatibel sein muss.

Android-Tests

Es spielt keine Rolle, wie viel Zeit Sie in Design und Implementierung investieren, Fehler sind unvermeidlich und Bugs werden auftreten.

Android-Tests

Android-Teststrategie

Eine korrekte Android-Teststrategie sollte Folgendes umfassenwing

  1. Gerätetest
  2. Integrationstest
  3. Betriebstest
  4. Systemtest

Android-Teststrategie

Unit-Tests

Unit-Tests umfassen Sätze von einem oder mehreren Programmen, die darauf ausgelegt sind, eine zu überprüfen atomIC-Einheit des Quellcodes, beispielsweise eine Methode oder eine Klasse.

Die Android-Plattform ist vorinstalliert Juni 3.0-Framework. Es handelt sich um ein Open-Source-Framework zur Automatisierung Unit Tests. Das Android Testing Framework ist ein leistungsstarkes Tool für Entwickler zum Schreiben eines effektiven Unit-Testprogramms.

Integration von Android und JUnit Framework
Die Integration von Android und JUnit-Framework

Eine Ergänzung zum Unit-Test sind User Interface (UI)-Tests. Diese Tests beziehen sich auf UI-Komponenten Ihrer Zielanwendung. UI-Tests stellen sicher, dass Ihre Anwendung als Reaktion auf die Reihenfolge der Benutzeraktionen auf dem Gerät die richtige UI-Ausgabe zurückgibt.

Häufige Aktionen der Benutzeroberfläche in der Anwendung
Häufige Aktionen der Benutzeroberfläche in der Anwendung

Die gängige Methode zur Durchführung von UI-Tests auf Geräten ist Android Anzeigen / Instrumente. Dies hat jedoch Leistungsprobleme. Eines der besten Tools zum Durchführen von UI-Tests auf Android ist Ein Roboter.

Integrationstests

In Integrationstests, alle Unit-getesteten Module, werden kombiniert und verifiziert. In Android umfassen Integrationstests häufig die Überprüfung der Integration mit Android-Komponenten wie Diensttests, Aktivitätstests, Inhaltsanbietertests usw

Integrationstests
Arten von Integrationstests auf Android

Es gibt viele Test-Frameworks, die zur Durchführung von Integrationstests für Android verwendet werden, beispielsweise Troyd, Robolectric und Robotium.

Betriebstests

  • Operative Tests werden auch als Funktionstests oder Akzeptanztests bezeichnet. Dabei handelt es sich um hochrangige Tests zur Überprüfung der Vollständigkeit und Richtigkeit der Anwendung.
  • Bei Android- Fitnesse ist ein Open-Source-Framework, das die Durchführung von Betriebstests für Zielanwendungen vereinfacht.

Systemtests

In Systemtest Dabei wird das System als Ganzes getestet und das Zusammenspiel der Komponenten, Software und Hardware überprüft.

In Android umfasst Systemtest normalerweise Folgendes

  • GUI-Tests
  • Usability-Tests
  • Leistungstests
  • Stresstests

In der obigen Liste, Performance Testing wird stärker in den Fokus gerückt. Sie können Tools wie verwenden Traceview um einen Leistungstest auf Android durchzuführen. Dieses Tool kann Ihnen beim Debuggen Ihrer Anwendung und beim Profilieren ihrer Leistung helfen.

Automatisierte ANDROID-TESTS

Da Android fragmentiert ist, sind Tests auf einer Vielzahl von Geräten erforderlich. Aber auch das wird Sie Geld kosten. Automatisierte Android-Tests können helfen, Kosten zu senken

Vorteile automatisierter Android-Tests

  • Reduzieren Sie die Zeit für die Ausführung von Testfällen
  • Steigern Sie die Produktivität Ihres Entwicklungsprozesses
  • Frühzeitige Fehlererkennung, Kosteneinsparung bei der Softwarewartung
  • Fehler bei der Implementierung schnell gefunden und behoben
  • Stellen Sie die Qualität der Software sicher

Wir werden Folgendes studierenwing 2 Rahmen

  • Android-Test-Framework
  • Robolectric Testing-Framework

Android-Testframework

Eines der Standard-Testframeworks für Android-Anwendungen ist Android-Testframework. Es handelt sich um ein leistungsstarkes und benutzerfreundliches Testframework, das gut in die Android SDK-Tools integriert ist.

Android-Test-Framework
Android-Testframework Architektur
  1. Anwendungspaket ist Ihre Zielanwendung, die getestet werden muss
  2. InstrumentationTestRunner lernen muss die Testfall Läufer, der einen Testfall für die Zielanwendung ausführt. Es enthält:

2a) Testwerkzeuge: Ein SDK-Tool zum Erstellen von Tests. Sie sind integriert Eclipse IDE oder als Befehlszeile ausführen.

2b) MonkeyRunner: Ein Tool, das APIs zum Schreiben von Programmen bereitstellt, die ein Android-Gerät oder einen Emulator außerhalb von Android-Code steuern.

  1. Testpaket sind in Testprojekten organisiert. Dieses Paket folgt der Namenskonvention. Wenn die zu testende Anwendung den Paketnamen „com.mydomain.myapp“ hat, sollte das Testpaket „com.mydomain.myapp.test“ lauten. Das Testpaket enthält die folgenden zwei Objekte:

3a) Testfallklassen: umfassen Testmethoden, die in der Zielanwendung ausgeführt werden sollen.

3b) Scheinobjekte: Enthält Scheindaten, die als Beispieleingabe für Testfälle verwendet werden.

Android-Testfallklassen

Android-Testfallklassen
AndroidTestCase-Klassendiagramm
  1. Testfall Enthält JUnit-Methoden zum Ausführen des JUnit-Tests
  2. TestSuite wird verwendet, um eine Reihe von Testfällen auszuführen
  3. InstrumentationTestSuite ist eine TestSuite, die Instrumentierung in InstrumentationTestCase einfügt, bevor sie ausgeführt wird.
  4. InstrumentationTestRunner ist der Testfall-Läufer, der Testfälle für die Zielanwendung ausführt.
  5. AndroidTestfall erweitert JUnit TestCase. Es enthält Methoden für den Zugriff auf Ressourcen wie den Aktivitätskontext.
  6. Anwendungstestfall überprüft die Anwendungsklassen in einer kontrollierten Umgebung.
  7. InstrumentationTestCase überprüft eine bestimmte Funktion oder ein bestimmtes Verhalten der Zielanwendung, z. B. überprüft die UI-Ausgabe der Anwendung.
  8. Aktivitätstestfall ist eine Basisklasse, die das Testen der Anwendungsaktivitäten unterstützt.
  9. ProviderTestCase ist eine Klasse zum Testen eines einzelnen ContentProviders.
  10. ServiceTestCase wird zum Testen von Serviceklassen in einer Testumgebung verwendet. Es unterstützt auch den Lebenszyklus des Dienstes.
  11. SingeLauchActivityTestCase wird verwendet, um eine einzelne Aktivität mit einem InstrumentationTestCase zu testen.
  12. ActivityUnitTestCase wird zum Testen einer einzelnen isolierten Aktivität verwendet.
  13. ActivityInstrumentationTestCase2 erweitert die JUnit-TestCase-Klasse. Es verbindet Sie mit der Zielanwendung mit Instrumentierung. Mit dieser Klasse können Sie auf die GUI-Komponente der Anwendung zugreifen und UI-Ereignisse (Tastendruck- oder Touch-Ereignisse) an die Benutzeroberfläche senden.

Unten finden Sie ein Beispiel für ActivityInstrumentationTestCase. Es überprüft den UI-Betrieb von Calculator appÜberprüfen Sie die Korrektheit der UI-Ausgaben.

ActivityInstrumentationTestCase2 Testen
ActivityInstrumentationTestCase2-Testbeispiel

Roboelektrisches Test-Framework

Das Testen mit dem Android Testing Framework mit Gerät oder Emulator ist schwierig. Das Erstellen und Ausführen von Tests ist langsam und erfordert viel Entwicklungsaufwand. Um dieses Problem zu beheben, gibt es eine andere Möglichkeit – Roboelektrik Testrahmen.

Mit dem Robolectric-Framework können Sie Android-Tests ausführen Direkt auf JVM ohne die Notwendigkeit eines Geräts oder eines Emulators.

Erweiterte Funktionen von Robolectric
Erweiterte Funktionen von Robolectric

Robolectric-Testfallklassen

Betrieb von Robolectric
Betrieb von Robolectric
  • Wie oben gezeigt, kann Robolectric Folgendes ausführen:wing Aktionen:
  • Registrieren Sie sich und erstellen Sie eine Shadow-Klasse
  • Fangen Sie das Laden der Android-Klasse ab
  • Verwendet Javaassist, um die Methodenkörper der Android-Klasse zu überschreiben
  • Binden Sie das Shadow-Objekt an die Android-Klasse
  • Dadurch kann der zu testende Code ohne Android-Umgebung ausgeführt werden.

Andere Test-Framework

Neben den oben genannten Test-Frameworks gibt es viele andere Test-Frameworks wie:

Mythen über Android-Tests

Viele Unternehmen entwickeln Android Testen Strategien, die auf weit verbreiteten Missverständnissen basieren. In diesem Abschnitt werden einige beliebte Mythen und Realitäten zum Android-Testen untersucht.

Mythos Nr. 1: Alle Android-Geräte sind gleich … Tests mit Emulatoren reichen aus

Beginnen wir mit einem einfachen Beispiel. Eine Anwendung funktioniert auf Emulatoren einwandfrei, auf einigen echten Geräten stürzt sie jedoch während der Ausführung ab

Anwendung stürzt während der Ausführung auf einem echten Gerät ab
Die Anwendung stürzt während der Ausführung auf einem echten Gerät ab

Emulatoren sind nicht ausreichend für Ihre mobilen Tests. Sie müssen Ihre App auf echten Geräten testen.

Mythos Nr. 2: Es reicht aus, auf einigen gängigen Geräten zu testen

  • Auf unterschiedlichen Geräten sieht Ihre Anwendung unterschiedlich aus, da unterschiedliche Geräte über unterschiedliche Hardware, Bildschirmgrößen, Speicher usw. verfügen. Sie müssen Ihre Anwendung auf unterschiedlichen Geräten, Betriebssystemversionen, Trägernetzwerken und Standorten testen.

Mythos Nr. 3: Explorative Tests kurz vor dem Start reichen aus

  • Im Allgemeinen entwerfen wir bei allen Tests die Testfälle und führen sie dann aus. Beim explorativen Testen werden Testdesign und Testausführung jedoch gemeinsam durchgeführt.
  • Beim explorativen Testen gibt es keinen Plan und keine Vorbereitung, dann führt der Tester die Tests durch, die er durchführen möchte. Einige Funktionen werden wiederholt getestet, während andere nicht vollständig getestet werden.

Mythos Nr. 4: Wenn es in der Anwendung Fehler gibt, werden die Benutzer es verstehen

  • Wenn die Anwendung nicht funktioniert und Fehler aufweist, deinstallieren Benutzer Ihre App
  • Qualitätsprobleme sind der erste Grund für schlechte Bewertungen bei Google Play. Dies beeinträchtigt Ihren Ruf und Sie verlieren das Vertrauen Ihrer Kunden.

Daher ist es wichtig, über eine geeignete Android-Teststrategie zu verfügen

Best Practices für Android-Tests

  • Anwendungsentwickler sollten die Testfälle gleichzeitig mit dem Schreiben des Codes erstellen
  • Alle Testfälle sollten zusammen mit dem Quellcode versioniert gespeichert werden
  • Nutzen Sie kontinuierliche Integration und führen Sie jedes Mal Tests durch, wenn sich der Code ändert
  • Vermeiden Sie die Verwendung von Emulatoren und gerooteten Geräten