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:

  • Android Junit-Bericht, ein benutzerdefinierter Instrumentierungstestlรคufer fรผr Android das XML-Berichte fรผr die Integration mit anderen Tools generiert.
  • Espresso
  • Appium

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: