Automatyzacja testów ze wsparciem narzędzia chmurowego SauceLabs

09.05.2023 | Mateusz Czerwiński

Wstęp

W moim ostatnim wpisie przedstawiłem proces migracji testów automatycznych do AzureDevops. Teraz w ramach uzupełnienia całej naszej testerskiej układanki chciałbym przybliżyć sposób wykorzystania platformy SauceLabs. Platformy która pomaga nam obsłużyć testy wszędzie tam gdzie przygotowanie środowiska do testów byłoby bardzo czasochłonne. Zapraszam do zapoznania się z krótką relacją.

 

Automatyzacja testów i utrzymanie platformy w dużym projekcie

W ramach projektu aplikacji MojeING rozróżniamy automatyzację wersji desktop oraz natywnej aplikacji mobilnej. Technologie testów automatycznych dostosowaliśmy do technologii aplikacji. Używamy AzureDevops i w nim obsługujemy procesy CI/CD. Testujemy aplikacje w środowiskach zamkniętych, dostępnych tylko w wewnętrznej sieci banku. Uruchamiamy testy automatyczne w każdym „Pull request’’.

Dla aplikacji desktopowej do testów frontu aplikacji korzystamy z rozwiązania Nightwatch.js Jest to framework napisany w Node.js i bazuje na bibliotece Selenium.

Rysunek 1 Technologie testów auotmatycznych dla frontu MojeING

Źródło: opracowanie własne

 

Dla aplikacji mobilnej do testów korzystamy z rozwiązań:

  1. Appium - testy integracyjne Android, iOS
  2. Espresso - Android UI Test,
  3. EarlGrey - iOS UI Test. 

Rysunek 2 Technologie testów automatycznych dla aplikacji mobilnej MojeING

Źródło: opracowanie własne

 

 

Do obsługi testów wykorzystujemy własne maszyny wirtualne (VDI) m.in. z uwagi na konieczność izolacji środowisk testowych. Zgromadzone przez nas zasoby urządzeń do testów to ok. 200 urządzeń rozdysponowanych w zespołach testowych. Łącznie 10 zespołów zajmuje się aplikacją MojeING
i automatyzuje testy. Przy projektach automatyzacji testerzy pracują
w większości zdalnie z różnych lokalizacji.

Rysunek 3 Schemat wykorzystania testów automatycznych w Pull request

Źródło: opracowanie własne

 

Dziennie w repozytorium obsługujemy ponad 60 „Pull requestów”. Posiadamy ponad 500 zautomatyzowanych scenariuszy testowych dla różnych procesów w całej aplikacji. Utrzymujemy 8 wirtualnych maszyn na potrzeby automatyzacji. Czas wykonywania się wszystkich scenariuszy to ok. 3h. Uruchamiamy testy wielowątkowo aby przyspieszyć czas ich wykonywania się. Warunkujemy dodawanie kodu do głównej gałęzi pozytywnymi wynikami testów automatycznych.

Nasze największe wyzwania:

  • Optymalizacja czasów wykonywania się testów.
  • Maksymalizacja uruchamiania testów automatycznych na różnych konfiguracjach system operacyjny oraz przeglądarka.
  • Zarządzanie stale zwiększającą się ilością urządzeń do testów.
  • Wymiana urządzeń pomiędzy testerami w warunkach pracy zdalnej (COVID-19).
  • Zarządzanie i utrzymywanie środowisk testowych.
  • Dostępność starszych wersji przeglądarek bądź wersji beta.

 

A może sięgnijmy po chmurę?

Staramy się ciągle udoskonalać nasze procesy i wprowadzać możliwie najlepsze rozwiązania które pomogą na stawiać czoła wyzwaniom. W związku z czym zaczęliśmy się interesować rozwiązaniami chmurowymi, które mogłyby nas wesprzeć w naszej pracy. Po sprawdzeniu kilku rozwiązań, ostatecznie skupiliśmy się na SauceLabs.

Czym jest i jak działa SauceLabs?

  • SauceLabs jest narzędziem umożliwiającym testy dowolnej aplikacji webowej za pośrednictwem wirtualnych przeglądarek.
  • SauceLabs umożliwia testy aplikacji mobilnej na fizycznych urządzeniach, udostępnianych w ramach puli urządzeń.
  • Jest zdalnym serwerem Selenium obsługującym testy automatyczne zgodnie z określoną konfiguracją (desiredCapabilities).
  • Umożliwia wykonywanie testów manualnych oraz uruchamianie testów automatycznych.
  • Rejestruje w formie pliku wideo każde uruchomienie testów automatycznych.
  • Łatwo integruje się z popularnymi frameworkami do testów np. Nightwatch, Playwright, Cypress.
  • Dostarcza obszerną analizę i raportowanie z przeprowadzonych testów.
  • Obsługuje wielowątkowe uruchamianie testów automatycznych.
  • Umożliwia pracę wielu użytkowników jednocześnie oferując dane zasoby sprzętowe (urządzenia mobilne).
  • Nie przechowuje kodu aplikacji ani testów automatycznych.
  • Uruchomienie testów automatycznych z wykorzystaniem SauceLabs wymaga po stronie projektu jedynie podania adresu zewnętrznego serwera selenium oraz „accessKey” uwierzytelniającego klienta.

 

