Testy na wynos – Appium Raz!

Wątpliwości

Wchodząc w świat testów już wiele lat temu frapowała mnie myśl – dlaczego tak niewiele miłości, my testerzy, poświęcamy urządzeniom mobilnym. Z biegiem lat coraz więcej aktywności przenosimy z komputerów osobistych na urządzenia „bardziej osobiste” – smartfony. Naturalną w takim razie koleją rzeczy, wydaje się potrzeba zmiany focusu testów na urządzenia mobilne, prawda? Pozwoliłem sobie wysnuć tezę, że wkrótce coraz większy nacisk będzie przykładany do testów aplikacji mobilnych. Nie tylko na smartfony i tablety, ale także przeróżne urządzenia typu wearables. Przeglądając oferty pracy dla testerów w sieci (szczególnie automatyzujących) możemy zauważyć, że większość ofert nie wspomina w wymaganiach o testowaniu aplikacji na urządzeniach mobilnych. Głównie dlatego, że zajmują się tym testerzy funkcjonalni. 

Jak ugryźć automatyzację testów mobilnych? To jedno z najczęściej zadawanych pytań w każdej większej lub mniejszej firmie osiągającej pewien poziom zaawansowania w testach. W tym wpisie dowiesz się przede wszystkich czym jest Appium, czyli mobilny odpowiednik najpopularniejszego narzędzia do testów automatycznych – Selenium.

Potrzeba matką wynalazku

Zacznijmy od początku – skąd wzięło się Appium? Jak większość genialnych rozwiązań zaczęło się od problemu. 

Rok 2011. Test manager w Zoosk, Dan Cuellar zaparza sobie drugą kawę podczas, gdy testy aplikacji na iOS trwają w najlepsze. Co zrobić, żeby skrócić czas wykonania testów i jednocześnie ograniczyć niezdrową kofeinę? Zmniejszyć repozytorium testów? Nie, to zbyt ryzykowne, szczególnie, że deploy patcha może się ciągnąć dniami ze względu na proces oceny App Store. A co gdyby zautomatyzować testy? To jest myśl! Niestety Dan nie był w tak komfortowej sytuacji, jak my teraz – nie miał Appium. Dzięki swojej prezentacji wygłaszanej podczas Selenium Conference w Londynie w 2012 roku uzyskał on wsparcie od Jasona Hugginsa z Sauce Labs. Wspólna koncepcja korzystania z klienta Selenium WebDriver doprowadziła do stworzenia podwalin pod przyszłego molocha automatyzacji testów mobilnych. Kompletną historię Appium możesz znaleźć tu: http://appium.io/history.html

Czym właściwie jest Appium? Jeśli mielibyśmy wierzyć oficjalnej stronie projektu, jest to narzędzie do automatyzacji testów aplikacji mobilnych nie tylko natywnych, ale także webowych i hybrydowych. Czy powinniśmy wierzyć jednak w to, co piszą kontynuatorzy pracy Dana Cuellara? Z mojego doświadczenia wynika, że jak najbardziej tak ☺ Za pomocą Appium możesz testować oprogramowanie na iOS, Androidzie, a nawet Windowsie, jeśli jesteś wystarczająco odważny. Narzędzie zostało zaprojektowane tak aby:

  • nie było potrzeby modyfikowania aplikacji podlegającej testom,
  • twój wybór języka programowania nie był w żaden sposób ograniczony oraz
  • zawsze był open-source.

Od skryptu do urządzenia

Spójrzmy teraz na architekturę rozwiązania. Z perspektywy użytkownika końcowego (czyli naszej) na początku jest klient, czyli to co pobierasz i instalujesz na komputerze. To jaką wersję klienta wybierzesz zależy od Ciebie, a dokładniej od języka, w jakim chcesz pisać swoje skrypty. Serwer Appium to zdecydowanie mózg całego narzędzia. Klient na Twoim komputerze porozumiewa się z nim za pomocą tego samego protokołu komunikacyjnego, co Selenium, stąd tyle podobieństw. Serwer interpretuje polecenia jakie otrzymuje od aplikacji klienta i przekazuje je dalej do drivera. Jakiego drivera? Podobnie jak wcześniej nie musimy przejmować się jakiego języka programowania użyć, to również nie jest naszym zmartwieniem. Jeśli testujesz aplikację na androida, Appium domyślnie wybierze w tej chwili UiAutomator2. W przypadku aplikacji na iOS skorzysta z drivera XCUITest. 

Nie wszystko złoto co się świeci

