menu

// Urządzenia oraz platformy testowe

Tworzenie oprogramowania jest obaczone ryzykiem, że projekt nie będzie działać i/lub wyglądać tak, jak to zaplanowaliśmy – niezależnie czy jest to serwis internetowy czy aplikacja z przeznaczeniem na sprzęt desktopowy lub mobilny.

Postęp technologiczny i intensywny rozwój rynku urządzeń przenośnych stawia zespołom deweloperskim coraz to większe wymagania. Powoduje je m.in. mnogość dostępnych przeglądarek, systemów operacyjnych (w tym ich wersji) oraz zróżnicowane rozdzielczości ekranu. W efekcie testowanie chociażby części możliwych konfiguracji jest sporym wyzwaniem.

Antidotum na tę sytuację powinien stanowić – przynajmniej w teorii – dostęp do najpopularniejszych tabletów i smartfonów, a także maszyny wirtualne z odpowiednim OS. W praktyce pierwsze wątpliwości pojawiają się jednak przy podliczaniu kosztów: urządzeń, licencji, serwisu itp. Co więcej, należy uwzględnić także kwestię dostępności urządzeń – pamiętam czasy ustawiania się wraz z pozostałymi testerami w kolejce po konkretny smartfon, aby zweryfikować funkcjonalności projektowej aplikacji.

Alternatywa dla sklepu z elektroniką
Z pomocą przychodzą platformy testowe działające w chmurze. Browserstack, CrossBrowserTesting czy Sauce Labs to serwisy internetowe, które umożliwiają weryfikację poprawności działania stron WWW czy aplikacji mobilnych na różnych systemach operacyjnych, przeglądarkach i rzeczywistych urządzeniach mobilnych. Jak to działa? W skrócie: po zalogowaniu do jednego ze wspomnianych serwisów, można przeprowadzać testy na setkach różnych konfiguracji z poziomu przeglądarki online. Brzmi wręcz idealnie?

Przyznam szczerze, że jeszcze 3 lata temu moje nastawienie było dość sceptyczne. Zwłaszcza po sytuacji, w której na przeglądarce Internet Explorer 10 pokazywano poprawne zachowanie testowanej aplikacji, zaś mając lokalny odpowiednik na maszynie wirtualnej, mogłem zobaczyć coś zupełnie innego. I niestety nie był to odosobniony przypadek – emulowane widoki mobilne nie sprawdzały się. Z czasem jednak serwisy te wprowadzały usprawnienia i ich wiarygodność – a tym samym użyteczność – znacząco wzrosła. Przede wszystkim pojawiły się urządzenia mobilne, na których fizycznie możemy przetestować swoje projekty. Wcześniej na platformach typu Browserstack nie było fizycznych urządzeń, a wyłącznie emulatory, które pozostawiały sporo do życzenia. Podobnie wygląda to w przypadku przeglądarek internetowych i systemów operacyjnych. W ostatnim roku nie spotkałem się już z sytuacją, w której występowały różnice w funkcjonowaniu aplikacji na sprzęcie natywnym a tym udostępnionym przez wspomniane rozwiązania online.

Gdzie zatem tkwi haczyk? Nic nie jest za darmo: aby w pełni korzystać z oferowanych usług, należy wybrać jeden z kilku dostępnych abonamentów. Każdy z tych serwisów umożliwia jednak bezpłatne wypróbowanie funkcjonalności (w ograniczonym zakresie).

 

Jakie są najciekawsze funkcjonalności oferowane przez wspomniane serwisy? Przyjrzyjmy się im!
Ze względu na fakt, że najczęściej korzystam z Browserstackiem, to właśnie to narzędzie będzie stanowić dla mnie punkt odniesienia.

Testy manualne
Jedną z podstawowych funkcjonalności jest logowanie się na wirtualny pulpit, by na zdefiniowanej przez nas wcześniej konfiguracji przeprowadzać testy z poziomu przeglądarki. W tym celu należy wskazać pożądany system operacyjny, a następnie przeglądarkę i jej wersję. Wybór jest naprawdę spory, przykładowo z systemów operacyjnych mamy:

WINDOWS

  • 10
  • 8.1
  • 8
  • 7
  • XP

MAC

  • Mojave
  • High Sierra
  • Sierra
  • El Capitan
  • Yosemite
  • Mavericks
  • Mountain Lion
  • Lion
  • Snow Leopard

Także przeglądarki internetowe są dostępne w rozmaitych wersjach: Internet Explorer, Edge, Firefox, Chrome, Opera, Yandex oraz Safari – oczywiście odpowiednio do wskazanego wcześniej OS.