Testy manualne – przeglądarka

Jedną z podstawowych możliwości jest testowanie aplikacji webowej na dowolnej przeglądarce. Do dyspozycji jest Firefox, Chrome, Edge, Safari oraz IE. Przeglądarki oferowane są w wielu różnych wersjach włączając w to wersje beta. Oprócz tego możliwe jest wybranie systemu operacyjnego na którym dana przeglądarka zostanie uruchomiona oraz rozdzielczość ekranu.

Rysunek 4 Testy manualne wybór przeglądarki

Źródło: opracowanie własne

 

Wybór oczekiwanej konfiguracji po zatwierdzeniu przenosi do okna z sesją danej przeglądarki, w której można testować daną aplikację.

Rysunek 5 Uruchomienie sesji wybranej przeglądarki

Źródło: opracowanie własne


Interakcja jest dokładnie taka sama jak z przeglądarką zainstalowaną lokalnie 
na maszynie. Możliwy jest również dostęp do narzędzi developerskich.


Rysunek 6 Praca z wirtualną przeglądarką

Źródło: opracowanie własne

 

Przykłady ekranów z testów MojeING.

Rysunek 7 Logowanie do MojeING na wirtualnej przeglądarce

Źródło: opracowanie własne

 

Rysunek 8 Testowanie procesów MojeING

Źródło: opracowanie własne

 

Testy manualne  - przeglądarka na urządzeniach

 

Rysunek 9 Wybór przeglądarki na wirtualnym urządzeniu

Źródło: opracowanie własne

 

Wyboru urządzenia mobilnego należy dokonać spośród puli wolnych urządzeń. Oznaczenie „IN USE” świadczy o tym, że ktoś w tym czasie testuje na tym urządzeniu.

 

Rysunek 10 Testy na przeglądarce na fizycznym urządzeniu

Źródło: opracowanie własne


Przykłady ekranów z testami wersji przeglądarkowej na urządzeniach oraz symulatorach.

 

Rysunek 11 Testy wersji przeglądarkowej na urządzeniach i symulatorach

Źródło: opracowanie własne

 

Testy manualne - aplikacja mobilna

Następny dostępny wariant testowania to instalacja aplikacji na fizycznym urządzeniu mobilnym i testowanie jej poprzez interfejs dostępny z poziomu przeglądarki. Wystarczy odszukać daną wersję aplikacji wg dostępnych filtrów: version, build, OS i wybrać urządzenie na, którym chcemy zainstalować daną wersję aplikacji.

 

Rysunek 12 Wybór urządzenia i instalacja aplikacji


Źródło: opracowanie własne

 

Rysunek 13 Przykłady ekranów z testami aplikacji mobilnej.


Źródło: opracowanie własne

 

Testy automatyczne

W przypadku gdy chcemy uruchomić testy automatyczne należy odpowiednio przygotować projekt testów. Pomocny w tym może być dostępny w SauceLabs tzw. „Platform configurator”.

 

Rysunek 14 Konfiguracja Capabilities dla testów automatycznych

Źródło: opracowanie własne

 

Uruchomienie automatów czy to z własnej stacji czy np. z Azure Pipelines nie ma znaczenia. Testy wykonują się z wykorzystaniem zdalnego serwera Selenium. Pozostaje czekać i potem analizować wyniki testów.

 

Rysunek 15 Przegląd wyników testów automatycznych

Źródło: opracowanie własne

 

Testy automatyczne – przeglądarka

Dla każdego uruchomionego scenariusza testów SauceLabs automatycznie wykonuje zrzuty ekranu oraz rejestruje nagranie wideo. Wszystko to jest dostępne i możliwe do pobrania. Logi „Commands” zawierają sekwencję metod wykonywanych w ramach scenariusza testów.

 

Rysunek 16 Wynik testu automatycznego wraz z rejestrem wideo

Źródło: opracowanie własne

 

Analogicznie można przeglądać logi oraz wideo z przebiegu testów automatycznych aplikacji mobilnej.

 

Rysunek 17 Wynik testu automatycznego aplikacji mobilnej

Źródło: opracowanie własne

 

SauceLabs – kilka informacji na koniec

  • W niektórych przypadkach może być konieczność zestawienia połączenia tunelowego z SaucelLabs, wtedy pomocna może być aplikacja SauceConnectProxy  dostarczana przez SauceLabs.
  • SauceLabs oferuje 2 tygodniowy okres próbny aby spróbować możliwości narzędzia, w ramach okresu próbnego dostępne są maksymalnie 2 wątki – daje to możliwość sprawdzenia testów w trybie  „parallel running”.
  • SauceLabs dostarcza kilka gotowych projektów które można spróbować

 

Rysunek 18 Przykłady projektów do uruchomienia na SauceLabs