Chciałbym powiedzieć, że Appium jest bez wad i że jest to narzędzie idealne. Nie mogę jednak tego zrobić z czystym sumieniem. Rozdział zaczniemy od wad, żeby mieć je z głowy i przejść do przyjemniejszej części. 

  • Setup środowiska do testowania lokalnie może być wyzwaniem dla początkujących. Na szczęście jest rozwiązanie tego problemu, ale o tym w kolejnym rozdziale.
  • Wykorzystuje WebDriver API. Skutkuje problemami związanymi ze stabilnością testów. 
  • Problemy przy obsłudze gestów i najnowszych wersji systemów operacyjnych. Rozwiązania open-source zazwyczaj są krok w tył za tymi komercyjnymi. 

Rozważmy teraz zalety, żeby zamknąć temat pozytywnym akcentem.

  • Duża społeczność zebrana wokół Appium. Kolejna cecha, która wynika wprost z otwartego charakteru rozwiązania. Według mnie rekompensuje opóźnienia dotyczące najnowszych OS.
  • Wsparcie dla wielu języków programowania. Zawsze dobrze mieć wybór.
  • Wykorzystuje WebDriver API. Tak, uznaliśmy to za wadę, ale jest też druga strona medalu.  Rozwiązanie stosowane przez Selenium jest popularne, więc wielu osobom łatwiej jest wejść w świat testów mobilnych. 
  • Umożliwia testowanie mobilnych aplikacji natywnych, webowych i hybrydowych.
  • Pozwala na testy aplikacji iOS i Android jednakowo wydajnie.

Każdy, kto chciałby rozpocząć przygodę z testami mobilnymi powinien zatem odpowiedzieć sobie na pytanie – czy wady Appium przeważają nad zaletami? A może to właśnie wady bledną w porównaniu z korzyściami? Żeby jednak odpowiedzieć na to pytanie musimy zająć się jeszcze jedną kwestią w pewnym sensie filozoficzną. 

Game changer

Jedną z wad Appium tak jak sobie powiedzieliśmy jest skomplikowany setup. Załóżmy, że chcemy zainstalować to na naszej maszynie z systemem operacyjnym Microsoftu tak, aby móc napisać testy aplikacji działającej natywnie na Androidzie. W skrócie musimy więc: zainstalować Android Studio, skonfigurować zmienne środowiskowe, pobrać Node’a i wreszcie zainstalować samo Appium. Zakładamy, że Java jest odpowiednio skonfigurowana. Dodatkowo w przypadku pojawienia się błędu bądź pominięcia któregoś kroku debugowanie setupu jest utrudnione. Opisy błędów są mało intuicyjne i zazwyczaj niewiele mówią. 

Jest jednak sposób, żeby uniknąć wielu z tych kroków – możemy uruchamiać testy zdalnie (w chmurze) jednocześnie korzystając z prawdziwych urządzeń. Taką usługę zapewnia choćby Browserstack,
z którego korzystam w codziennej pracy. Dzięki testom w chmurze możemy uniknąć jednego z etapów setupu – konfiguracji lokalnej infrastruktury. Już samo to jest zdecydowanie korzystne, ale w ramach ciekawostki muszę przyznać, że jest jeszcze jedna funkcjonalność, która zwiększa efektywność pracy. Kilka dodatkowych linijek kodu umożliwia równoległe testowania aplikacji na obu systemach operacyjnych – Androidzie i iOS. Jeśli jesteś testerem, to na pewno wiesz jak wiele problemów jest to w stanie rozwiązać. Jeśli jeszcze tego nie wiesz, z pewnością przekonasz się o tym na własnej skórze ☺

Nie podoba mi się Appium

W przypadku, gdyby mój (trochę stronniczy, przyznaję) wpis nie przekonał Cię do skorzystania z Appium, bo wady narzędzia wydadzą Ci się zbyt uciążliwe, rozważ poniższe alternatywy:

  • Selendroid – pozwala testować natywne, hybrydowe i webowe aplikacje mobilne na urządzenia z Androidem, 
  • Detox – kod testów pisany w JavaScript; umożliwia testy aplikacji z użyciem symulatorów iOS i Androida oraz prawdziwych urządzeń z systemem operacyjnym od Google,  
  • EarlGrey – umożliwia testy UI aplikacji na iOS,
  • Calabash – składa się z dwóch bibliotek testowych – dla iOS i Androida. Pozwala na uruchamianie testów aplikacji dla obu wiodących systemów operacyjnych. 

Epilog

Tak oto dzielny czytelniku dotrwałeś do końca pierwszego wpisu, który Testerka pozwoliła mi zamieścić. Jest mi niezmiernie miło, jeśli znalazłeś tu choć jedną informację, która okazała się nowa i ciekawa. Jeśli tak jest, uważam swój cel za wypełniony ☺ Pisał dla Państwa Przemek Rzedkowski 😀

Napisz komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Solve : *
29 − 19 =