Android App-Testing-Tutorial mit Automatisierungs-Framework

⚡ Intelligente Zusammenfassung

Android App-Tests überprüfen einen Build in einer fragmentierten Gerätelandschaft und kombinieren Unit-, Integrations-, Betriebs- und Systemprüfungen mit Automatisierungsframeworks, die entweder auf einem Gerät oder direkt auf der JVM ausgeführt werden.

  • 🔘 Warum es darauf ankommt: Android Läuft auf unzähligen Geräte- und Versionskombinationen, daher sind Kompatibilitätsprobleme nahezu unvermeidlich.
  • ☑️ Vier Teststufen: Einzel-, Integrations-, Betriebs- und Systemtests decken jeweils eine andere Art von Fehlern auf.
  • ✅ Geräteinternes Framework: Das Android Das Testframework baut auf JUnit und Instrumentierung.
  • 🧪 JVM-Alternative: Roboterelektrische Schatten Android Klassen, damit Testsuiten auf der JVM ohne Gerät oder Emulator ausgeführt werden können.
  • ️ Erweiterter Werkzeugkasten: EspressoUI Automator und Appium den Schutzbereich über die integrierten Klassen hinaus erweitern.
  • 📊 Mythen, die man vermeiden sollte: Emulatoren allein, wenige Handgeräte oder explorative Tests in letzter Minute führen zu Fehlern in der Produktion.

Android Tutorial zum App-Testing: Testebenen, Automatisierungs-Frameworks und Geräteabdeckung

Warum Android Testen?

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

Egal wie viel Zeit man in Design und Implementierung investiert, Fehler sind unvermeidlich und Bugs werden auftreten.

Android Teststrategie

Ein Richtig Android Die Teststrategie sollte Folgendes umfassen:

  1. Gerätetest
  2. Integrationstest
  3. Operationaler Test
  4. Systemtest

Unit-Tests

Unit-Tests sind Programmsätze, die dazu dienen, eine atomare Einheit des Quellcodes zu überprüfen, beispielsweise eine Methode oder eine Klasse.

Das Android Die Plattform ist bereits mit der JUnit Framework 3.0. Es handelt sich um ein Open-Source-Framework zur Automatisierung von Prozessen. Unit Testsund es ermöglicht Entwicklern, effektive Unit-Test-Programme zu schreiben.

Eine Ergänzung zu Unit-Tests sind Benutzeroberflächentests (UI-Tests). Diese decken die UI-Komponenten Ihrer Zielanwendung ab und stellen sicher, dass sie bei einer Abfolge von Benutzeraktionen auf dem Gerät die korrekte Ausgabe liefert.

Häufige Benutzeraktionen auf einer Benutzeroberfläche Android Anwendungen wie Tippen, Eingeben und Wischen

Die gängigste Methode zum Durchführen von UI-Tests auf einem Gerät ist Android Anzeigen / Instrumente. Dies hat jedoch Leistungsprobleme. Eines der besten Tools zum Durchführen von UI-Tests Android is Robotium.

⚠️ Versionshinweis: JUnit 3 Klassen wie InstrumentationTestCase wurden mit API 24 als veraltet markiert; aktuelle Projekte verwenden AndroidX-Test, Espresso und UI Automator. Robotium ist seit 2016 nicht mehr erschienen.

Integrationstests

In IntegrationstestsAlle getesteten Module werden kombiniert und verifiziert. Android Dies bedeutet häufig die Überprüfung der Integration mit Komponenten wie Service-, Aktivitäts- und Inhaltsanbietertests.

Arten von Integrationstests auf Android Abdeckung von Tests für Dienstleistungen, Aktivitäten und Inhaltsanbieter

Viele Testframeworks werden verwendet, um Integrationstests durchzuführen für Androidwie zum Beispiel Troyd, Robolectric und Robotium.

Operafunktionale Tests

OperaKonstruktive Tests, auch Funktionstests oder Akzeptanztests genannt, sind Tests auf höherer Ebene, die die Vollständigkeit und Korrektheit der Anwendung überprüfen.

In Android, Fitnesse ist ein Open-Source-Framework, das die Durchführung von operationellen Tests gegen die Zielanwendung vereinfacht.

Systemtests

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

In Android, Systemtests umfassen normalerweise

  • 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 Tracbegutachten um Leistungstests durchzuführen AndroidDieses Tool kann Ihnen beim Debuggen Ihrer Anwendung und beim Erstellen von Leistungsprofilen helfen. Traceview ist veraltet und wird durch the ersetzt. CPU-Profiler.

Automated Android Tests

As Android ist fragmentiert, Tests auf vielen Geräten sind notwendig, und das kostet Geld. Automatisiert Android Durch Tests lassen sich diese Kosten reduzieren.

