Firebase Test Lab to chmurowa usługa Google do zautomatyzowanego testowania aplikacji mobilnych na rzeczywistych urządzeniach znajdujących się w centrach danych Google. Test Lab umożliwia uruchamianie testów instrumentalnych, testów zrzutów ekranu i testów robotowych na setkach konfiguracji urządzeń z różnymi wersjami Android i iOS bez konieczności posiadania własnej farmy urządzeń. Według Firebase Documentation, 2026, testowanie robotowe Firebase automatycznie przechodzi przez wszystkie ekrany aplikacji, wykrywając crash'e, ANR i problemy z UI bez pisania ani jednej linii kodu testowego. Usługa obsługuje integrację z systemami CI/CD i udostępnia szczegółowe raporty z wideo i logami.
Najważniejsze
Firebase Test Lab to chmurowa infrastruktura Google do zautomatyzowanego testowania aplikacji mobilnych na fizycznych urządzeniach znajdujących się w globalnych centrach danych Google. W przeciwieństwie do emulatorów na lokalnej maszynie, Test Lab uruchamia testy na rzeczywistych urządzeniach Android i iOS z różnymi wersjami systemów operacyjnych, rozdzielczościami ekranu, ilością RAM i poziomami API. Usługa automatycznie przetwarza wyniki testów, udostępniając wideo przejścia, zrzuty ekranu kroków i szczegółowe logi.
Posiadanie własnej farmy urządzeń wymaga znacznych nakładów kapitałowych na zakup i utrzymanie fizycznych urządzeń. Firebase Test Lab zapewnia dostęp do tysięcy urządzeń na zasadzie płatności za faktyczne użycie (pay-per-use) z bezpłatnym limitem w planie Spark. Test Lab automatycznie aktualizuje park urządzeń do aktualnych modeli, w tym najnowsze flagowce Google Pixel, Samsung Galaxy, Xiaomi i iPhone. Testy są wykonywane równolegle na kilku urządzeniach, co skraca całkowity czas weryfikacji aplikacji.
Dla Androida Test Lab obsługuje testowanie na urządzeniach z poziomem API od 21 do najnowszej stabilnej wersji Androida. Wsparcie dla iOS obejmuje rzeczywiste urządzenia iPhone i iPad z wersjami iOS od 15 do najnowszej stabilnej. Dla iOS dostępne jest testowanie robotowe i XCTest. Każdy test może być wykonany na fizycznych urządzeniach lub emulatorach — dla uzyskania maksymalnie dokładnych wyników Google zaleca używanie fizycznych urządzeń, ponieważ wykrywają one problemy z czujnikami, kamerą i interfejsami sieciowymi.
Firebase Test Lab obsługuje kilka rodzajów testów, z których każdy rozwiązuje swoje zadanie w cyklu programowania: testy robotowe do szybkiego sprawdzenia stabilności, testy instrumentalne do weryfikacji funkcjonalnej i testy zrzutów ekranu do wykrywania regresji wizualnych. Wybór rodzaju testu zależy od etapu rozwoju i celów konkretnego uruchomienia.
Testy robotowe to unikalna możliwość Firebase Test Lab, która nie wymaga pisania kodu testowego. Firebase Crawler automatycznie bada aplikację: znajduje wszystkie interaktywne elementy UI, klika je, wypełnia formularze danymi testowymi, przechodzi między ekranami i rejestruje wszelkie awarie (crash, ANR, wyjątki). Testy robotowe wykrywają do 80% krytycznych błędów bez ani jednej linii kodu testowego, co czyni je idealnym narzędziem do oceny podstawowej stabilności aplikacji na wczesnych etapach rozwoju.
Testy instrumentalne to testy napisane przez programistę z użyciem frameworków Espresso (Android) lub XCTest (iOS). Test Lab uruchamia APK z testami na docelowym urządzeniu i zbiera wyniki wykonania. Testy mogą być proste (sprawdzenie wyświetlania elementów) lub złożone (scenariusze end-to-end: autoryzacja, dodanie do koszyka, złożenie zamówienia). Firebase Test Lab obsługuje Android Test Orchestrator do izolacji testów od siebie, co zapobiega wpływowi jednego upadłego testu na pozostałe.
Testy zrzutów ekranu służą do wykrywania regresji wizualnych w aplikacji. Game loop to specjalny rodzaj testu, który przekazuje aplikacji listę scenariuszy przez intent, a aplikacja wykonuje te scenariusze i robi zrzuty ekranu kluczowych ekranów. Test Lab zbiera zrzuty ekranu ze wszystkich urządzeń macierzy i umożliwia porównanie ich z wzorcowymi w celu wykrycia różnic. Ten rodzaj testów jest szczególnie popularny w aplikacjach gier do sprawdzania renderowania na różnych GPU.
| Rodzaj testu | Kod | Co sprawdza | Kiedy używać |
|---|---|---|---|
| Test robotowy | Nie wymagany | Crash, ANR, wyjątki | Szybkie sprawdzenie stabilności |
| Instrumentalny | Espresso / XCTest | Funkcjonalność scenariuszy | Testowanie regresyjne |
| Zrzut ekranu | Game loop | Regresje wizualne | Sprawdzenie UI na różnych urządzeniach |
Macierz testowania w Firebase Test Lab to zestaw konfiguracji urządzeń, na których jest wykonywany wybrany test. Każda konfiguracja obejmuje model urządzenia, wersję systemu, orientację ekranu (pionowa/pozioma) i ustawienia regionalne (locale, język). Test jest uruchamiany równolegle na wszystkich wybranych konfiguracjach, co znacznie skraca całkowity czas wykonania w porównaniu z sekwencyjnym uruchamianiem na każdym urządzeniu.
Google zaleca włączenie do macierzy urządzeń o różnych charakterystykach: model flagowy (Google Pixel, Samsung Galaxy S), urządzenie budżetowe (Moto G, Xiaomi Redmi), urządzenie z minimalną wersją API obsługiwaną przez aplikację. Optymalna macierz obejmuje 5–10 konfiguracji pokrywających wszystkie wersje systemu obsługiwane przez aplikację. Dla iOS wybierane są iPhone i iPad różnych generacji (np. iPhone SE, iPhone 14, iPad Air) z różnymi wersjami iOS.
Test Lab automatycznie rozdziela testy na wybrane urządzenia, wykonując każdy test na każdej konfiguracji. Czas wykonania całej macierzy równa się czasowi wykonania najwolniejszego testu na najwolniejszym urządzeniu — wszystkie pozostałe są wykonywane równolegle. Jeśli jeden test pada na wszystkich urządzeniach, Test Lab zatrzymuje jego wykonywanie na pozostałych konfiguracjach w celu oszczędności zasobów. Wyniki są grupowane według testu i urządzenia, co pozwala szybko określić, czy błąd jest specyficzny dla danej konfiguracji.
Testowanie robotowe to flagowa możliwość Firebase Test Lab, która pozwala automatycznie badać aplikację bez pisania ani jednego testu. Firebase Crawler (robot) analizuje hierarchię UI aplikacji, znajduje wszystkie interaktywne elementy (przyciski, pola tekstowe, listy, menu) i wchodzi z nimi w interakcje, symulując zachowanie rzeczywistego użytkownika. Testowanie robotowe jest szczególnie efektywne na wczesnych etapach rozwoju, gdy testy nie są jeszcze napisane, lub do sprawdzania kodu legacy.
Aby uruchomić test robotowy, wystarczy przesłać APK lub IPA do Firebase Console i wybrać opcję Robo test. Robot może automatycznie logować się do aplikacji przez wcześniej skonfigurowane dane uwierzytelniające (login/hasło), aby uzyskać dostęp do ekranów ukrytych za autoryzacją. Można również ustawić głębokość badania (max depth), aby ograniczyć liczbę kroków robota, lub wskazać konkretne elementy, które robot ma priorytetowo naciskać.
<!-- res/xml/robo_directives.xml -->
<!-- Robot wypełni pola loginu i hasła -->
<?xml version="1.0" encoding="utf-8"?>
<robo-directives
xmlns:android="http://schemas.android.com/apk/res/android">
<directive
android:resourceName="@id/et_email"
android:inputValue="test@example.com" />
<directive
android:resourceName="@id/et_password"
android:inputValue="password123" />
<directive
android:resourceName="@id/btn_login"
android:clickAction="CLICK" />
</robo-directives>
Testy robotowe nie zastępują testowania ręcznego i napisanych testów instrumentalnych dla złożonych scenariuszy. Robot nie potrafi sprawdzać logiki biznesowej: klika wszystkie elementy po kolei, ale nie wie, czy wynik jest prawidłowy. Robot nie może również wchodzić w interakcje z niestandardowymi widokami, które nie dziedziczą po standardowych ViewGroup, i nie obsługuje WebView. W tych przypadkach należy stosować testy instrumentalne lub Game loop.
Integracja Firebase Test Lab z systemami CI/CD umożliwia automatyczne uruchamianie testów przy każdym pushu do repozytorium. Test Lab obsługuje zadania Gradle dla Androida i Fastlane dla obu platform. Konfiguracja potoku CI/CD obejmuje zbudowanie aplikacji, przesłanie APK/IPA do Google Cloud Storage, uruchomienie testów przez Firebase CLI i odbiór raportów z powrotem do systemu CI w celu wyświetlenia statusu budowania.
Google udostępnia wtyczkę gcloud-test-lab dla Gradle, która automatyzuje przesyłanie i uruchamianie testów. Zadanie assembleAndroidTest buduje APK z testami, a zadania gcloud przesyłają je do Test Lab i uruchamiają macierz. Wyniki testów są zwracane do Gradle jako pass/fail, co umożliwia integrację Test Lab z dowolnym potokiem CI obsługującym Gradle. Do autoryzacji używane jest konto serwisowe Firebase z uprawnieniami do Test Lab.
// build.gradle (module: app)
task runTestLab() {
exec {
commandLine "gcloud", "firebase", "test", "android", "run",
"--type", "robo",
"--app", "build/outputs/apk/debug/app-debug.apk",
"--device", "model=Pixel7,version=33",
"--device", "model=GalaxyS23,version=34",
"--device", "model=RedmiNote12,version=31",
"--timeout", "15m",
"--results-dir", "firebase/test-lab/robo"
}
}
Fastlane udostępnia wtyczkę firebase_test_lab do integracji z testami iOS i Android. Fastlane lane wykonuje budowanie, uruchamia testy i przetwarza wyniki. Dla iOS XCTest Test Lab wymaga pliku xctestrun, który jest tworzony automatycznie podczas budowania celu testowego. Fastlane umożliwia również przesyłanie wyników testów do Slacka lub innych komunikatorów w celu powiadomienia zespołu o statusie testowania po każdym uruchomieniu.
Po zakończeniu testów Firebase Test Lab udostępnia kompleksowy raport dostępny w Firebase Console i przez gcloud CLI. Raport zawiera krótkie podsumowanie (liczba testów zaliczonych, nieudanych i pominiętych), szczegółowe informacje o każdym teście na każdym urządzeniu, wideo przejścia, zrzuty ekranu kluczowych kroków i logi urządzenia (logcat dla Androida, system log dla iOS). Dla nieudanych testów dostępny jest stack trace ze wskazaniem dokładnego miejsca błędu.
Dla testu robotowego raport różni się od instrumentalnego: zamiast pass/fail dla przypadków testowych raport pokazuje statystyki badania. Kluczowe metryki — liczba znalezionych i odwiedzonych ekranów, liczba interakcji robota (kliknięcia, przesunięcia, wprowadzanie tekstu), wykryte crash'e i ANR oraz przebyta ścieżka przez aplikację. Wideo przejścia robota pozwala wizualnie ocenić, które ekrany zostały przetestowane, a które pozostały nieprzeanalizowane.
Wyniki testów są przechowywane w Google Cloud Storage w bucket przypisanym do projektu. Dane są dostępne do eksportu i integracji z zewnętrznymi systemami analitycznymi. Do długoterminowego przechowywania i porównywania wyników między uruchomieniami zaleca się skonfigurowanie eksportu BigQuery lub użycie Firebase Test Lab API do programowego pobierania wyników. Google umożliwia pobranie archiwum ZIP z pełnym zestawem wyników dla każdego uruchomienia testów.
Często zadawane pytania
Plan Spark obejmuje 10 testów Robo dziennie i 5 godzin testów instrumentalnych miesięcznie za darmo. Plan Blaze jest taryfikowany według czasu: ~1 USD za urządzenie-godzinę dla testów Robo i ~5 USD dla instrumentalnych. Dokładna cena zależy od regionu i typu urządzenia.
Fizyczne urządzenia zapewniają dokładniejsze wyniki, w tym problemy z czujnikami, aparatem, GPS, Bluetooth i rzeczywistą wydajnością. Emulatory uruchamiają się szybciej i są tańsze, ale nie wykrywają problemów związanych ze specyfiką sprzętu. Google zaleca fizyczne urządzenia do testowania przedpremierowego.
Utwórz plik XML robo_directives.xml z polami do wprowadzenia (login, hasło) i przyciskami do naciśnięcia. Prześlij plik wraz z APK podczas uruchamiania testu przez Firebase Console lub CLI. Robot wykona określone czynności przed rozpoczęciem badania.
Tak, Firebase Test Lab obsługuje iOS od 2024 roku. Dostępne są testy Robo (automatyczne badanie) i XCTest (testy instrumentalne) na rzeczywistych urządzeniach iPhone i iPad. Do przesłania wymagany jest plik IPA z celem testowym.
Użyj Firebase CLI w GitHub Actions: skonfiguruj uwierzytelnianie przez Service Account JSON, zainstaluj gcloud SDK, wykonaj polecenie firebase test android run z podaniem APK i konfiguracji. Wyniki testów są dostępne przez Firebase Console lub gcloud CLI.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również