Eine Einführung in Appium

Was Sie erstellen werden

Automatisiertes Testen ist bekanntlich für jeden Programmierer sehr wertvoll. Es ist ein Werkzeug, mit dem die Aktionen einer Person auf einem bestimmten Gerät simuliert werden können, und es wird bevorzugt, weil es an Fehlern oder Geschwindigkeitsbegrenzungen einer tatsächlichen Person mangelt.

Appium ist ein automatisiertes Testwerkzeug, das auf dem beliebten Testframework Selenium basiert und automatisierte Tests für native iOS- und Android-Apps ermöglicht. Seine hauptsächliche Einschränkung ist, dass es nur für OS X und Linux entwickelt wird.

In meinem Büro verwenden wir Appium für Regressionstests. Regressionstests bedeuten einfach das Testen vorhandener Funktionen, um sicherzustellen, dass sie mit dem Wachstum des Produkts weiterhin wie erwartet funktionieren. Es ist sehr wichtig zu wissen, wann Features kaputt gehen, damit der Fortschritt linear fortgesetzt werden kann.

In diesem Tutorial zeige ich Ihnen, wie Sie Appium einrichten, automatisierte Skripts erstellen und einige einfache Anmeldetests für eine Android-Anwendung erstellen.

1. Appium-Setup

Der Erwerb von Appium nimmt nicht viel Zeit in Anspruch, aber das Setup kann leicht durcheinander gebracht werden. Bei der ersten Installation von Appium habe ich die Anwendung (.dmg) vor dem Einrichten in der Befehlszeile auf naive Weise heruntergeladen. Es stellt sich heraus, dass das Herunterladen von Appium in der Befehlszeile ziemlich schwierig sein kann, wenn Sie die Anwendung zuerst herunterladen. Beginnen Sie damit, Appium von der Kommandozeile aus zu erhalten.

In den folgenden Schritten gehe ich davon aus, dass Sie Homebrew installiert haben und ein OS X verwenden. Wenn Sie keinen Knoten installiert haben, führen Sie den folgenden Befehl über die Befehlszeile aus:

$ Brew-Installationsknoten

Als Nächstes installieren Sie Appium mit dem Knotenpaket-Manager. Es ist wichtig, dass Sie es tun nicht benutzen Sudo für diese Befehle oder Appium wird nicht funktionieren.

$ npm install -g appium $ npm install wd

Wenn Sie nicht über die Berechtigungen zur Verwendung dieser Befehle verfügen, müssen Sie dies tun chmod sie selbst eher als Sudo. Der Speicherort des Ordners kann je nach Setup für Sie unterschiedlich sein.

$ sudo chmod -R a + w / usr / local

Führen Sie den folgenden Befehl über die Befehlszeile aus, um den Appium-Server auszuführen und festzustellen, ob Sie ihn ordnungsgemäß eingerichtet haben.

$ appium &

Appium in der Befehlszeile ermöglicht es Ihnen, Selenium-Tests nicht nur auf Android- und iOS-Simulatoren, sondern auch auf physischen Geräten auszuführen. Die Anwendung verfügt über eine schöne Benutzeroberfläche, mit der Sie eine simulierte Version Ihres ausführen können AUT (Anwendung wird getestet) und generiert auf einfache Weise Selenium-Code für einfache Aktionen in der Anwendung. Sie werden die Anwendung hauptsächlich in der Anfangsphase beim Erstellen von Tests verwenden und dann die Befehlszeile zum Ausführen von Tests verwenden.

Warum verwenden wir die Anwendung nicht für den gesamten Ablauf? Wenn Sie vorhaben, eine Reihe von Tests auf verschiedenen Geräten automatisiert, z. B. nach Zeitplan, auszuführen, ist die Ausführung von Appium über die Befehlszeile unabdingbar.

Die Appium-Anwendung kann von Bitbucket heruntergeladen werden. Doppelklicken Sie nach dem Herunterladen des Disk-Images darauf und ziehen Sie die Appium-Anwendung auf Ihre Anwendungen Mappe.

2. AUT Setup

Als nächstes benötigen wir eine Anwendung zum Testen. Für diese Einführung in Appium werden wir eine native Android-Anwendung testen, die ich AUT nenne. Es ist eine sehr einfache An- und Abmeldeanwendung. Bei einem erfolgreichen Login wird uns eine Seite angezeigt, auf der uns mitgeteilt wird, dass wir uns erfolgreich angemeldet haben und eine Abmelde-Schaltfläche angezeigt hat.

Viele Apps verfügen über eine Anmeldefunktion, sodass wir eine grundlegende Suite von Anmeldetests erstellen, um die möglichen Ergebnisse eines Benutzers zu testen, der mit dem Anmeldungsablauf interagiert. Es ist nicht so sehr, dass wir sicherstellen möchten, dass das Login funktioniert. Wir möchten die Antwort der App auf die verschiedenen Möglichkeiten testen, mit denen ein Benutzer sich nicht anmelden kann, beispielsweise durch die Eingabe ungültiger Anmeldeinformationen.

Da es unmöglich ist, jedes verfügbare Android-Gerät zu besitzen, teste ich normalerweise auf simulierten Geräten. Dadurch kann ich leicht ändern, welches Gerät für Kompatibilitätstests simuliert wird. Holen Sie sich, um einen Android-Simulator zu erhalten AVD Manager und richten Sie ein beliebiges Android-Gerät Ihrer Wahl ein, das mit API Level 21 kompatibel ist.

  1. Laden Sie das APK von GitHub herunter.
  2. Holen Sie sich JDK, wenn Sie es noch nicht haben.
  3. Holen Sie sich das Android SDK mit dem AVD Manager.
  4. Stellen Sie das ein ANDROID_HOME, JAVA_HOME, und PFAD Umgebungsvariablen in Ihrem .Profil oder .bash_profile (oder .zshrc wenn Sie zsh verwenden).

ANDROID_HOME sollte dabei auf den Speicherort der Android-SDK zeigen JAVA_HOME sollte auf den Ort des JDK zeigen.

So können Sie diese Pfade zu Ihrem hinzufügen .bash_profile. Beachten Sie, dass die Pfade für Sie möglicherweise unterschiedlich sind.

$ vim ~ / .bash_profile $ export ANDROID_HOME = / Benutzer / (Benutzername) / Library / Android / sdk $ export PATH = $ PATH: $ ANDROID_HOME / tools: $ ANDROID_HOME / platform-tools $ export JAVA_HOME = / Library / Java / JavaVirtualMachines /jdk1.8.0_40.jdk/Contents/Home

Als Nächstes erstellen Sie ein simuliertes Gerät mit dem AVD Manager. Stellen Sie sicher, dass Sie es aktivieren Host-GPU verwenden und setze das VM-Heap zu 64.

$ cd $ ANDROID_HOME / tools $ ./android avd

Um den Simulator schneller laufen zu lassen, installieren Sie HAX von der Intel-Website.

3. Appium Inspector

Es ist Zeit, das zu benutzen Appium Inspector und fange an, einige Tests zu schreiben. Starten Sie die Appium-Anwendung. Im Allgemeine Einstellungen, deaktivieren Auf Updates prüfen, Prelaunch-Anwendung, Vorhandene Sitzungen überschreiben, und Beenden Sie Prozesse, die den Serverport vor dem Start verwenden.

Als nächstes überprüfen Sie die Android-Optionsfeld und klicken Sie auf die Android-Symbol. Prüfen App-Pfad Setzen Sie den Wert auf den Ort, an dem Sie die APK der Anwendung testen. Prüfen Starten Sie AVD und wählen Sie das simulierte Gerät aus. Wählen 5.1 Lutscher (API Level 21) aus dem Dropdown-Menü von Plattformversion.

Schlagen Starten und warten Sie, bis die App auf dem simulierten Gerät gestartet wird.

Es kann zu einem Problem kommen, bei dem die Anwendung beim Entsperren abstürzt, da wir die brandneue API 21 verwenden. Um dieses Problem zu beheben, starten Sie die Anwendung erneut, nachdem Sie den simulierten Bildschirm manuell entsperrt haben.

Wenn das simulierte Gerät die App gestartet hat, klicken Sie auf Lupe Symbol, um den Inspektor zu starten.

Dies ist der Appium-Inspektor. Es ist ein sehr praktisches Werkzeug, das Sie beim Schreiben von Tests für Appium unterstützt. Im Wesentlichen können Sie mit dem Inspector Aktionen für die native Android-Anwendung ausführen und Ihre Aktionen als generierten Code aufzeichnen.

Die Kästchen auf der linken Seite des Inspektors bilden das UI Navigator und können Sie durch die Elemente der aktuellen Aktivität navigieren. Am unteren Rand befinden sich die Optionen für die Interaktion mit dem aus den Elementfeldern ausgewählten Element. Details zum ausgewählten Element werden in angezeigt Einzelheiten. Wenn Sie manuell etwas zur Simulation tun, müssen Sie auf klicken Aktualisierung damit der Inspektor diese Änderungen erkennt. Wenn Sie Ihre Aktionen im Code aufzeichnen möchten, müssen Sie auf das Symbol klicken Aufzeichnung Taste.

Lassen Sie uns den Code erstellen, der für eine erfolgreiche Anmeldung erforderlich ist. Die App verfügt über zwei fest codierte Anmeldungen, [email protected]:Passwort und [email protected]: Passwort2.

  1. Klicken Sie auf Aufzeichnung und beachten Sie, dass sich unter dem Inspektor jetzt Code befindet. Sie können verschiedene Sprachen auswählen, um dies anzuzeigen. In diesem Lernprogramm verwenden wir Python.
  2. In dem UI Navigator Navigieren Sie zu android.widget.LinearLayout / android.widget.FrameLayout /
    android.widget.LinearLayout / android.widget.ScrollView /
    android.widget.LinearLayout / android.widget.EditText [1].
  3. Klicken Text am unteren und eingeben [email protected].
  4. Klicken Schlüssel senden, Beachten Sie, dass der folgende Code jetzt eine neue Zeile hat.

5. In der UI Navigator, navigiere zu android.widget.LinearLayout /
android.widget.FrameLayout / android.widget.LinearLayout /
android.widget.ScrollView / android.widget.LinearLayout /
android.widget.EditText [2]

6. Geben Sie das Passwort ein.

7. Klicken Sie auf Schlüssel senden.

8. In der UI Navigator, Navigieren Sie zu android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.LinearLayout / android.widget.ScrollView /
android.widget.LinearLayout / android.widget.Button [1]

9. Klicken Sie auf Berühren unten, gefolgt von Zapfhahn. Wir sind jetzt bei einer neuen Aktivität, also der UI Navigator hat sich verändert.

10. Hit Aktualisierung Der Inspektor hat wahrscheinlich nicht erkannt, dass der Simulator jetzt am Ladebildschirm vorbei ist.

11. Navigieren Sie im UI Navigator zu android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.RelativeLayout / android.widget.Button [1].

12. Klicken Sie auf Zapfhahn.

Im folgenden Code haben wir den gesamten Code, um eine erfolgreiche Anmeldung zu simulieren. Fühlen Sie sich frei, mit dem Inspektor ein bisschen mehr zu spielen. Später in diesem Lernprogramm schreiben wir auch Tests für erfolglose Anmeldungen.

4. Login-Tests

Wir werden jetzt einige Tests mit Appium schreiben, um sicherzustellen, dass unsere Anmeldeseite ordnungsgemäß funktioniert. Wenn Sie kein Python haben, können Sie es von der offiziellen Website herunterladen.

Um den Appium-Web-Treiber mit Python zu verwenden, müssen Sie auch die Appium-Bibliotheken für Python anfordern.

  1. Laden Sie die GZ-Datei herunter und entpacken Sie sie.
  2. Öffnen Sie die GZ-Datei, navigieren Sie zu der Position in der Befehlszeile und führen Sie den folgenden Befehl aus:
$ python setup.py installieren

Bevor wir mit dem Schreiben der Tests beginnen, müssen wir entscheiden, welche Testfälle wir erstellen werden. Eine gute Testsuite sollte alle möglichen Interaktionen berücksichtigen. Beginnen wir mit einem einfachen.

  1. Ein erfolgreicher Login.
  2. Ein erfolgloser Login.
#! / usr / bin / python von appium import webdriver importieren importieren unittest import os

Zuerst müssen wir alles importieren, was wir für den Test benötigen. Wir werden den eingebauten Python-Unit-Test verwenden, um unsere Tests durchzuführen. Das Appium-Element ist der Web-Treiber, mit dem wir mit dem Appium-Server interagieren.

