Check out what’s new from Firebase at Google I/O 2022. Learn more

Zacznij od testów oprzyrządowania

W tym przewodniku opisano, jak przygotować i uruchomić test oprzyrządowania za pomocą Laboratorium Firebase. Aby skorzystać z tego przewodnika, będziesz potrzebować testu oprzyrządowania (napisanego przez Ciebie lub Twój zespół), który wykorzystuje frameworki testowe Espresso lub UI Automator dla systemu Android. Testy oprzyrządowania mogą trwać do 45 minut na urządzeniach fizycznych i do 60 minut na urządzeniach wirtualnych .

W kolejnych krokach prześlesz plik APK swojej aplikacji i plik APK testu do Firebase.

(Opcjonalnie) Dodaj bibliotekę zrzutów ekranu do swojej aplikacji

Firebase Test Lab zawiera bibliotekę (testlab-instr-lib), której można używać do przetwarzania dowolnych zrzutów ekranu zrobionych za pomocą ScreenCapture systemu AndroidX podczas przeprowadzania testów oprzyrządowania, takich jak testy napisane przy użyciu platformy testowej Espresso . W tej sekcji opisano, jak tworzyć obiekty ScreenCapture za pomocą biblioteki AndroidX i jak je przetwarzać za pomocą testlab-instr-lib.

Po uruchomieniu testu oprzyrządowania możesz wyświetlić przechwycone zrzuty ekranu w konsoli Firebase.

Wypróbuj przykładową aplikację

Pobierz przykładową aplikację Notatnik, aby wypróbować tę funkcję. Możliwość robienia zrzutów ekranu jest już włączona do projektu NotePad.