Vorteile der Automatisierung Android testing

  • 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 die folgenden 2 Frameworks untersuchen

  • Android Testframework
  • Robolectric Testing-Framework

Android Testrahmen

Eines der Standard-Testframeworks für Android Anwendungen ist die Android Testframework. Es ist gut integriert mit dem Android Das SDK-Tools und seine Architektur bestehen aus drei Teilen.

  1. Das Anwendungspaket ist Ihre Zielanwendung, die getestet werden muss.
  2. InstrumentationTestRunner ist der Testfall Ein Test-Runner führt Testfälle für die Zielanwendung aus. Er umfasst:
    • Testwerkzeuge: SDK-Tools zum Erstellen von Tests. Sie sind in die IDE integriert oder werden über die Befehlszeile ausgeführt.
    • MonkeyRunner: Ein Tool, das APIs zum Schreiben von Programmen bereitstellt, die ein System steuern Android Gerät oder Emulator außerhalb Android Code.
  3. Das Testpaket ist in Testprojekte unterteilt und folgt einer Namenskonvention. Hat die zu testende Anwendung beispielsweise den Paketnamen „com.mydomain.myapp“, so sollte das Testpaket „com.mydomain.myapp.test“ heißen. Das Testpaket enthält zwei Objekte:
    • Testfallklassen: Testmethoden einbeziehen, die auf der Zielanwendung ausgeführt werden sollen.
    • Mock-Objekte: Fügen Sie Beispieldaten hinzu, die als Eingabebeispiele für Testfälle verwendet werden.

Android Testfallklassen

AndroidTestCase-Klassendiagramm, das die JUnit und Instrumentierungstestfallhierarchie

  1. Testfall beinhaltet JUnit auszuführende Methoden JUnit Test
  2. TestSuite wird verwendet, um eine Reihe von Testfällen auszuführen.
  3. InstrumentationTestSuite ist eine TestSuite, die Instrumentation in InstrumentationTestCase einfügt, bevor diese ausgeführt werden.
  4. InstrumentationTestRunner führt Testfälle auf der Zielanwendung aus.
  5. AndroidTestCase erweitert JUnit Testfall mit Methoden zum Zugriff auf Ressourcen wie den Aktivitätskontext.
  6. ApplicationTestCase überprüft die Anwendungsklassen in einer kontrollierten Umgebung.
  7. InstrumentationTestCase überprüft ein bestimmtes Feature oder Verhalten, beispielsweise die UI-Ausgabe der Anwendung.
  8. ActivityTestCase ist eine Basisklasse, die das Testen der Anwendungsaktivitäten unterstützt.
  9. ProviderTestCase ist eine Klasse zum Testen eines einzelnen ContentProviders.
  10. ServiceTestCase testet Serviceklassen in einer Testumgebung und unterstützt den Servicelebenszyklus.
  11. Der SingleLaunchActivityTestCase dient dazu, eine einzelne Activity mit einem InstrumentationTestCase zu testen.
  12. ActivityUnitTestCase wird verwendet, um eine einzelne isolierte Aktivität zu testen.
  13. ActivityInstrumentationTestCase2 erweitert die JUnit Die TestCase-Klasse stellt eine Verbindung zur Zielanwendung mit Instrumentierung her, sodass Sie auf GUI-Komponenten zugreifen und UI-Ereignisse wie Tastatureingaben oder Berührungen senden können.

Nachfolgend finden Sie ein Beispiel für einen ActivityInstrumentationTestCase. Er überprüft die Funktionsweise der Benutzeroberfläche einer Taschenrechner-Anwendung und die Korrektheit der UI-Ausgaben.

Beispiel ActivityInstrumentationTestCase2 zur Überprüfung der Ausgabe der Taschenrechner-Benutzeroberfläche Android

Roboelektrisches Test-Framework

Testen mit dem Android Das Testen von Frameworks mit einem Gerät oder Emulator ist schwierig. Das Erstellen und Ausführen von Tests ist langsam und erfordert einen hohen Entwicklungsaufwand. Um dieses Problem zu lösen, gibt es eine Alternative: das Robolectric-Testframework.

Robolectric ermöglicht es Ihnen, … Android Tests werden direkt auf der JVM durchgeführt, ohne dass ein Gerät oder ein Emulator benötigt wird.

Robolectric-Testfallklassen

Robolectric kann folgende Aktionen ausführen:

  • Registrieren Sie sich und erstellen Sie eine Shadow-Klasse
  • Fangen Sie das Laden von ab Android Klasse
  • Verwendung Javassist, um die Methodenrümpfe von zu überschreiben Android Klasse
  • Binden Sie das Shadow-Objekt an Android Klasse

Dies ermöglicht es dem zu testenden Code, ohne einen Fehler ausgeführt zu werden. Android Umwelt.

