Erstellen von Berichten zum Testen von Android-Anwendungen mit Spoon und Emma

Bild

Das Testen ist einer der wichtigsten Schritte bei der Entwicklung einer Anwendung. Und Android Apps sind keine Ausnahme. Wenn Sie Code schreiben, müssen Sie ihn normalerweise betrachten und überlegen, wie Sie ihn später testen können. Stellen Sie sich eine Situation vor, in der Sie Ihr Projekt testen müssen, das vollständig geschrieben ist. Meistens ist es nicht so einfach. Höchstwahrscheinlich wurde Ihr Code einfach nicht implementiert, sodass er leicht zu testen ist. Dies bedeutet, dass Sie Änderungen daran vornehmen müssen, um es testbar zu machen ... ohne jegliche Funktionalität zu zerstören (in unserer Zeit wird dies als Refactoring bezeichnet). Kann man bei solchen Änderungen schnell und sicher sagen, dass Sie nichts im Arbeitscode gebrochen haben, wenn es keine umfassenden Tests gab? Kaum. Ich glaube, dass Tests, nämlich UNIT-Tests,

Wie bei allen anderen hat auch bei Google Google keine schlechten Testtools bereitgestellt, aber nicht alles kann mit ihnen durchgeführt werden. Zum Testen wird das jUnit-Framework verwendet, das natürlich Vor- und Nachteile hat.

jUnit - wird für Unit-Tests verwendet, mit denen Sie die Richtigkeit einzelner Module des Programmquellcodes überprüfen können. Der Vorteil dieses Ansatzes ist die Isolierung eines einzelnen Moduls von anderen. Gleichzeitig kann der Programmierer mit dieser Methode sicherstellen, dass das Modul selbst ordnungsgemäß funktioniert. jUnit ist eine Klassenbibliothek. Aber derjenige, der die Tests mit diesem Framework geschrieben hat, hat wahrscheinlich sichergestellt, dass es beim Testen der GUI völlig unpraktisch ist. Ein Zeichen für guten Geschmack ist Code, der durch Tests abgedeckt wird, und ein Bericht, der den Prozentsatz der Codeabdeckung durch Tests angibt. In letzter Zeit muss ich in Projekten unter anderem Tests vom Laden bis zur grafischen Benutzeroberfläche schreiben und möchte über die Funktionen sprechen, die ich erfülle, und darüber, wie diese Berichte erstellt werden. Aber zuerst zu den wichtigsten Rahmenbedingungen:

Ein ungefähres Bild der Verwendung der wichtigsten Frameworks. Tatsächlich wird jede Wahl für sich selbst getroffen. Jemand wählt Robotium, weil er nicht gerne in den Quellcode geht, jemand Espresso, weil es eine intuitive Benutzeroberfläche hat.

Löffel


Spoon ist ein Framework, das während der Ausführung von Tests Screenshots vom Bildschirm eines Geräts oder Emulators aufnehmen und daraus einen Bericht erstellen kann. Zusätzlich zu den Screenshots hängt er das Protokoll des Testläufers an den Bericht an. Wenn der Test fehlschlägt, wird eine vollständige Stapelverfolgung angezeigt, was sehr praktisch ist. Gehen Sie wie folgt vor, um einen Bericht zu erhalten:
  • Download Spoon-Clien t und Spoon-Runner ;
  • Kopieren Sie den Spoon-Client mit Tests in den libs-Ordner des Projekts.
  • Erstellen Sie im selben Projekt einen Ordner (z. B. Löffel).
  • Kopieren Sie Spoon-Runner in den erstellten Ordner.
  • Erstellen Sie eine Bat-Datei mit dem folgenden Skript:

call java -jar spoon-runner-1.1.1-jar-with-dependencies.jar
-- apk Path\to\your\project \bin\project.apk
-- test-apk Path\to\your\test-project \bin\tests.apk

In den Unterparametern können Sie einen Filter für Tests angeben. Sie können beispielsweise nur Tests mit der Annotation "Mittel" ausführen, indem Sie dem Skript eine mittlere Größe hinzufügen.
Jetzt sieht das Skript folgendermaßen aus:

call java -jar spoon-runner-1.1.1-jar-with-dependencies.jar
-- apk Path\to\your\project \bin\project.apk
-- test-apk Path\to\your\test-project \bin\tests.apk
-- size medium

Eine vollständige Liste der Subparameter finden Sie auf der offiziellen Seite von Github . Wenn Sie jetzt Tests schreiben, fügen Sie einfach dort ein, wo Sie es benötigen:

Spoon.screenshot(activity, "state_changed"),

Dabei ist das zweite Argument die Zeile, die über dem Screenshot hervorgehoben wird. Ja, eine weitere Funktion - darin wird Regex verwendet, und wenn Leerzeichen in Signaturen verwendet werden, wird eine Ausnahme ausgelöst. Wir starten den Emulator oder verbinden das Telefon, öffnen unsere Batch-Datei und wenn alles richtig gemacht ist, sehen Sie den Bericht im selben Ordner:
Bild
Das offizielle Beispiel des Berichts des Entwicklers finden Sie hier .
Der Bericht aus meinem Projekt kann hier eingesehen werden .
Nicht schlecht, oder? Ein weiterer Vorteil des „Löffels“ besteht darin, dass Tests auf allen angeschlossenen Geräten gleichzeitig ausgeführt werden, dh die Ergebnisse aller Geräte in einem Bericht erfasst werden. Das einzige und wahrscheinlich signifikante Minus ist, dass keine Screenshots der Dialoge aufgenommen werden und nicht zu sehen ist, was während des Tests darauf war. Und er wird immer noch keinen Bericht über die Codeabdeckung mit Tests erstellen! Nun, lass es uns reparieren.