Krok 1. Dodaj bibliotekę zrzutów ekranu do swojego projektu

  1. W pliku Gradle na poziomie głównym (na poziomie projektu) projektu testowego ( build.gradle ) dodaj repozytorium Google Maven do każdej sekcji repozytoriów:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. W pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle ) dodaj zależność dla biblioteki zrzutów ekranu Test Lab.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2'
      // ...
    }
  3. W pliku AndroidManifest.xml testu zarejestruj FirebaseScreenCaptureProcessor w tagu metadanych w elemencie <instrumentation> . Możesz również określić procesor jako argument w AndroidJUnitRunner (zobacz dokumentację referencyjną AndroidJUnitRunner, aby uzyskać instrukcje, jak to zrobić).

    <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>
    ...
    
  4. W pliku AndroidManifest.xml aplikacji dodaj następujące wiersze w elemencie <manifest> :

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. W pliku AndroidManifest.xml określ uprawnienia systemowe aplikacji, dodając następujące wiersze w tagu <manifest> . Jeśli testujesz na Androidzie 10 (poziom API 29) lub nowszym , pomiń uprawnienie WRITE_EXTERNAL_STORAGE (Twoja aplikacja nie wymaga tego uprawnienia do odczytywania i zapisywania 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. Zrób zrzuty ekranu podczas testu

W dowolnym momencie testu, w którym chcesz zrobić zrzut ekranu, wywołaj metodę Screenshot.capture() z biblioteki AndroidX. Daje to obiekt ScreenCapture . Gdy wywołujesz process() w obiekcie ScreenCapture , jest on przetwarzany przy użyciu ScreenCaptureProcessor , który jest zarejestrowany w Twoim AndroidManifest.xml . Należy zauważyć, że BasicScreenCaptureProcessor jest używany, jeśli nie zarejestrowano żadnych procesorów. Ponieważ zarejestrowałeś FirebaseScreenCaptureProcessor , Twoje zrzuty ekranu będą przetwarzane przez FirebaseScreenCaptureProcessor i będą dostępne wraz z wynikami po uruchomieniu testu w Firebase Test Lab.

Przykładowe przypadki użycia do tworzenia ScreenCapture :

  • Zrób pełny ScreenCapture na API Build.VERSION_CODES.JELLY_BEAN_MR2 i nowszym:

    Screenshot.capture()
    
  • Zrób ScreenCapture aktywności na dowolnym poziomie interfejsu API. Pamiętaj, że jest to jedyna opcja dla urządzeń poniżej wersji Build.VERSION_CODES.JELLY_BEAN_MR2.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Przykładowe przypadki użycia do przetwarzania ScreenCapture

  • Przetwórz zrzut FirebaseScreenCaptureProcessor ScreenCapture

    Screenshot.capture().process();
    
  • Przetwórz ScreenCapture za pomocą określonego ScreenCaptureProcessor (pozwala to pominąć rejestrację procesora):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Ustaw nazwę i format ScreenCapture i przetwórz go za pomocą zarejestrowanego procesora:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

Krok 3. Zbuduj i uruchom test

  1. Utwórz swoją aplikację i przetestuj pakiety APK (instrukcje znajdziesz w sekcji Testowanie aplikacji ).

  2. Prześlij pliki APK do panelu Test Lab w konsoli Firebase.

  3. Na koniec uruchom test.

Krok 4. Wyświetl zrzuty ekranu z testu

Po zakończeniu testu możesz wyświetlić zrzuty ekranu zrobione w konsoli Firebase.

  1. Na karcie Testy wybierz ukończony test, a następnie kliknij kartę Wyniki .

  2. Wybierz test ponownie, a następnie kliknij wyświetloną kartę Zrzuty ekranu .

(Opcjonalnie) Włącz dodatkowe funkcje testowe

Możesz włączyć w teście następujące funkcje przed uruchomieniem go w laboratorium testowym:

Włącz Orchestrator

Android Test Orchestrator to narzędzie, które niezależnie uruchamia każdy z testów oprzyrządowania aplikacji. Test Lab zawsze używa najnowszej wersji programu Orchestrator.

Aby włączyć program Orchestrator for Test Lab, w ustawieniach testu oprzyrządowania kliknij Opcje dodatkowe > Uruchom z programem Orchestrator .

Zalety i wady

  • Korzyść: brak wspólnego stanu. Każdy test jest uruchamiany we własnym wystąpieniu instrumentacji, więc stan udostępniony nie jest kumulowany między testami.
  • Korzyści: Pojedyncze awarie. Jeśli test ulegnie awarii, tylko to oprzyrządowanie zostanie zakończone, a inne testy w pakiecie nadal będą działać.
  • Wada: Dłuższe czasy pracy . Każdy test uruchamia własne wystąpienie oprzyrządowania, co oznacza, że ​​proces testowania trwa ogólnie nieco dłużej. Jeśli nie jest zaznaczone, wydłużone czasy działania mogą potencjalnie wpłynąć na wykorzystanie limitu lub naliczany czas i mogą spowodować przekroczenie limitu czasu urządzeń .

Włącz sharding

Fragmentacja testów dzieli zestaw testów na podgrupy (odłamki), które są uruchamiane osobno i oddzielnie. Test Lab automatycznie uruchamia każdy fragment równolegle na wielu urządzeniach i wykonuje cały zestaw testów w krótszym czasie.

Jak działa testowe sharding

Załóżmy, że tworzysz N odłamków. Dla każdego wybranego urządzenia Test Lab uruchamia N identycznych urządzeń i przeprowadza podzbiór testów na każdym urządzeniu. Oznacza to, że przypadki testowe podzielone na fragmenty mogą skutkować wykonaniem wielu testów na urządzenie, w przeciwieństwie do przypadków testowych niepodzielonych na fragmenty, które zawsze skutkują wykonaniem jednego testu na urządzenie (aby uzyskać szybki przegląd kluczowych pojęć w laboratorium testowym, zobacz Kluczowe pojęcia ).

Możesz włączyć testowe fragmentowanie w konsoli Firebase:

  1. W konfiguracji testu oprzyrządowania kliknij Opcje dodatkowe .

  2. W sekcji Sharding wprowadź liczbę fragmentów, które chcesz uruchomić.

Rozliczenia za odłamki testowe

Test Lab implementuje Twoje fragmenty, wykorzystując wbudowany mechanizm fragmentowania AndroidJUnitRunner. Aby uniknąć opłat za uruchamianie pustych fragmentów (odłamkó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 uruchomienia każdego przypadku testowego zazwyczaj dobrym pomysłem jest przypisanie 2-10 przypadków testowych na fragment.

Aby uzyskać więcej informacji na temat rozliczeń, przeczytaj Użycie, limity i rozliczenia .