Test Lab

Firebase

  |   3 min czytania

Wprowadzenie

Firebase Test Lab jest infrastrukturą opartą o chmurę (cloud) przeznaczoną do testowania aplikacji na wielu urządzeniach (rzeczywistych i wirtualnych) naraz. W rezultacie zwracane są wyniki w postaci logów, zrzutów ekranu i wideo. Testy przeprowadzane są w partiach zwanych macierzami testowymi (test matrix) w której aplikacja jest testowana dla wielu kombinacji konfiguracji urządzeń (orientacja, język, urządzenia, wersja systemu itp). Wykorzystanie platformy Test Lab spełnia realizację instrumentalnych testów jednostkowych wykonywanych na wielu poziomach testowania (testy jednostkowe, integracyjne, systemowe). Co więcej dzięki zastosowaniu trybu demo mode przetestowanie gier staje się znacząco ułatwione.

Zestaw macierzy testów

Urządzenia

Urządzenia są na bieżąco aktualizowane i konfigurowane oraz z uwagi na zachowanie prywatności i bezpieczeństwa użytkowników czyszczone po przeprowadzonych testach (usuwana jest aplikacja i jej dane). Ze względu na niższe koszty, dłuższy możliwy czas na przeprowadzenie testów, większą dostępność i szybsze zwracanie rezultatów jeśli to możliwe rekomendowane jest użycie w procesie deweloperskim urządzeń wirtualnych. Jednakże w przypadku wersji aplikacji przeznaczonych do wydania (release), wprowadzenia nowej funkcjonalności, wykorzystania cech sprzętowych czy zmian w interfejsie graficznym należy przeprowadzić testy w oparciu o urządzenia fizyczne. Zanim jednak aplikacja zostanie poddana testom w Test Lab warto sprawdzić poprawność testów najpierw na lokalnym urządzeniu lub emulatorze.

Testowanie

Test Lab umożliwia wykonanie testów dla załączonego pliku APK lub kodu aplikacji na dwa sposoby: uruchamiając testy instrumentalne przy użyciu Espresso i UI Automator lub przygotowując je poprzez narzędzie Robo test. Następnie należy dokonać wyboru macierzy urządzeń testowych i konfiguracji. Testy można przeprowadzić nie tylko z konsoli Firebase (Firebase console), ale także z poziomu Android Studio, wiersza poleceń gcloud CLI oraz systemów ciągłej integracji (CI) takich jak m.in. Jenkins, Bitrise i Circle CI. Wyniki przykładowych testów instrumentalnych dla zadanej macierzy w konsoli Firebase prezentują się następująco.

Testy instrumentalne

Widok szczegółów testów na danym urządzeniu dostarcza kompletnych informacji nt metod testowych, logów, rezultatów, a nawet nagranie wideo z przeprowadzonych testów.

Wyniki testów

W przypadku potrzeby rozróżnienia fragmentów kodu ze względu na wykonanie przez Test Lab można posłużyć się poniższym kodem.

String testLab = Settings.System.getString(getContentResolver(), "firebase.test.lab");
if ("true".equals(testLab)) {
    //do something for Test Lab running
}

Robo test

Robo test jest narzędziem testowym zintegrowanym z Test Lab, który na podstawie analizy struktury interfejsu graficznego aplikacji automatycznie symuluje zachowanie użytkownika. Przeprowadza symulacje działań w tej samej kolejności dla danej konfiguracji i ustawień dzięki czemu możliwa jest weryfikacja poprawek i przeprowadzenie testów regresji. Dodatkowo załącza pliki logów, zrzuty ekranu, wideo i diagramy przepływu akcji co pomaga w znalezieniu błędów, a także podczas każdego testu rejestruje statystyki dotyczące podjętych działań i wywołanych ekranów. Dodanie skryptów Robo pozwala na przejęcie większej kontroli nad testami poprzez ręczne wprowadzenie działań. Należy mieć jednak na uwadzę, że testy Robo wykorzystują Android API do bezpośredniego wykonywania działań na widżetach interfejsu użytkownika. Jeśli testowany ekran nie używa widżetów UI wówczas testy przeprowadzane są zgodnie z zasadą małpki testowej (Monkey Actions), tzn. zachodzi symulacja dotknięć w losowych miejscach na ekranie. Aby temu zapobiec można użyć tryb demo mode oparty o mechanizm pętli gry Game Loop Test.