Testing

Automatyzacja testów Androida przy użyciu Appium

Marzec 7, 2017 0
Podziel się:

W ostatnich latach powstało wiele narzędzi do testów aplikacji mobilnych. Z miesiąca na miesiąc w sklepach Google’a czy Apple’a pojawia się coraz więcej produktów, firmy te wydają coraz to nowsze urządzenia, aktualizacje oprogramowania oraz nowe wersje systemów operacyjnych.

W tej ogromnej macierzy możliwości testerzy starają się znaleźć narzędzie, dzięki któremu uda im się sprawdzić jak najwięcej kodu aplikacji przy stosunkowo niskim koszcie czasu i pieniędzy. Biorąc pod uwagę wzrastające wymagania rynkowe oraz wysokie oczekiwania końcowych użytkowników, jest to nieraz kłopotliwe. Appium pozwala jednak na automatyzację testów dla obu wiodących platform. W dzisiejszym artykule pokazany zostanie przykładowy projekt testów dla Androida przy użyciu tego narzędzia.

WYMAGANIA

Wszystkie opisane czynności zostały wykonane na systemie Windows 10.

Aby Appium działało poprawnie na komputerze zainstalowane muszą być:

  • Eclipse
  • Android SDK i API dla obecnej wersji Androida
  • Java
  • Ścieżki do JAVA_HOME i ANDROID_HOME muszą byś ustawione w zmiennych środowiskowych

Dodatkowo opcjonalnie zainstalowany może być Node.js, ale nie jest to wymagane, ponieważ nowsze wersje Appium mają dodane ten program domyślnie. Dodatkowym wymaganiem jest posiadanie biblioteki TestNG

 

KONFIGURACJA

  • Ściągamy Selenium i rozpakowujemy pliki w dowolnym miejscu w folderze nazwanym Selenium
  • Ściągamy Appium dla Windowsa i rozpakowujemy w folderze nazwanym Appium
  • Ściągamy jar klienta Javy i dodajemy do folderu Appium

Instalujemy z folderu Appium program o ten samej nazwie. Otwieramy Eclipse i tworzymy nowy projekt Maven’owy. Klikamy prawym przyciskiem myszy na projekt, wybieramy Properties -> Java Build Path -> Add External JAR’s. Do projektu dodajemy jar klienta Javy z folderu Appium, pobrane biblioteki z folderu Selenium, jar TestNG.

properties

 

Dobrą praktyką jest dodanie do projektu builda aplikacji, którą będziemy testować. Jeśli mamy plik .apk to wystarczy gdy w do projektu dodamy folder o nazwie np. builds i wrzucimy do niego apkę. Co jeśli nie mamy zbudowanej aplikacji, a posiadamy ją tylko zainstalowaną na urządzeniu?

 

adb pull CZYLI ZYSKIWANIE BUILDA APLIKACJI

Jeśli nie mamy zbudowanej aplikacji w postaci pliku apk to możemy go uzyskać bezpośrednio z urządzenia lub emulatora. W tym celu telefon musi być podłączony do komputera a emulator musi być uruchomiony.  Przechodzimy do folderu w którym znajduje się SDK Androida, wchodzimy do platform-tools. Uruchamiamy konsolę i wpisujemy polecenie adb devices. Powinna pokazać się lista dostępnych urządzeń. W przypadku kiedy jest więcej niż jedno urządzenie podpięte/uruchomione na komputerze, należy w każdej dalej przedstawionej komendzie podać numer urządzenia na którym dana komenda ma być wykonana.

ap2

 

 

Jeśli wiemy jak nazywa się nasza aplikacja, której builda chcemy uzyskać, to musimy na początek uzyskać nazwę jej package’u. W tym celu wpisujemy komendę listującą wszystkie zainstalowane aplikacje, które w nazwie posiadają zadany przez nas parametr:

ap3

 

 

W wynikach zapytania szukamy interesującej nas aplikacji. Komenda pokazuje nazwę packagu oraz ścieżkę, w jakiej aplikacja się znajduje.

 Kolejnym krokiem będzie wykonanie pulla aplikacji z urządzenia na komputer. W tym celu posłużymy się komendą pull jako parametr podając wylistowaną wcześniej ścieżkę:

ap4

 

W folderze platform-tools zobaczymy nowy plik: base.apk. Jest to nasza zbudowana aplikacja pobrana z urządzenia. Kolejnym krokiem jest pobranie z builda informacji o aktywności startowej, aby można było w pełni stworzyć DesiredCapabilities dla Appium. W tym celu posłużymy się poleceniem aapt dump. By uruchomić jednak program aapt musimy przejść do folderu build-tools, wejść w folder z numerem SDK ( u mnie 23.0.3).

ap5

ap6

