Z tego przewodnika dowiesz się, jak przygotować i przeprowadzić test instrumentacji za pomocą Firebase Test Lab. Aby skorzystać z tego przewodnika, musisz przygotować test instrumentu (tworzony przez Ciebie lub Twój zespół), który wykorzystuje platformy testowe Espresso lub UI Automator Android. Testy z instrumentacją mogą trwać do 45 minut na urządzeniach fizycznych i do 60 minut na urządzeniach wirtualnych.
Później możesz przesłać do Firebase plik APK aplikacji i plik APK testu.
(Opcjonalnie) Dodawanie biblioteki zrzutów ekranu do aplikacji
Firebase Test Lab zawiera bibliotekę (testlab-instr-lib), która umożliwia przetwarzanie zrzutów ekranu zrobionych za pomocą funkcji ScreenCapture w AndroidzieX podczas wykonywania testów z instrumentacją, takich jak testy napisane za pomocą platformy testowej Espresso.
Z tej sekcji dowiesz się, jak tworzyć obiekty ScreenCapture
za pomocą biblioteki AndroidaX i jak przetwarzać je za pomocą testlab-instr-lib.
Po zakończeniu testu instrumentacji możesz wyświetlić zarejestrowane zrzuty ekranu w konsoli Firebase.
Wypróbuj przykładową aplikację
Aby wypróbować tę funkcję, pobierz przykładową aplikację NotePad. Projekt NotePad umożliwia już wykonywanie zrzutów ekranu.
Krok 1. Dodawanie biblioteki zrzutów ekranu do projektu
W pliku Gradle na poziomie głównym projektu testowego (
settings.gradle.kts
lubsettings.gradle
) dodaj repozytorium Google Maven do każdej sekcjirepositories
:pluginManagement { repositories { // Add the following line: google() // Google's Maven repository mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // Add the following line: google() // Google's Maven repository mavenCentral() } } // ...
W pliku Gradle modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
) dodaj zależność z biblioteką Test Lab do tworzenia zrzutów ekranu.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
W pliku
AndroidManifest.xml
testu zarejestruj tag metadanychFirebaseScreenCaptureProcessor
w elemencie<instrumentation>
. Zamiast tego możesz podać procesor jako argument w AndroidJUnitRunner (szczegółowe instrukcje znajdziesz w dokumentacji AndroidJUnitRunner).<instrumentation // Check that you have the following line (if not, add it): android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner android:targetPackage="com.your.package.name"> // Add the following: <meta-data android:name="screenCaptureProcessors" android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" /> </instrumentation> ...
W pliku
AndroidManifest.xml
aplikacji dodaj te wiersze w elemencie<manifest>
:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
W pliku
AndroidManifest.xml
określ uprawnienia systemowe aplikacji, dodając te wiersze w tagu<manifest>
. Jeśli testujesz urządzenie na Androidzie 10 (poziom interfejsu API 29) lub nowszym, pomiń uprawnienieWRITE_EXTERNAL_STORAGE
(Twoja aplikacja nie wymaga tego uprawnienia do odczytu i zapisu zrzutów ekranu na urządzeniu).<manifest ... > <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
Krok 2. Wykonywanie zrzutów ekranu podczas testu
W dowolnym momencie testu, w którym chcesz zrobić zrzut ekranu, wywołaj metodę
Screenshot.capture()
z biblioteki AndroidX. Spowoduje to utworzenie obiektu ScreenCapture
.
Gdy wywołasz funkcję process()
obiektu ScreenCapture
, jest on przetwarzany za pomocą zarejestrowanego w obiekcie AndroidManifest.xml
komponentu ScreenCaptureProcessor. Pamiętaj, że jeśli nie zarejestrowano żadnych procesorów, jest używany BasicScreenCaptureProcessor
.
Ponieważ zarejestrowałeś(-aś) domenę FirebaseScreenCaptureProcessor
, zrzuty ekranu będą przetwarzane przez FirebaseScreenCaptureProcessor
. Wyniki będą dostępne po uruchomieniu testu w aplikacji Firebase Test Lab.
Przykładowe przypadki użycia podczas tworzenia ScreenCapture
:
Wykonaj pełny zrzut ekranu w kompilacji API.VERSION_CODES.JELLY_BEAN_MR2 lub więcej:
Screenshot.capture()
ScreenCapture
aktywności na dowolnym poziomie interfejsu API. Pamiętaj, że jest to jedyna opcja na urządzeniach z wersją Build.VERSION_CODES.JELLY_BEAN_MR2 i starszą.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
Przykłady użycia zrzutu ekranu
Przetwarzanie
ScreenCapture
w usłudzeFirebaseScreenCaptureProcessor
:Screenshot.capture().process();
Przetwarzanie
ScreenCapture
za pomocą określonegoScreenCaptureProcessor
(umożliwia pominięcie rejestracji procesora):Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);
Ustaw nazwę i format karty
ScreenCapture
i przetwórz ją za pomocą zarejestrowanego podmiotu przetwarzającego:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
Krok 3. Tworzenie i uruchamianie testu
Utwórz aplikację i przetestuj pliki APK (aby uzyskać instrukcje, zapoznaj się z artykułem Testowanie aplikacji).
Prześlij pliki APK do panelu Test Lab w konsoli Firebase.
Na koniec przeprowadź test.
Krok 4. Wyświetlanie testowych zrzutów ekranu
Po zakończeniu testu wszystkie zrzuty ekranu możesz wyświetlić w konsoli Firebase.
Na karcie Testy wybierz ukończony test, a następnie kliknij kartę Wyniki.
Ponownie wybierz test i kliknij kartę Zrzuty ekranu, która się wyświetli.
(Opcjonalnie) Włącz dodatkowe funkcje testów
Zanim uruchomisz test za pomocą Test Lab, możesz włączyć w nim te funkcje:
Włączanie aranżera
Android Test Analysistor to narzędzie, które niezależnie uruchamia testy instrumentacji aplikacji. Test Lab zawsze korzysta z najnowszej wersji Orchestratora.
Aby włączyć narzędzie Sessiontor dla aplikacji Test Lab, w konfiguracji testu instrumentu kliknij Dodatkowe opcje > Uruchom za pomocą narzędzia Jako narzędzie.
Korzystając z Orchestratora, możesz:
- Brak udostępnionego stanu. Każdy test jest uruchamiany we własnej instancji instrumentu, więc wspólny stan nie kumuluje się w ramach testów.
- Pojedyncze awarie. W przypadku awarii testowej tylko to narzędzie zostanie zakończone, a inne testy pakietu będą wciąż działać.
Pamiętaj, że podczas korzystania z usługi Orchestrator każdy test uruchamia własny egzemplarz narzędzia do pomiaru wydajności, co oznacza, że proces aplikacji jest ponownie uruchamiany po każdym teście. Wydłużone czasy działania mogą mieć wpływ na wykorzystanie limitu lub czas rozliczeń i przekroczenie limitów czasu oczekiwania urządzeń. Jeśli skrócisz czas uruchamiania aplikacji, ten czas będzie krótszy.
Aby ustawić dodatkowe opcje dla Orchestratora, określ je w polu environmentVariables
. Aby na przykład użyć funkcji clearPackageData
, użyj tej opcji w gcloud:
--environment-variables clearPackageData=true
Włączanie podziału na fragmenty
Testowanie z użyciem podziału dzieli zestaw testów na podgrupy (fragmenty), które są uruchamiane osobno. Test Lab automatycznie wykonuje każdy fragment równolegle na wielu urządzeniach i kończy cały zestaw testów w krótszym czasie.
Jeśli na przykład utworzysz N fragmentów, dla każdego wybranego urządzenia Test Lab uruchomi N identycznych urządzeń i na każdym z nich uruchomi podzbiór testów. Oznacza to, że podział przypadków testowych może spowodować wielokrotne wykonanie testu na jednym urządzeniu. Niedzielone przypadki testowe dają jednak w wyniku jedno wykonanie testu na urządzenie. Aby dowiedzieć się więcej o koncepcjach Test Lab, przeczytaj artykuł Najważniejsze pojęcia.
Aby włączyć testowe dzielenie na segmenty w konsoli Firebase:
W konfiguracji testu według pomiarów kliknij Dodatkowe opcje.
W sekcji Dzielenie na fragmenty wpisz liczbę fragmentów, które chcesz uruchomić.
Rozliczenia za fragmenty testowe
Test Lab wdraża fragmenty, korzystając z wbudowanego mechanizmu podziału AndroidJUnitRunner. Aby uniknąć opłat za uruchamianie pustych fragmentów (fragmentów bez przypisanych przypadków testowych), liczba utworzonych fragmentów powinna być mniejsza niż łączna liczba przypadków testowych. W zależności od czasu trwania poszczególnych przypadków testowych warto przypisać 2–10 przypadków testowych do każdego fragmentu.
Więcej informacji o rozliczeniach znajdziesz w artykule Wykorzystanie, limity i rozliczenia.