Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Zacznij od testów oprzyrządowania

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

W tym przewodniku opisano, jak przygotować i przeprowadzić test instrumentacji za pomocą Firebase Test Lab. Aby skorzystać z tego przewodnika, potrzebujesz testu oprzyrządowania (napisanego przez Ciebie lub Twój zespół), który korzysta ze środowiska testowego Espresso lub UI Automator 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żesz użyć do przetwarzania zrzutów ekranu zrobionych za pomocą ScreenCapture 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 instrumentacji 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) (zazwyczaj 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 proces FirebaseScreenCaptureProcessor w tagu metadanych w elemencie <instrumentation> . Zamiast tego możesz również określić procesor jako argument w AndroidJUnitRunner (zobacz dokumentację referencyjną AndroidJUnitRunner, aby dowiedzieć się, 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 dla swojej aplikacji, dodając następujące wiersze w tagu <manifest> . Jeśli testujesz na Androidzie 10 (poziom interfejsu API 29) lub nowszym , pomiń uprawnienie WRITE_EXTERNAL_STORAGE (Twoja aplikacja nie wymaga tego pozwolenia, aby odczytywać i zapisywać zrzuty 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. Spowoduje to utworzenie obiektu ScreenCapture . Wywołanie metody process() na obiekcie ScreenCapture powoduje jego przetworzenie przy użyciu metody ScreenCaptureProcessor zarejestrowanej w 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 :

  • Wykonaj pełny zrzut ekranu na interfejsie API Build.VERSION_CODES.JELLY_BEAN_MR2 i nowszym:

    Screenshot.capture()
    
  • Wykonaj ScreenCapture działania na dowolnym poziomie interfejsu API. Pamiętaj, że jest to jedyna opcja dla urządzeń poniżej 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 przechwytywanie 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 je przy użyciu zarejestrowanego procesora:

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

Krok 3. Zbuduj i uruchom test

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

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

  3. Na koniec uruchom test.

Krok 4. Wyświetl zrzuty ekranu z testów

Po zakończeniu testu możesz wyświetlić wykonane zrzuty ekranu 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ć następujące funkcje w swoim teście przed uruchomieniem go w Test Lab:

Włącz Orchestratora

Android Test Orchestrator to narzędzie, które niezależnie przeprowadza testy oprzyrządowania aplikacji. Test Lab zawsze używa najnowszej wersji programu Orchestrator.

Aby włączyć program Orchestrator for Test Lab, w konfiguracji testu Instrumentacji kliknij opcję Dodatkowe opcje > Uruchom z programem Orchestrator .

Korzyści i wady

  • Korzyści: Brak współdzielonego stanu. Każdy test jest uruchamiany we własnym wystąpieniu Instrumentacji, więc stan udostępniony nie kumuluje się między testami.
  • Korzyści: Pojedyncze awarie. Jeśli test ulegnie awarii, tylko ta instrumentacja zostanie zakończona, a inne testy w pakiecie mogą nadal działać.
  • Wada: Dłuższe czasy działania . Każdy test uruchamia własną instancję instrumentacji, co oznacza, że ​​proces testowania trwa ogólnie nieco dłużej. Jeśli nie zaznaczysz tego, wydłużony czas działania może potencjalnie wpłynąć na wykorzystanie miejsca lub rozliczony czas i może spowodować przekroczenie limitów czasu działania urządzeń .

Włącz sharding

Podział testów na fragmenty dzieli zestaw testów na podgrupy (fragmenty), które są uruchamiane oddzielnie w izolacji. Test Lab automatycznie uruchamia każdy fragment równolegle przy użyciu wielu urządzeń i wykonuje cały zestaw testów w krótszym czasie.

Jak działa fragmentacja testów

Załóżmy, że tworzysz N fragmentó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ć wieloma wykonaniami testów na urządzenie, w przeciwieństwie do przypadków testowych niedzielonych na fragmenty, które zawsze skutkują jednym wykonaniem testu na urządzenie (szybki przegląd kluczowych pojęć w Laboratorium testowym, zobacz Kluczowe pojęcia ).

Możesz włączyć fragmentację testów w konsoli Firebase:

  1. W konfiguracji testu oprzyrządowania kliknij opcję Dodatkowe opcje .

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

Rozliczanie za fragmenty testowe

Test Lab implementuje Twoje shardy, wykorzystując wbudowany mechanizm shardingu AndroidJUnitRunner. Aby uniknąć naliczania opłat za obracanie pustych fragmentów (fragmentów bez przypisanych przypadków testowych), liczba tworzonych fragmentów powinna być mniejsza niż łączna liczba przypadków testowych. W zależności od tego, jak długo trwa uruchamianie każdego przypadku testowego, zwykle dobrym pomysłem jest przypisanie 2-10 przypadków testowych na fragment.

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