Podobnie wygląda przygotowanie do testów na urządzeniach mobilnych – najpierw wskazujemy system operacyjny, a dostępne są:

  • Android
  • iOS
  • Windows Phone

Następnie możemy wybrać interesujące nas urządzenie, a lista modeli jest spora – patrz zestawienie:

 

Po określeniu interesujących nas parametrów, otrzymujemy pulpit z otwartą przeglądarką internetową. Możemy tu wykonywać czynności dokładnie tak, jak w lokalnej przeglądarce. Oprócz tego na ekranie wyświetlany jest panel z dostępem do takich opcji, jak: zmiana rozdzielczości wygenerowanego pulpitu, przełączanie się na inną przeglądarkę, zmiana lokalizacji, a także możliwość zrobienia screenshota i zgłoszenia buga (np. poprzez Jirę).

Testy automatyczne
Kolejna funkcjonalność to wsparcie dla testów automatycznych, w ramach którego przygotowane przez nas skrypty są uruchamiane na zdefiniowanych przeglądarkach wybranego portalu.

Konfiguracja jest prosta: tworząc obiekt WebDriver, korzystamy z RemoteWebDrivera, gdzie jako parametry przekazujemy dane do naszego konta na Browserstacku. Z kolei poprzez capabilities określamy, system operacyjny, na jakim chcemy działać, i przeglądarkę oraz jej wersję, a także kwestie związane z akceptacją certyfikatów czy rozdzielczością ekranu. Serwis posiada dobrze przygotowaną dokumentację oraz poradniki, które w razie pojawienia się jakichkolwiek problemów powinny być pomóc.

W sekcji Automate znajdziemy szczegółowe informacje o wykonanych testach: platformę, przeglądarkę, czas wykonania, logi oraz nagranie video z przeprowadzonego testu. Warto wspomnieć, że korzystając z API Browserstacka, możemy przekazywać dodatkowe dane takie, jak tytuł testu oraz jego status (w przypadku zakończenia się niepowodzeniem, możemy uwzględnić także informację, co było tego powodem).

 

 

Jeśli wykorzystujemy testy równoległe, to także zostaną one obsłużone – pod warunkiem, że nasze konto posiada odpowiedni pakiet (w imię zasady: im drożej, tym więcej dostępnych opcji).

A co w przypadku, gdy dostęp do naszego projektu jest zabezpieczony w wewnętrznej sieci i potrzebujemy skonfigurowanego VPN, aby z niej skorzystać? Żaden problem: wystarczy ściągnąć odpowiednie pliki producenta portalu (tak to przynajmniej wygląda w przypadku Browserstacka), a po ich uruchomieniu z odpowiednimi parametrami dodać jeden capability w kodzie testu. W ten sposób cały ruch jest przesyłany przez naszą prywatną sieć.

Co na to narzędzia CI takie jak Jenkins? Współpracuje, nie sprawiając kłopotów. Miałem okazję pracować w projekcie, gdzie wykorzystywany jest zestaw: Java + Selenium WebDriver + BDD (Cucumber) + Browserstack. Efekt: zarówno lokalnie, jak i z poziomu Jenkinsa wszystko działało zgodnie z założeniami.

Urządzenia mobilne
Oprócz testów serwisów internetowych, wspomniane serwisy pozwalają także na weryfikację aplikacji mobilnych.

Możemy je zainstalować na rzeczywistych urządzeniach, a następnie skupić się na testach manualnych. Dodatkowo istnieje moduł dla automatyzacji testów aplikacji mobilnych. W przypadku Browserstacka na dzień dzisiejszy można wykorzystać frameworki: Appium, Espresso, XCUITest oraz EarlGrey. Zaś jeśli chodzi o wybór urządzeń, to mamy tutaj m.in. takie nowinki, jak Samsung Galaxy S 10, iPhone XS, ale też starsze modele smartfonów czy tabletów. Łącznie mamy do dyspozycji około 70 urządzeń mobilnych.

Screenshoty
Kolejną często wykorzystywaną funkcjonalnością jest generowanie zrzutów ekranu na wybranych przez nas systemach operacyjnych oraz przeglądarkach internetowych. Dzięki temu w szybki sposób możemy sprawdzić, jak prezentuje się nasza strona internetowa na różnych platformach bez potrzeby uruchamiania osobno każdego ze zdalnych pulpitów.

Jakie są minusy?
Przyjrzyjmy się kilku kwestiom pod kątem słabych stron omawianego rozwiązania:

KOSZTY
Aby móc w pełni korzystać ze wszystkich funkcjonalności, niezbędne jest posiadanie najdroższego pakietu oraz określenie, ile osób może korzystać z serwisu jednocześnie (oczywiście im więcej, tym wyższe koszty). Producent przygotował kilka opcji, by dobrać abonament odpowiadający na nasze potrzeby. Jednocześnie warto mieć świadomość, że – tak, jak wspomniałem – koszty zakupu urządzeń, licencji i utrzymania byłyby znacznie wyższe niż zakup dostępu do płatnych rozwiązań online.

SZYBKOŚĆ DZIAŁANIA
Jeżeli testujemy strony internetowe wypełnione po brzegi skryptami i grafiką, to istnieje ryzyko, że omawiane rozwiązania zaczną mieć irytujące spowolnienia ładowania stron, kursor myszki przestanie się płynnie przesuwać, a sam obraz zrobi się niewyraźny. Co gorsza, potrafi to dotyczyć także małych website’ów. Ciężko jednoznacznie stwierdzić, co jest powodem takiego stanu rzeczy. Być może ma na to wpływ obciążenie serwerów. Co prawda przy niektórych przeglądarkach (np. Internet Explorer czy Safari) wyświetla się komunikat z propozycją instalacji dodatku, który powinien poprawić komfort testowania, ale nie w pełni rozwiązuje to omawiany problem.

Testy automatyczne także potrafią trwać dłużej. W porównaniu do maszyny lokalnej czy konfiguracji Jenkins -> Node proces ten jest wymaga ok 15 proc. więcej czasu. Samemu należy sobie odpowiedzieć, czy mamy na to zgodę, czy jest to dla nas zbyt długo.

KWESTIE BEZPIECZEŃSTWA
Jeżeli zależy nam na utrzymaniu naszego projektu w tajemnicy, to wybór tego typu narzędzi może nie być najlepszą decyzją. Informacje o testach są bowiem zapamiętywane na wspomnianym wcześniej dashboardzie. Jednocześnie możliwość dostępu do wewnętrznej sieci przez zewnętrzny portal też czyni nas bardziej „otwartymi” na świat, co niekoniecznie jest pożądanym stanem.

DEBUGOWANIE
Uciążliwością można określić brak dużego okna podglądu wykonywania naszego testu. Na przykładzie Browserstacka oznacza to bowiem, że w przypadku zatrzymania skryptu, nie widzimy, w którym miejscu jesteśmy.
Dodatkowo serwis ma ustawiony timeout ~60 sek. Przy braku przekazania jakiejkolwiek komendy w tym przedziale czasu, test zostanie przerwany. Mamy zatem do czynienia z debugowaniem na czas. Nieco lepiej problem ten obeszło Sauce Labs, jednak tu także nie jest pod tym względem idealnie.

 

Browserstack, Sauce Labs czy CrossBrowserTesting?
Funkcjonalności wspomnianych serwisów są bardzo do siebie zbliżone. Browserstacka opisałem wcześniej, a co z pozostałymi? Sauce Labs na plus wyróżnia się tym, że ma lepiej rozwiązane kwestie podglądu aktualnie wykonywanego testu, a także porównywania zmian w interfejsie na podstawie zrzutów ekranu (na zasadzie: wzorzec – aktualny stan).

Z kolei CrossBrowserTesting tak mówi o swoich możliwościach: ”Create Automated Tests Faster Than Ever with Codeless Record and Replay” („Twórz testy automatyczne szybciej niż kiedykolwiek, z wykorzystaniem nagrywania i powtórzeń bez konieczności pisania kodu”). Osobiście odbieram to nieco jak Selenium IDE na sterydach i byłbym sceptyczny co do skuteczności działania samowystarczalnych narzędzi. Na pewno jest to jednak jakaś ciekawostka.

Jest zatem z czego wybierać, ale na co się zdecydować? Polecam założyć we wspomnianych serwisach konta próbne i samemu ocenić, które z narzędzi najbardziej odpowiada naszym potrzebom.

 

Kilka słów na koniec…
Na przestrzeni ostatnich 2,5 lat każdy ze wspomnianych serwisów zrobił spore postępy w różnych obszarach takich, jak:

  • eliminacja problemów z błędami false/positive
  • rezygnacja z emulacji na rzecz prawdziwych urządzeń
  • poszerzanie wsparcia technicznego i dokumentacji
  • dodawanie nowych funkcjonalności

To wszystko sprawia, że warto się im przyjrzeć i rozważyć ewentualną współpracę. W moim przekonaniu jeśli mamy bardzo rozproszone wymagania dot. działania naszej aplikacji w różnych konfiguracjach, to omawiane portale na pewno będą pomocne. Jeśli zaś skupiamy się na zawężonym zakresie wykorzystywanych rozwiązań, to warto policzyć koszty, by zastanowić się, czy natywne narzędzia w tym przypadku nie sprawdzą się lepiej.

// Partnerzy