Źródło: opracowanie własne

 

Przykład integracji procesów CI/CD z wykorzystaniem SauceLabs

Wprowadzając SauceLabs rozszerzyliśmy możliwości naszych testerów w zakresie rozbudowy procesów CI/CD. Uprościliśmy początkującym testerom wejście w projekt tzn. "mniej konfiguracji a więcej pisania testów", środowiska czekają gotowe, żeby obsłużyć kolejne paczki testów.  Możemy teraz lepiej dostosować naszą architekturę testów  do naszych potrzeb. Konfigurując Pipeline w Azure DevOps możliwe teraz jest uruchamianie testów z wykorzystaniem SauceLabs przez  co zwiększa się liczba możliwych konfiguracji środowisk.  Bez ponoszenia nakładów na konfigurację i utrzymanie infrastruktury możemy uruchamiać testy na urządzeniach mobilnych.

Poniżej wcześniej prezentowany schemat dla „Pull request”, rozbudowany o elementy infrastruktury oraz pokazujący wszystkie momenty uruchamiania testów automatycznych.

 

Rysunek 19 Schemat CI/CD w MojeING

Źródło: opracowanie własne 

 

 

Nightwatch.js + AzureDevOps + SauceLabs

Do testów frontu aplikacji MojeING używamy frameworka Nightwatch.js. Udało nam się z sukcesem zintegrować funkcjonalności "runnera" Nightwatch.js takie jak parametryzacja środowiska, definiowanie wielowątkowości czy ilość powtórzeń zakończonych błędem testów z możliwościami interfejsu AzureDevops. Wszystko to finalizujemy użyciem SauceLabs, który przewiduje integrację z Nightwatch.js 

Aby tego dokonać wystarczą 3 kroki: 

  • Krok 1 – ustalenie zasad połączenia z SauceLabs do środowisk testowych oraz przygotowanie konfiguracji Nightwatch.js. Przedstawiona poniżej konfiguracja Nighwatch.js wystarcza aby możliwe było uruchamianie testów w SauceLabs.

Rysunek 20 Konfiguracja podstawowa dla Nightwatch.js

Źródło: opracowanie własne 

 

  • Krok 2 – Przygotowanie Pipeline wg potrzeb. Poniżej fragmenty skryptu Pipeline wykorzystującego parametryzację Nightwatch – parametry możliwe w prosty sposób do wyboru podczas uruchamiania

 

Rysunek 21 Parametryzacja Nightwatch


Źródło: opracowanie własne 

 

  • Krok 3 – Uruchomienie Pipeline zgodnie z wymaganiami i analiza wyników po stronie SauceLabs

 

Rysunek 22 Parametry pipeline i wynik testu


Źródło: opracowanie własne 

 

Podsumowanie

Myślę, że dobrym pomysłem na koniec może być zestawienia zauważonych przez nas plusów i minusów używania SauceLabs.

Minusy

  • Interakcja z urządzeniami odbywa się przez interfejs przeglądarki
    co powoduje, że responsywność nie jest tak wydajna jak na fizycznym urządzeniu.
  • Niektóre procesy nadal wymagają fizycznych urządzeń np.. Płatności mobilne.
  • W przypadku zamkniętych środowisk testowych potrzebne jest dużo nakładów pracy aby odpowiednio przygotować i zabezpieczyć połączenie pomiędzy SauceLabs a środowiskiem testowym.
  • W przypadku korzystania z puli publicznych urządzeń może zdarzyć się, że urządzenie, które nas w danym momencie interesuje będzie zajęte.
  • Ograniczone możliwości testowania takich funkcjonalności jak odbieranie powiadomień PUSH na urządzeniach.

 

Plusy

  • Dzięki wdrożeniu rozwiązania SauceLabs zyskaliśmy dostęp do wielu urządzeń mobilnych bez konieczności ich utrzymywania.
  • Mamy dostęp do urządzeń mobilnych w dniu ich premiery.
  • Niezależnie od miejsca pracy zdalnej testerzy mają dostęp do urządzeń mobilnych bez konieczności wymiany ich między sobą.
  • Testerzy mają możliwość sprawdzania aplikacji na przeglądarkach bez konieczności ich instalacji na stacjach roboczych.
  • Do uruchomienia testów automatycznych tester potrzebuje tylko skryptów z testami, nie musi konfigurować przeglądarek.
  • Łatwiej jest analizować błędy w aplikacjach w sytuacji gdy konfiguracja stacji klienta opiera się o starsze wersje przeglądarek.
  • Wsparcie i możliwość integracji z popularnymi frameworkami daje nam elastyczność w dobrze narzędzia w jakim automatyzują zespoły.  
  • Rejestracja wideo oraz zrzutów ekranu wykonująca się automatycznie w trakcie trwania testu ułatwia analizę błędów i wymianę informacji pomiędzy zespołami.
  • Generowane analizy i statystyki dostarczają nam na bieżąco informacji zwrotnych w rozróżnieniu na systemy operacyjne, urządzenia mobilne oraz rodzaje przeglądarek.