Emma

Stimmen Sie zu, der Bericht sieht zumindest würdig aus.
Bild
Beispiel für Code, der durch Tests abgedeckt wird:
Bild
bzw. teilweise abgedeckt:
Bild
Vollständiger Bericht in allen Formaten .

EMMA ist ein Open-Source-Toolkit zum Messen und Berichten der Testabdeckung in Java. Dieses Tool ist in das Android SDK integriert und Entwickler bieten die Möglichkeit, einen sofort einsatzbereiten Bericht zu erstellen. Hauptmerkmale:
  • Unterstützung für die Klasseninspektion im Offline-Modus (vor dem Laden) und im laufenden Betrieb;
  • Unterstützte Abdeckungstypen: Paket, Klasse, Methode, Zeile und Haupteinheit. Es ist auch möglich zu erkennen, wenn eine Zeile des Quellcodes nur teilweise abgedeckt ist.
  • Arten von Ausgabeberichten: Text, HTML, XML;

Erstellen eines Projekts mit Ant

Apache Ant ist ein Tool zum Umwandeln von Entwicklungsstrukturen in Anwendungsbereitstellungsdesigns. Es ist deklarativ und alle Befehlszeilenanweisungen, die zum Bereitstellen der Anwendung verwendet werden, werden durch einfache XML-Elemente dargestellt. Weitere Details finden Sie hier .
Um das Projektassemblierungsverfahren zu beschreiben, benötigen Sie: ein Arbeitsprojekt - MyProject und ein Projekt mit Tests dafür - MyProjectTests. Informationen zu den Regeln, die beim Erstellen von Tests beachtet werden müssen, finden Sie hier .
Wenn Sie ein Projekt mit Ant erstellen, müssen Sie zunächst die Projekte erfassen, die in der Anwendung als Bibliotheken verwendet werden. Wenn es keine gibt, können Sie diesen Schritt überspringen. Ein Projekt verwendet beispielsweise Bibliotheken wie "google_play_service_lib". Sie müssen Folgendes tun:
- Wechseln Sie in der Befehlszeile in den Ordner sdk \ tools (z. B. D: \ android \ adt-bundle \ sdk \ tools) und führen Sie Folgendes aus:

android update lib-project -p MyLibProject

, wobei MyLibProject der Pfad zu der im Projekt verwendeten Bibliothek ist. Infolgedessen sollte build.xml im Projektstamm angezeigt werden und eine Meldung in der Konsole angezeigt wird:

Updated local.properties
Updated file D:\Workspace\MyProject\build.xml
Updated file D:\Workspace\MyProjectTests\proguard-project.txt

Nachdem Sie alle Bibliotheken zusammengestellt haben, müssen Sie das Arbeitsprojekt selbst zusammenstellen. Dazu müssen Sie im selben Ordner Folgendes tun:

android update project -p MyProject

Dabei ist MyProject der Pfad zum Projektarbeitszweig. Natürlich sollte sich AndroidManifest.xml in diesem Ordner befinden. Das Skript generiert erneut build.xml und erstellt das Arbeitsprojekt. Sie können den Namen des Projekts über Unterparameter eingeben, damit Sie später bequem Folgendes verwenden können:

android update project  -p MyProject  -n NameForProject

Wie baut das Projekt mit Tests auf? Alles ist ähnlich und bequem. Skript zum Erstellen eines Projekts mit Tests:

android update test-project  -m ..\MyProject -p \MyProjectTests

Dabei ist MyProject der Pfad zum Arbeitsprojekt und MyProjectTests der Pfad zum Projekt mit Tests.
Alles ist fertig! Übrigens können Entwickler in diesem Schritt Probleme aufgrund der Verwendung von Bibliotheken haben! In einem Projekt können beispielsweise verschiedene JAR-Bibliotheken basierend auf den Bibliotheken kompiliert werden, die in Ihren anderen Bibliotheken verwendet werden. Ant versteht nicht, was mit ihnen zu tun ist, und infolgedessen tritt während der Montage ein Fehler auf. Das heißt, wenn ein und dieselbe Bibliothek in einem Projekt verwendet wird, kann dies bereits zu einem Fehler führen.
Um mit der Berechnung der Codeabdeckung durch Tests im Skript zu beginnen, müssen Sie emma in den Unterparametern registrieren. Bevor Sie beginnen, müssen Sie den Emulator ausführen oder das Gerät anschließen. Das folgende Skript wird in der Befehlszeile im oberen Zweig des Projekts mit Tests ausgeführt:

ant clean emma debug install test

Während der Tests generiert Emma die Datei cover.em im Ordner bin des Hauptprojekts (Metadaten), legt nach Bestehen aller Tests die erforderlichen Berechtigungen fest, erstellt die Datei cover.ec im Ordner des installierten Projekts, kopiert diese beiden Dateien in den Ordner bin des Testprojekts und basierend auf ihnen wird ein Bericht im selben Ordner generiert.
Der Quellcode meines Projekts mit Beispielberichten kann auf Github angezeigt werden .

Zusammenfassend


Schauen wir uns die Tests an, auch wenn sie sehr gut geschrieben sind. Sie können sie ansehen, um zu beantworten, wie viel sie Ihren Code abdecken? Reicht es für Sie aus, einen grünen Streifen zu haben, der das Ergebnis Ihrer Tests als visuellen Bericht als Ganzes anzeigt? Ich denke nicht. Die Verwendung von Berichten als Ergebnis der Arbeit zeigt das Kompetenzniveau eines Spezialisten, und wenn es um die Testautomatisierung geht, umso mehr. Das Schreiben von Skripten kann sicherlich einige Zeit in Anspruch nehmen, aber glauben Sie mir, es lohnt sich!

Jetzt auch beliebt: