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.
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.
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.
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.
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.
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.
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.
$ 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.
#! / 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.
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.
Wir haben gelernt, wie man:
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.