Rozpoczynanie testowania za pomocą gcloud CLI

Ten przewodnik opisuje, jak uruchomić test instrumentacji, test Robo lub test pętli gry za pomocą gcloud CLI.

Pełną listę poleceń gcloud, których możesz używać w aplikacji na Androida w Test Lab, znajdziesz w dokumentacji referencyjnej gcloud firebase test android.

Zanim zaczniesz

Jeśli jeszcze tego nie zrobiono, dodaj Firebase do projektu na Androida.

Krok 1. Konfigurowanie gcloud CLI

  1. Pobierz pakiet Google Cloud SDK.
  2. Obejmuje to narzędzie gcloud CLI.

  3. Sprawdź, czy instalacja jest aktualna:
    gcloud components update
    
  4. Zaloguj się w gcloud CLI za pomocą konta Google:
    gcloud auth login
    
  5. Skonfiguruj projekt Firebase w gcloud, gdzie PROJECT_ID to identyfikator projektu Firebase:
    gcloud config set project PROJECT_ID
    

Krok 2. Sprawdzanie dostępnych urządzeń testowych

Aby wyświetlić urządzenia testowe i lokalizacje dostępne w przypadku testu, użyj tych poleceń gcloud.

Opcjonalnie możesz też pobrać przykładową aplikację Notatnik, aby od razu zacząć uruchamiać polecenia. Użyj pliku binarnego app-debug-unaligned.apk i pliku testów pomiarowych app-debug-test-unaligned.apk, które znajdują się w folderze NotePad/app/build/outputs/apk/.

  • models list: uzyskaj aktualną listę urządzeń z Androidem, na których możesz przeprowadzić testy.

    gcloud firebase test android models list
    

    W wyniku polecenia:

    • Kolumna MODEL_ID zawiera identyfikator, którego możesz później używać do uruchamiania testów na modelu urządzenia.
    • Kolumna OS_VERSION_ID zawiera wersje systemu operacyjnego obsługiwane przez urządzenie.

    Przykładowe dane wyjściowe

    gcloud firebase test android models list dane wyjściowe

  • models describe: uzyskaj więcej informacji o określonym urządzeniu z Androidem MODEL_ID.

    gcloud firebase test android models describe MODEL_ID
    

    Dane wyjściowe zawierają markę, producenta, wersje systemu operacyjnego, obsługiwane poziomy interfejsu API, obsługiwane interfejsy binarne aplikacji (ABI), daty wydania oraz informacje o tym, czy urządzenie jest fizyczne, czy wirtualne.

  • versions list: uzyskaj listę obecnie dostępnych wersji systemu operacyjnego, na których możesz przeprowadzić testy.

    gcloud firebase test android versions list
    

    Aby później przeprowadzać testy na wersji systemu operacyjnego Android, możesz użyć identyfikatora z jednej z 2 pierwszych kolumn danych wyjściowych polecenia (OS_VERSION_IDVERSION). Jeśli nie określisz wersji systemu operacyjnego Android, na których chcesz przeprowadzić test, zostanie użyta wersja domyślna wskazana w kolumnie TAGS.

    Przykładowe dane wyjściowe

    gcloud android versions list

  • locales list: uzyskaj aktualną listę języków, na których możesz przeprowadzić test.

    gcloud firebase test android versions list
    

    Pierwsza kolumna danych wyjściowych polecenia, LOCALE, zawiera identyfikator, którego możesz użyć do przeprowadzenia testów w danym regionie. Jeśli nie określisz języków, na których chcesz przeprowadzić test, jako domyślny język zostanie użyty angielski.

Krok 3. Przeprowadzanie testu

Teraz, gdy znasz zakres modeli urządzeń, lokalizacji i wersji systemu operacyjnego dostępnych do testowania aplikacji, możesz określić urządzenia za pomocą polecenia gcloud firebase test android run i flagi --device, aby uruchomić testy Robo lub testy inkrementalne.

Przeprowadź test Robo

Nawet jeśli nie masz żadnych testów pomiarowych, nadal możesz szukać błędów w aplikacji. Użyj testu Robo, aby przeprowadzić automatyczną kontrolę interfejsu użytkownika aplikacji. Test robota testuje aplikację, wykonując statyczną analizę różnych ścieżek w interfejsie użytkownika, a następnie indeksuje aplikację, aby znaleźć awarie i inne potencjalne problemy.

Aby uruchomić test Robo, uruchom to przykładowe polecenie:

gcloud firebase test android run \
  --type robo \
  --app app-debug-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape \
  --timeout 90s \
  --client-details matrixLabel="Example matrix label"
  • Jeśli nie podasz wartości parametru --type, parametr --type robo będzie używany domyślnie.
  • Aby ułatwić sobie identyfikację i lokalizowanie w konsoli Firebase macierzy testowych, możesz użyć opcjonalnego flagi --client-details matrixLabel="Example matrix label", aby oznaczyć matrycę testową.
  • Aby wyświetlić pełny zestaw opcji wiersza poleceń do uruchamiania testów, wpisz: gcloud help firebase test android run.

Zamiast podawać te argumenty w wierszu poleceń, możesz opcjonalnie podać je w pliku argumentów w formacie YAML. Uruchom gcloud topic arg-files, aby dowiedzieć się, jak korzystać z tej funkcji.

Aby dowiedzieć się, jak analizować wyniki testu Robo, przeczytaj artykuł Analiza wyników testu.

Uruchom test narzędzi

Teraz użyj narzędzia wiersza poleceń gcloud, aby uruchomić testy Espresso aplikacji Notatnika na określonych konfiguracjach urządzenia z Androidem. Aby uruchomić testy w app-debug-test-unaligned.apk, użyj typu testu instrumentation w ten sposób:

gcloud firebase test android run \
  --type instrumentation \
  --app app-debug-unaligned.apk \
  --test app-debug-test-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape
  --client-details matrixLabel="Example matrix label"
  • Jeśli z użyciem parametru --test zostanie określony testowy plik APK, parametr instrumentacji --type będzie domyślny.
  • Aby ułatwić sobie identyfikowanie i lokalizowanie testowych tablic w konsoli Firebase, możesz użyć opcjonalnego flagi --client-details matrixLabel="Example matrix label", aby oznaczyć testową tablicę.
  • Aby wyświetlić pełny zestaw opcji wiersza poleceń do uruchamiania testów, wpisz gcloud help firebase test android run.

Zamiast podawać te argumenty w wierszu poleceń, możesz opcjonalnie podać je w pliku argumentów w formacie YAML. Uruchom gcloud topic arg-files, aby dowiedzieć się, jak korzystać z tej funkcji.

gcloud CLI obsługuje Android Test Orchestrator. Orchestrator wymaga wersji AndroidJUnitRunner 1.1 lub nowszej. Aby ją włączyć, użyj flagi gcloud firebase test android run z wartością
--use-orchestrator. Aby ją wyłączyć, użyj flagi --no-use-orchestrator.

Możesz też kontrolować sposób, w jaki Test Lab uruchamia testy instrumentacji, za pomocą dodatkowych flag, które nie są wymienione powyżej. Możesz na przykład użyć flagi --test-targets, aby przetestować pojedynczą klasę lub metodę klasy używaną przez testowy plik APK. Możesz też sprawdzić, czy test, który się nie powiódł, był niestabilny, czy nie, za pomocą flagi --num-flaky-test-attempts, która określa liczbę prób ponownego uruchomienia testu, jeśli co najmniej 1 przypadek testowy nie powiedzie się z jakiegokolwiek powodu. Więcej informacji znajdziesz w artykule gcloud firebase test android run.

Raporty dotyczące pokrycia kodu w przypadku testów instrumentacji

Test Lab obsługuje narzędzia do raportowania pokrycia kodu: EMMAJaCoCo. Jeśli masz jedno z tych narzędzi zintegrowane z kompilacją aplikacji, możesz uzyskać raport o zasięgu kodu w przypadku testów Test Lab, uruchamiając gcloud firebase test android run z dodatkowymi argumentami. Jeśli Android Test Orchestrator nie jest włączony, wykonaj te czynności:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \
  --directories-to-pull /sdcard/Download

Jeśli generujesz raporty pokrycia kodu, korzystając jednocześnie z Android Test Orchestrator, zmień zmienne środowiskowe w ten sposób:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \
  --directories-to-pull /sdcard/Download

Gdy Test Lab zakończy wykonywanie testów, sprawdź raporty o zakresie testowania kodu w Google Cloud Storage:

  1. Otwórz link do konsoli Firebase, który narzędzie gcloud wydrukowało nad tabelą wyników testu w terminalu.
  2. Kliknij na liście pod tym linkiem testowe wykonanie, aby otworzyć jego stronę z informacjami.
  3. Kliknij Wyniki testu, aby przejść do zasobnika Cloud Storage z wynikami testu z tego wykonania.
  4. Otwórz artifacts/coverage.ec, aby wyświetlić raport o zasięgu kodu.

Analizowanie wyników testu

Po kilku minutach narzędzie gcloud wydrukuje podstawowe podsumowanie wyników testu:

Wyniki testu polecenia

Dane wyjściowe testu przeprowadzonego z poziomu wiersza poleceń zawierają też link do wyświetlenia wyników. Więcej informacji o interpretowaniu tych wyników znajdziesz w artykule Analizowanie wyników Firebase Test Lab w przypadku wyników na urządzeniach z Androidem.

Logowanie z użyciem danych niestandardowych i pole tekstowe w teście Robo

Test Robo automatycznie wypełnia ekrany logowania, które używają konta Google do uwierzytelniania, chyba że użyjesz parametru --no-auto-google-login. Może też wypełniać niestandardowe ekrany logowania za pomocą podanych przez Ciebie danych logowania do konta testowego. Możesz też użyć tego parametru, aby podać niestandardowy tekst wprowadzania danych w innych polach tekstowych używanych przez aplikację.

Aby wypełnić pola tekstowe w aplikacji, użyj parametru --robo-directives i podaj listę par key-value rozdzielonych przecinkami, gdzie key to nazwa zasobu Androida dla docelowego elementu interfejsu, a value to ciąg tekstowy. Możesz też użyć tego parametru, aby Robo ignorowało określone elementy interfejsu użytkownika (np. przycisk „Wyloguj się”). Obsługiwane są pola EditText, ale nie pola tekstowe w elementach interfejsu WebView.

Możesz na przykład użyć tego parametru do logowania niestandardowego:

--robo-directives username_resource=username,password_resource=password

Dostępne polecenia i flagi

Interfejs wiersza poleceń gcloud Test Lab zawiera kilka poleceń i flag, które umożliwiają uruchamianie testów z różnymi specyfikacjami:

  • Flaga Android Test Orchestrator: flaga umożliwiająca Orchestrator, czyli narzędzie, które pozwala uruchamiać poszczególne testy aplikacji w ramach własnych wywołań Instrumentation. Test Lab zawsze działa w ramach najnowszej wersji Orchestratora.

  • Flagi testów pętli gry: Zestaw flag konfiguracji, które umożliwiają włączanie i sterowanie „demo mode” w celu symulowania działań gracza w aplikacjach z grami. Dowiedz się więcej o przeprowadzaniu testów pętli gry za pomocą Test Lab.

  • Flaga jednolitego dzielenia na fragmenty (w wersji beta): flaga, która określa liczbę fragmentów, na które chcesz równomiernie rozłożyć przypadki testowe. Fragmenty są wykonywane równolegle na osobnych urządzeniach.

    .

  • Flaga ręcznego dzielenia na części (w wersji beta): flaga, która określa grupę pakietów, klas lub przypadków testowych do uruchomienia w części (grupie przypadków testowych). Fragmenty są uruchamiane równolegle na różnych urządzeniach.

  • Flaga profili ruchu w sieci (w wersji beta): flaga określająca, którego profilu sieci używają testy na urządzeniach fizycznych. Profile sieci emulują różne warunki sieciowe, dzięki czemu możesz testować działanie aplikacji w niepewnych lub nieprzewidywalnych sieciach.

Pisanie skryptów poleceń gcloud za pomocą Test Lab

Możesz użyć skryptów powłoki lub plików wsadowych, aby zautomatyzować polecenia testowania aplikacji mobilnej, które w przeciwnym razie uruchamia się w wierszu poleceń gcloud. Ten przykładowy skrypt basha przeprowadza test z instrumentacją z czasem oczekiwania wynoszącym 2 minuty i zgłasza, czy test został ukończony:

if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

Kody wyjścia skryptu

Test Lab udostępnia kilka kodów zakończenia, które możesz wykorzystać, aby lepiej zrozumieć wyniki testów uruchamianych za pomocą skryptów lub plików zbiorczych.

Kody wyjścia w skryptach w przypadku Test Lab

Kod wyjścia Uwagi
0 Wszystkie wykonania testu zostały zaliczone.
1 Wystąpił ogólny błąd. Możliwe przyczyny to np. nieistniejąca nazwa pliku lub błąd HTTP/sieci.
2 Testowanie zostało zakończone, ponieważ podano nieznane polecenia lub argumenty.
10 Co najmniej 1 przypadek testowy (testowane klasy lub metody klas) w ramach wykonania testu nie został zaliczony.
15 Firebase Test Lab nie mógł ustalić, czy testowa matryca przeszła czy nie, z powodu nieoczekiwanego błędu.
18 Środowisko testowe dla tego wykonania testu nie jest obsługiwane z powodu niezgodnych wymiarów testu. Ten błąd może wystąpić, jeśli wybrany poziom interfejsu API Androida nie jest obsługiwany przez wybrany typ urządzenia.
19 Użytkownik anulował matrycę testów.
20 Wystąpił błąd infrastruktury testowej.