Archiv der Kategorie: Testautomatisierung

Bewertung von Appium in UI-Testautomatisierung für mobile Apps

Das Appium-Projekt scheint von MacOS-nutzenden Entwicklern getragen zu werden und Windows generell stiefmütterlich zu behandeln.
Einzelne Hinweise dazu finden sich im Internet.
Auch das zentrale Tool ‚Appium Inspector‘ (mit dem man die Oberflächen-Elemente identifizieren kann) wird auf Windows nicht unterstützt. Und dies, obwohl in der Appium-GUI der Button dafür voll aktiv ist und nicht einmal ausgegraut wird.
Obwohl in der Appium-Version 1.5.2 der Fix für einen vitalen Bug enthalten ist, wurde bis heute (14.11.2016) die downloadbare Windows-Version nicht auf 1.5.2. geupdated – die Apple-Version jedoch bereits am 3.5.2016:
2016-11-14 14_23_24-appium
Oben aufgeführten Bug konnte ich erst durch aufwändige Recherche identifizieren, weil die Fehlermeldung nicht sehr aussagekräftig ist:

 info: [debug] Emulator Nexus_4_API_21 not running

Schaut man sich die Commit-Historie zum Appium-Projekt an, so stellt man fest, dass die Arbeit daran kontinuierlich stark rückläufig ist. Bei einem Framework für Testautomatisierung kann ich mir nur schwerlich vorstellen, dass es nicht genügend Anpassungsarbeit gibt – beispielsweise an neue Android-Versionen. Also unabhängig von der Frage, ob ein Einsatz für Windows sinnvol ist, keine guten Signale aus dem Projekt:
2016-11-14 14_39_02-Contributors to appium_appiumGitHub
Einen Einsatz von Appium für die mobile Testautomatisierung kann ich daher aktuell nicht empfehlen.

Refreshing Appium Inspector: Failed to connect to server. Please check that it is running.

Sobald ich den Refresh-Button im Appium Inspector klicke, versucht sich der Appium Server alle paar Sekunden erfolglos mit dem von ihm gestarteten Android emulators zu verbinden („Emulator Nexus_4_API_21 not running“):
2016-11-07 17_03_22-appium inspector refresh error - Google-Suche
Nach etlichen Schleifen und ca. 2 Minuten erfolglosem Verbindungsversuchen erscheint schließlich die Fehlermeldung:
2016-11-07 17_13_09-Appium
Scrolle ich in den Meldungen hoch, entdecke ich eine ‚initiale‘ Fehlermeldung, die die Ursache des Problems stärker eingrenzen könnte:

error: Unable to start Emulator: [272]:WARNING:./android/base/files/IniFile.cpp:158:Failed to process .ini file

Ein solches IniFile.cpp habe ich jedoch auf dem ganzen Rechner nicht gefunden.
Zwischendurch, wenn zu viele andere laufende Programme den RAM verstopfen, kommt es zu solchen Fehlermeldungen, die aber mit dem Schließen überflüssiger Programme behoben werden können:

> error: Unable to start Emulator: Warning: requested ram_size 1536M too big, reduced to 512M
>
> error: Unable to start Emulator: qemu-system-i386.exe: -drive if=none,index=0,id=system,file=C:\Users\mlwowr\AppData\Local\Android\Sdk/system-images\android-21\default\x86\/system.img: could not open disk image C:\Users\mlwowr\AppData\Local\Android\Sdk/system-images\android-21\default\x86\/system.img: Could not open 'C:\Users\mlwowr\AppData\Local\Android\Sdk/system-images\android-21\default\x86\/system.img': Invalid argument

Inzwischen kommt die zur Fehlermeldung ganz oben leicht abgewandelte Fehlermeldung:

> error: Unable to start Emulator: [5400]:WARNING:./androi
> error: Unable to start Emulator: d/base/files/IniFile.cpp:158:Failed to process .ini file C:\Users\mlwowr\.android\emu-update-last-check.ini for reading.

Diese Fehlermeldung scheint nicht das Problem zu sein, sondern ein Artefakt: https://code.google.com/p/android/issues/detail?id=223994
Ein spezifischer Hinweis hingegen ist:

> info: [debug] Trying to find Nexus_4_API_21 emulator
> info: [debug] Getting connected emulators
> info: [debug] Getting connected devices...
> info: [debug] executing cmd: C:\Users\mlwowr\AppData\Local\Android\Sdk\platform-tools\adb.exe devices
> info: [debug] 1 device(s) connected
> info: [debug] 1 emulator(s) connected
> info: [debug] Sending telnet command to device: avd name
> info: [debug] Getting running emulator port
> info: [debug] Socket connection to device created
> info: [debug] Socket connection to device ready
> info: [debug] Telnet command got response: aavavdavd avd navd naavd namavd name
> Nexus_4_API_21
> info: [debug] Emulator Nexus_4_API_21 not running

Wenn ich in den General Settings ‚prelaunch application‘ anhake, zeigt sich, dass das genannte Problem vom Inspector unabhängig ist.
Lösungsansatz
Vermutlich ist der Bug in höheren Appium-Versionen behoben: https://github.com/appium/appium-adb/issues/150. Für Windows wurde (Stand:heute) diese Version noch nicht geupdated (seit ca. 1 Jahr). Diesen Lösungsansatz habe ich nicht weiters verfolgt, da ich Appium für die mobile UI- Testautomatisierung aktuell nicht empfehlen kann.
Archiv: Keine Lösungsansätze

    • Firewall abschalten
    • Device name genauso bezeichnen, wie es bei Launch AVD steht.
    • Device ready timeout hat keinerlei Auswirkungen gezeigt
    • Pre-Launch Application
    • Entferne alle überflüssigen Punkte im Dateinamen und alle Leerstellen im Dateipfad.
    • Ich hab ne ANDROID_SDK_HOME angelegt: http://stackoverflow.com/a/35443843/1777526 und eine neue AVD, aber nun wird bei Launch AVD nix mehr angezeigt.

HowTo: Appium-Testautomation auf einem Android-Emulator

Ich rate von Appium zur UI-Testautomatisierung von mobilen Apps ab. Man kann mit Appium sowohl Android Apps als auch überraschenderweise Windows Programme testen. Im Folgenden findet sich eine Anleitung zum Testautomatisieren von Android Apps auf einem Android Emulator (auf Rechner mit Windows-Betriebssystem).
Voraussetzungen

  • Android Studio mit eingerichtetem und gestartetem Android Emulator auf einem Windows-Computer
  • Runtergeladenes .apk file (dessen Name kein Leerzeichen enthalten darf), z.B. HelloCharts.

Step-By-Step-Anleitung
Die offizielle Anleitung ist einseits an manchen Stellen überfrachtet, an manchen Stellen aber auch lückenhaft, daher folgende Ergänzungshinweise:
Setup
@1: Erweitere die PATH-Variable um C:\Program Files\nodejs
@4: Nachdem die PATH-Variable um ‚C:\Program Files (x86)\Appium‘ erweitert wurde …
Additional Setup for Android App Testing
@1: Java-Home festlegen
@2:
Man findet den Android SDK path im Android Studio -> Tools -> Android -> SDK Manager -> Appearance & Behavior -> System Settings -> Android SDK im Textefeld neben ‚Android SDK Location‘. Bei mir lautet der Pfad: „C:\Users\michael\AppData\Local\Android\sdk“
Voraussetzung ist, dass die „Android SDK Platform-tools“ installiert sind (Android Studio -> Tools -> SDK Manager -> Appearance & Behavoir -> System Settings -> Android SDK -> Tab: ‚SDK Tools‘ -> ‚Android SDK Platform-Tools‘ anhaken und installieren.
@3/@4: diese beiden Build-Tools werden für diese Anleitung nicht benötigt, weshalb ich diese beiden Punkte überspringe.
@5:
Die Default-Einstellungen in Appium müssen erstmal nicht geändert werden.
Starte die Appium GUI und launche dort (Button rechts oben) den ‚Appium Node Server‘:
2016-11-03 13_37_09-Appium_ Kinderleichte Mobile App Testautomatisierung.
@6:
deviceName – zwar muss man diesen Wert setzen; sofern man nur einen Emulator auf dem Rechner laufen läßt, kann diese capability mit einem beliebigen Wert besetzt werden.
platformName lautet ‚Android‘
Die platformVersion auslesen: Im Android-Emulator ins Menü gehen, auf Settings klicken, dann ganz runter wischen und dann auf ‚About phone‘ klicken. Das was unter ‚android version‘ steht ist der richtige Wert für PlatformVersion.
app ist der Dateipfad zum zu launchenden .apk file
Mit folgendem Code kann man einen automatischen Test auf dem Android-Gerät ausführen:

DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.SetCapability("deviceName", "USB-23c3caa8");
desiredCapabilities.SetCapability("platformName", "Android");
desiredCapabilities.SetCapability("platformVersion", "5.0.2");
desiredCapabilities.SetCapability("app", @"C:\Users\mlwowr\Downloads\HelloChartsSamples_v1.5.3_apkpure.com.apk");
IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4723/wd/hub"), desiredCapabilities);