Powyżej widać wszelkie niezbędne informacje na temat aplikacji, jak wersja minimalna systemu, permissions, nazwa paczki itd. Nas jednak interesuje informacja zawarta nieco niżej, mianowicie wynik wartości launchable-activity. Po ostatniej kropce znajduje się nazwa aktywności startowej, której właśnie szukaliśmy. Mając już wszystkie niezbędne informacje możemy przejść do Eclipse i Appium.

Oczywiście możemy skorzystać także z gotowych aplikacji umożliwiających zczytywanie danych, jak np. APK Info, która pokazuje szczegółowe informacje na temat wybranej aplikacji:

Screenshot 2017 02 06 16 12 411 169x300 - Automatyzacja testów Androida przy użyciu AppiumScreenshot_2017-02-06-16-12-55[1]

 

APPIUM

Przechodzimy do Appium. Klikamy na robota androidowego aby przejść do ustawień. W sekcji Capabilities podajemy nazwę urządzenia, na którym uruchamiane będą testy. Jeśli nie wiemy jak nasze urządzenia identyfikowane jest w systemie to wystarczy, że komendę adb devices uruchomimy z parametrem dodatkowym –l. Nazwa urządzenia podana jest po model=.

ap7

W sekcji Application podajemy ścieżkę do pliku base.apk. I to wszystko, możemy teraz uruchomić serwer appium klikając w strzałkę Run. Po chwili serwer startuje co widać w wyświetlanych logach:

ap8

Serwer uruchamia się na domyślnym porcie 4723 o adresie IP 127.0.0.1 i dobrze jest tego nie zmieniać. Innymi możliwymi opcjami jest adres 0.0.0.0 i port 4725. Serwer należy skonfigurować tak, aby podane parametry zgadzały się z minimalnymi wymaganiami aplikacji, które zczytaliśmy z konsoli. Kiedy serwer jest już uruchomiony możemy przejść do Eclipse.

 

ECLIPSE

W naszym projekcie Mavenowym tworzymy nową klasę. Na początek należy ustawić Desired Capabilities, czyli zestaw kluczy i wartości, które wysyłamy do serwera Appium aby poinformować go  jakim rodzajem sesji jesteśmy zainteresowani i co będzie testowane. Wymaganym minimum są wartości dla deviceName, appPackage i appActivity. Teraz możemy zainicjować drivera, dzięki któremu będziemy testować aplikację.

ap9

Kolejne kroki są już takie jak dla typowych testów przy użyciu Selenium: wyszukujemy elementy, wykonujemy akcje, wstawiamy asercję w celu weryfikacji poszczególnych kroków. Ale jak zdobyć informacje na temat testowanego widoku? W tym celu posłużymy się ponownie SDK Androida i narzędziem UIAutomatorViewer.

 

UIAutomatorViewer

Narzędzie to znajdziemy w SDK w folderze tools. Dzięki niemu możemy uzyskiwać informacje na temat hierarchii elementów w widoku, idki i inne atrybuty. Aplikacja, którą chcemy zbadać powinna być uruchomiona na urządzeniu. Wybieramy przycisk Device Screenshot i czekamy aż pokaże się widok, na którym możemy wskazać myszą element, którego wartości nas interesują. Dopóki nie wybierzemy go poprzez kliknięcie, wartości sfocusowanych elementów będą odświeżały się dynamicznie.

ap10

 

Kiedy mamy już wszystkie niezbędne informacje na temat konfiguracji środowiska, aplikacji i napisaliśmy już kod, możemy przystąpić do jego uruchomienia. Ponieważ testy powinny być jak najłatwiejsze w utrzymaniu i dobrą praktyką jest niedublowanie kodu, należy rozbijać czynności na jak najmniejsze metody. W tym krótkim przykładzie nie ma to sensu, ale w przypadku bardziej złożonych testów jest to wskazane. Podczas tworzenia projektu wygenerował się folder src/test/java a w nim plik NazwaKlasyTest.java. Zawiera on wygenerowany z automatu kod dziedziczący po junitowym TestCase. W metodzie testApp() wywołuję metodę napisaną w klasie App. Całość uruchamiam poprzez kliknięcie prawego przycisku i Run as -> JUnit test. W Appium pojawiają się logi świadczące o uruchomieniu testu, na urządzeniu widzimy akcje, które zaprogramowaliśmy.

ap11

3.5 / 5
Kategorie: Testing
Paulina Łojszczyk
Autor: Paulina Łojszczyk
W Sii pracuję od niemalże 5 lat, moją specjalizacją są testy aplikacji mobilnych. Ponadto zajmuję się także poznawaniem i rozwijaniem testów w narzędziu Tosca. Prywatnie jestem szczęśliwą żoną i mamą rocznej Hani.

Imię i nazwisko (wymagane)

Adres email (wymagane)

Temat

Treść wiadomości

Zostaw komentarz