Klasse LoginTests (unittest.TestCase): def setUp (self): desire_caps =  desire_caps ['appium-version'] = '1.0' wish_caps ['platformName'] = 'Android' wanted_caps ['platformVersion'] = '5.1' erwünschte_caps ['app'] = os.path.abspath ('/ Benutzer / mkim / Dokumente / AUT / app / build / Outputs / apk / app-debug-unaligned.apk') self.wd = webdriver.Remote ('http : //0.0.0.0: 4723 / wd / hub '(erwünschte_caps) self.wd.implicitly_wait (60)

Wir schaffen eine Klasse LoginTests um unsere Testreihe zu definieren. Das Konfiguration Funktion unserer Unit-Testläufe zu Beginn des Tests. Bei dieser Methode legen wir die gewünschten Funktionen wie Android und den App-Pfad fest. Dann initialisieren wir den Web-Treiber self.wd durch Verbinden mit dem Appium-Server.

 def tearDown (selbst): self.wd.quit ()

Das niederreissen Funktion wird nach einem Test ausgeführt und die Verbindung zum Appium-Server getrennt.

 def test_success (self): basepath = "//android.widget.LinearLayout 11 /android.widget.FrameLayout ]1/android.widget.LinearLayout 11 /android.widget.ScrollView 11/android.widget .LinearLayout [1] / "basepath2 =" //android.widget.LinearLayout 11/android.widget.FrameLayout 11/android.widget.RelativeLayout 11 / "self.wd.find_by_xpath (basepath +" android .widget.EditText [1] "). send_keys (" [email protected] ") self.wd.find_element_by_xpath (basepath +" android.widget.EditText [2] "). send_keys (" password ") self.wd. find_element_by_xpath (basepath + "android.widget.Button [1]"). click () try: self.wd.find_element_by_xpath (basepath2 + "android.widget.TextView [1]"), außer: self.fail ("Not at Login") Erfolgsseite. \ N ") self.wd.find_element_by_xpath (basepath2 +" android.widget.Button [1] "). Click ()

Der obige Codeblock wird größtenteils aus dem Appium-Inspektorcode kopiert. Wir führen die erforderlichen Aktionen auf der Benutzeroberfläche für eine erfolgreiche Anmeldung aus. In dem Versuchen Klausel, wir versuchen das zu finden Textvorschau Element, das den Text anzeigt Erfolgreich eingeloggt! Wenn eine Ausnahme ausgelöst wird, schlägt der Test fehl.

 def test_fail (self): basepath = "//android.widget.LinearLayout 11 /android.widget.FrameLayout ]1/android.widget.LinearLayout 11 /android.widget.ScrollView 11/android.widget .LinearLayout [1] / "self.wd.find_element_by_xpath (basepath +" android.widget.EditText [1] "). Send_keys (" [email protected] ") self.wd.find_element_by_xpath (basepath +" android.widget.) EditText [2] "). Send_keys (" falsches Kennwort ") self.wd.find_element_by_xpath (basepath +" android.widget.Button [1] "). Click () try: self.wd.find_element_by_xpath (basepath +" android.widget.) .Button [1] ") außer: self.fail (" Nicht immer auf dem Anmeldebildschirm. \ N ")

Um den Login-Test zu bestehen, verwenden wir absichtlich ein falsches Passwort, falsches Passwort, Erwarten, dass die Anmeldung fehlschlägt. Wir prüfen, ob wir das Login-Button-Element finden können, und schlagen den Test ab, wenn dies nicht möglich ist.

if __name__ == '__main__': suite = unittest.TestLoader (). loadTestsFromTestCase (LoginTests) unittest.TextTestRunner (verbosity = 2) .run (suite)

Dies ist die Hauptfunktion, die zum Ausführen unserer Tests erforderlich ist. Bei unserem ersten Testfall stimmt nichts. Ein erfolgloses Login kann jedoch viele Dinge bedeuten. Wenn sich ein Benutzer nicht anmelden kann, möchten wir sicherstellen, dass die Benutzeroberfläche ihm hilft zu erkennen, wie er seinen Fehler beheben kann, um die Benutzererfahrung zu verbessern.

  1. Ein erfolgreicher Login.
  2. Login mit falschem Passwort.
  3. Melden Sie sich mit einer falschen E-Mail an.
  4. Einloggen ohne Passwort.
  5. Login ohne E-Mail.
  6. Melden Sie sich mit einer ungültigen E-Mail-Adresse an.

Wir haben unsere Testfälle für die Anmeldeseite von zwei auf sechs Testfälle erweitert. Für ein so einfaches Feature mag es viel erscheinen, aber es ist absolut notwendig.

Der schwierigste Teil von Tests ist das Prüfen der Erwartungen. Der fehlgeschlagene Anmeldetest überprüft beispielsweise, ob ein Element in der Benutzeroberfläche vorhanden ist. Dies bedeutet, dass die Anmeldetests vollständig von der Benutzeroberfläche abhängen, um uns mitzuteilen, ob die Anforderungen erfüllt sind.

Dies kann eine schlechte Sache sein, da uns die Benutzeroberfläche nicht alles über den zugrundeliegenden Code sagt. Ziel ist es jedoch, die Benutzeroberfläche zu testen, um zu prüfen, ob ein Benutzeroberflächenelement vorhanden ist. Wir können unsere Erwartung gründlicher machen, indem wir prüfen, ob jedes erwartete Element auf der Seite vorhanden ist, oder sogar, ob jedes Element richtig positioniert ist.

Fazit

Wir haben gelernt, wie man:

  • Appium einrichten
  • Verwenden Sie den Inspektor von Appium, um automatisierte Testskripte zu erstellen
  • Verwenden Sie die Automatisierung, um einige einfache Anmeldetests für eine Android-Anwendung zu erstellen

Es gibt noch viel mehr über Appium und das Testen zu lernen. Der nächste Schritt könnte darin bestehen, ein kontinuierlich integriertes Testsystem zu erstellen, das die Funktionen von Appium für Ihre eigenen Anwendungen nutzt.