Andere Testframeworks

Neben den oben genannten Testframeworks gibt es noch viele weitere, wie zum Beispiel:

Mythen von Android Tests

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

Mythos Nr. 1: Alle Android Die Geräte sind identisch, daher reicht es aus, auf Emulatoren zu testen.

Eine Anwendung kann auf Emulatoren einwandfrei funktionieren, aber auf manchen realen Geräten während der Ausführung abstürzen.

Android Während der Ausführung auf einem realen Gerät wird ein Anwendungsabsturzdialog angezeigt.

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

Mythos Nr. 2: Tests auf einigen gängigen Geräten reichen aus

Ihre Anwendung sieht auf verschiedenen Geräten unterschiedlich aus, da Hardware, Bildschirmgrößen und Speicher variieren. Testen Sie Ihre Anwendung daher auf verschiedenen Geräten, Betriebssystemversionen, Mobilfunknetzen und an unterschiedlichen Standorten.

Mythos Nr. 3: Exploratives Testen kurz vor dem Start reicht aus

  • Bei den meisten Tests entwerfen wir Testfälle und führen sie anschließend aus; beim explorativen Testen erfolgen Entwurf und Ausführung gleichzeitig.
  • Es gibt weder Plan noch Vorbereitung, daher führt der Tester beliebige Tests durch. Manche Funktionen werden wiederholt getestet, andere hingegen nie.

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

  • Wenn die Anwendung nicht funktioniert und Fehler aufweist, deinstallieren die Nutzer Ihre App.
  • Qualitätsprobleme sind der Hauptgrund für schlechte Bewertungen in Google Spielen Sie so, schädigen Sie Ihren Ruf und verlieren Sie das Vertrauen Ihrer Kunden.

Daher ist es unerlässlich, über ein ordnungsgemäßes Android Teststrategie vorhanden.

Best Practices in Android Tests

  • Anwendungsentwickler sollten die Testfälle gleichzeitig mit dem Schreiben des Codes erstellen
  • Alle Testfälle sollten zusammen mit dem Quellcode in der Versionskontrolle gespeichert werden.
  • Nutzen Sie kontinuierliche Integration und führen Sie jedes Mal Tests durch, wenn sich der Code ändert
  • Verlassen Sie sich nicht ausschließlich auf Emulatoren und gerootete Geräte; überprüfen Sie die Ergebnisse auf realer Hardware mit einem Inspektionsprogramm wie z. B. uiautomatorviewer

Häufig gestellte Fragen

Nein. Moderne Projekte verwenden AndroidX-Test mit JUnit 4 und AndroidJUnitLäufer. Der JUnit Die drei hier beschriebenen Testfallklassen wurden mit API 24 als veraltet markiert und sind nur noch für ältere Testsuiten verfügbar.

Maschinelles Lernen repariert Locatoren nach einer Layoutänderung, gruppiert doppelte Crash- und ANR-Berichte und sagt voraus, welche Tests durch eine Änderung fehlschlagen werden, sodass pro Commit eine kürzere Testsuite ausgeführt wird.

Copilot generiert die üblichen onView- und Check-Muster anhand eines beschriebenen Szenarios. Da Copilot Ihre View-IDs und das Timing nicht kennt, führen Sie jeden Vorschlag einmal aus und passen Sie die Matcher anschließend an.

Espresso UI Automator testet innerhalb Ihrer eigenen Anwendung und ist schnell und stabil. Da UI Automator anwendungsübergreifend arbeitet, eignet er sich für Benachrichtigungen, Einstellungen und Systemdialoge. Viele Testsuiten nutzen beides.

Die ActivityScenario-API in AndroidX-Test, üblicherweise mit einer ActivityScenarioRule. Er führt eine Aktivität durch definierte Lebenszykluszustände, ohne eine veraltete Testfallklasse zu erweitern.

Beginnen Sie mit einem Einsteigermodell, einem Mittelklassemodell und einem aktuellen Flaggschiffmodell aus zwei oder drei Preisklassen. Android Versionen plus ein Tablet. Fügen Sie Geräte-Cloud-Läufe vor der Veröffentlichung hinzu, anstatt weitere Hardware zu kaufen.

Sie laufen auf der JVM des Build-Rechners mit Schattenklassen anstelle eines realen Geräts, daher entfällt das Packen, Installieren oder Starten eines Emulators. Das macht sie bei jedem Commit praktisch einsetzbar.

GoogleDas aktuelle Testbibliotheksset. Es enthält JUnit und Wahrheitserweiterungen, Aktivitätsszenario, Espresso und UI Automator hinter einer Abhängigkeitsgruppe, die auf Geräten, Emulatoren und Robolectric funktioniert.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: