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.
Es spielt keine Rolle, wie viel Zeit Sie in Design und Implementierung investieren, Fehler sind unvermeidlich und es treten Fehler auf.
In diesem Tutorial lernen Sie:
- Warum Android-Tests?
- Android-Teststrategie
- Unit-Tests
- Integrationstests
- Betriebstests
- Systemtests
- Automatisierte ANDROID-PRÜFUNG
- Android-Test-Framework
- Robolectric Testing Framework
- Mythen des Android-Testens
- Best Practices beim Testen von Android
Android-Teststrategie
Eine korrekte Android-Teststrategie sollte Folgendes umfassen
- Gerätetest
- Integrationstest
- Betriebstest
- Systemtest
Unit-Tests
Komponententests umfassen Sätze von einem oder mehreren Programmen, mit denen eine atomare Einheit des Quellcodes überprüft werden kann, z. B. eine Methode oder eine Klasse.
Die Android-Plattform enthält ein vorintegriertes Junit 3.0-Framework. Es ist ein Open-Source-Framework zur Automatisierung von Unit-Tests. Android Testing Framework ist ein leistungsstarkes Tool für Entwickler, mit dem sie das effektive Unit-Test-Programm schreiben können.
Die Integration von Android und JUnit Framework
Eine Ergänzung zu Unit Testing sind UI-Tests (User Interface). Diese Tests beziehen sich auf UI-Komponenten Ihrer Zielanwendung. UI-Tests stellen sicher, dass Ihre Anwendung als Reaktion auf die Abfolge der Benutzeraktionen auf dem Gerät die richtige UI-Ausgabe zurückgibt.
Allgemeine Benutzeroberflächenaktionen in der Anwendung
Die gängige Methode zum Durchführen von UI-Tests auf Geräten ist Android Instrumentation. Dies hat jedoch Leistungsprobleme. Eines der besten Tools zum Durchführen von UI-Tests unter Android ist Robotium.
Integrationstests
Beim Integrationstest werden alle Unit-getesteten Module kombiniert und verifiziert. In Android umfassen Integrationstests häufig die Überprüfung der Integration mit Android-Komponenten, z. B. Diensttests, Aktivitätstests, Tests von Inhaltsanbietern usw.
Arten von Integrationstests unter Android
Es gibt viele Test-Frameworks, mit denen Integrationstests für Android durchgeführt werden, z. B. Troyd, Robolectric und Robotium.
Betriebstests
- Betriebliche Tests werden auch als Funktionstests oder Abnahmetests bezeichnet. Es handelt sich um hochrangige Tests, mit denen die Vollständigkeit und Richtigkeit der Anwendung überprüft werden soll.
- In Android ist FitNesse ein Open-Source-Framework, mit dem Betriebstests für die Zielanwendung einfach durchgeführt werden können.
Systemtests
Beim Systemtest wird das System als Ganzes getestet und die Interaktion zwischen Komponenten, Software und Hardware überprüft.
In Android umfasst Systemtest normalerweise
- GUI-Tests
- Usability-Tests
- Leistungstests
- Stresstests
In der obigen Liste wird den Leistungstests mehr Aufmerksamkeit geschenkt. Sie können Tools wie Traceview verwenden, um Leistungstests unter Android durchzuführen. Mit diesem Tool können Sie Ihre Anwendung debuggen und ihre Leistung profilieren.
Automatisierte ANDROID-PRÜFUNG
Da Android fragmentiert ist, sind Tests auf einer Vielzahl von Geräten erforderlich. Das kostet dich aber auch Geld. Automatisierte Android-Tests können zur Kostensenkung beitragen
Vorteile von automatisierten Android-Tests
- Reduzieren Sie die Zeit für die Ausführung von Testfällen
- Steigern Sie die Produktivität Ihres Entwicklungsprozesses
- Frühe Fehlererkennung, Kosten bei der Softwarewartung sparen
- Schnell gefunden und behoben die Fehler bei der Implementierung
- Stellen Sie die Qualität der Software sicher
Wir werden die folgenden 2 Frameworks untersuchen
- Android Testing Framework
- Robolectric Testing Framework
Android-Test-Framework
Eines der Standard-Testframeworks für Android-Anwendungen ist das Android-Testframework . Es ist ein leistungsstarkes und benutzerfreundliches Testframework, das gut in die Android SDK-Tools integriert ist.
Android-Testframework-Architektur
- Das Anwendungspaket ist Ihre Zielanwendung, die getestet werden muss
- InstrumentationTestRunner ist der Testfall-Runner, der den Testfall für die Zielanwendung ausführt. Es enthält:
2a) Testwerkzeuge: Ein SDK-Werkzeug zum Erstellen von Tests. Sie sind in die Eclipse-IDE integriert oder werden als Befehlszeile ausgeführt.
2b) MonkeyRunner: Ein Tool, das APIs zum Schreiben von Programmen bereitstellt, die ein Android-Gerät oder einen Emulator außerhalb des Android-Codes steuern.
- Testpakete 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 zwei Objekte wie folgt:
3a) Testfallklassen: Enthalten 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
AndroidTestCase-Klassendiagramm
- TestCase enthält JUnit-Methoden zum Ausführen des JUnit-Tests
- TestSuite wird verwendet, um eine Reihe von Testfällen auszuführen
- InstrumentationTestSuite ist eine TestSuite, die Instrumentation in InstrumentationTestCase einfügt, bevor sie ausgeführt wird.
- InstrumentationTestRunner ist der Testfallläufer, der den Testfall für die Zielanwendung ausführt.
- AndroidTestCase erweitert JUnit TestCase. Es enthält Methoden für den Zugriff auf Ressourcen wie den Aktivitätskontext.
- ApplicationTestCase überprüft die Anwendungsklassen in einer kontrollierten Umgebung.
- InstrumentationTestCase überprüft eine bestimmte Funktion oder ein bestimmtes Verhalten der Zielanwendung, z. B. die UI-Ausgabe der Anwendung.
- ActivityTestCase ist eine Basisklasse, die das Testen der Anwendungsaktivitäten unterstützt.
- ProviderTestCase ist eine Klasse zum Testen eines einzelnen ContentProviders.
- ServiceTestCase wird zum Testen von Serviceklassen in Testumgebungen verwendet. Es unterstützt auch den Lebenszyklus des Dienstes.
- SingeLauchActivityTestCase wird verwendet, um einzelne Aktivitäten mit einem InstrumentationTestCase zu testen.
- ActivityUnitTestCase
wird verwendet, um einzelne isolierte Aktivitäten zu testen. - 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 ein UI-Ereignis (Tastenanschlag oder Berührungsereignis) an die UI senden.
Unten finden Sie ein Beispiel für ActivityInstrumentationTestCase. Es überprüft den UI-Betrieb der Calculator-Anwendung und überprüft die Richtigkeit der UI-Ausgaben.
Testbeispiel für ActivityInstrumentationTestCase2
Robolectric Testing Framework
Das Testen mit dem Android Testing Framework mit einem 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 - das Robolectric-Testframework .
Mit dem Robolectric-Framework können Sie Android-Tests direkt auf JVM ausführen, ohne ein Gerät oder einen Emulator zu benötigen.
Erweiterte Funktionen von Robolectric
Robolektrische Testfallklassen
Betrieb von Robolectric
- Wie oben gezeigt, kann Robolectric folgende Aktionen ausführen:
- 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 Schattenobjekt an die Android-Klasse
- Dadurch kann der zu testende Code ohne Android-Umgebung ausgeführt werden.
Andere testen das Framework
Neben den oben erwähnten Test-Frameworks gibt es viele andere Test-Frameworks wie:
- Android Junit Report, ein Testläufer für benutzerdefinierte Instrumente für Android, der XML-Berichte für die Integration mit anderen Tools generiert.
- Expresso
- Appium
Mythen des Android-Testens
Viele Unternehmen entwickeln Android-Teststrategien, die auf häufigen Missverständnissen beruhen. In diesem Abschnitt werden einige beliebte Mythen und Realitäten von Android-Tests untersucht.
Mythos Nr. 1: Alle Android-Geräte sind gleich… Test auf Emulatoren ist genug
Beginnen wir mit einem einfachen Beispiel. Eine Anwendung funktioniert perfekt auf Emulatoren, stürzt jedoch auf einigen realen Geräten während der Ausführung ab
Die Anwendung stürzt während der Ausführung auf einem realen Gerät ab
Emulatoren reichen für Ihre mobilen Tests nicht aus . Sie müssen Ihre App auf realen Geräten testen.
Mythos Nr. 2: Das Testen auf einigen gängigen Geräten ist ausreichend
- Auf verschiedenen Geräten sieht Ihre Anwendung unterschiedlich aus, da verschiedene Geräte unterschiedliche Hardware, Bildschirmgrößen, Speicher usw. haben. Sie müssen Ihre Anwendung auf verschiedenen Geräten, Betriebssystemversionen, Carrier-Netzwerken und Standorten testen.
Mythos Nr. 3: Erkundungstests kurz vor dem Start sind ausreichend
- Im Allgemeinen entwerfen wir bei allen Tests die Testfälle und führen sie dann aus. Bei explorativen Tests werden Testdesign und -ausführung jedoch alle zusammen durchgeführt.
- Bei Erkundungstests gibt es keinen Plan und keine Vorbereitung, dann würde der Tester Tests durchführen, die er durchführen möchte. Einige Funktionen werden wiederholt getestet, während einige Funktionen nicht vollständig getestet werden.
Mythos Nr. 4: Wenn es einige Fehler in der Anwendung gibt, werden die Benutzer verstehen
- Wenn die Anwendung nicht funktioniert und Fehler aufweist, deinstallieren Benutzer Ihre App
- Qualitätsprobleme sind der erste Grund für eine schlechte Bewertung in Google Play. Dies wirkt sich auf Ihren Ruf aus und Sie verlieren das Vertrauen Ihrer Kunden.
Daher ist es wichtig, eine geeignete Android-Teststrategie zu haben
Best Practices beim Testen von Android
- 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
- Verwenden Sie die kontinuierliche Integration und führen Sie Tests jedes Mal aus, wenn der Code geändert wird
- Vermeiden Sie die Verwendung von Emulatoren und gerooteten Geräten