Zintegruj Laboratorium testów z systemem CI/CD

1. Wprowadzenie

Ostatnia aktualizacja: 7.04.2022

Jak przeprowadzać testy mobilne za pomocą systemów CI/CD

Przeprowadzanie testów na urządzeniach mobilnych może być trudne, ponieważ wiele aplikacji działa na różnych platformach, urządzeniach i wersjach interfejsu API. Deweloperzy aplikacji chcą testować je na jak największej liczbie konfiguracji, aby wykrywać problemy, zanim zrobią to użytkownicy. Jednak ograniczenia kosztów i zasobów ograniczają liczbę urządzeń testowych i ilość ręcznej konserwacji, w którą poszczególni deweloperzy mogą zainwestować. W miarę rozwoju procesu programowania, zwłaszcza w przypadku systemów ciągłej integracji i ciągłego dostarczania (CI/CD), proces testowania musi być zautomatyzowany przy jednoczesnym zminimalizowaniu kosztów i nakładu pracy związanych z utrzymaniem.

Aby pomóc Ci zrozumieć, jak Twoje aplikacje działają na urządzeniach użytkowników, w naszych centrach danych hostujemy wiele fizycznych i wirtualnych urządzeń mobilnych. Udostępniamy też interfejs wiersza poleceń Google Cloud CLI, czyli niezależne od platformy narzędzie wiersza poleceń, które koordynuje przeprowadzanie testów na urządzeniach w naszych centrach danych. Interfejs wiersza poleceń gcloud ułatwia integrację rozwiązania testowego Test Lab opartego na chmurze z dotychczasowymi przepływami pracy CI/CD.

Działanie na różnych platformach

Laboratorium udostępnia rozwiązania do testowania aplikacji na Androida i iOS oraz specjalistyczne wsparcie dla gier mobilnych, takich jak Unity. Opcje testowania obejmują popularne platformy testowe, takie jak Android Espresso, UI Automator i iOS XCTest. Dzięki naszemu automatycznemu narzędziu do indeksowania, Robo, Laboratorium testów może przeprowadzać testy nawet bez kodu testowego.

Brak wymagań sprzętowych

Laboratorium testowe hostuje urządzenia fizyczne w centrach danych Google, a urządzenia wirtualne w Google Cloud. Wystarczy, że wyślesz testy do Test Lab i poczekasz na wyniki.

Szybkie i niezawodne

Uruchamianie wielu równoczesnych przypadków testowych może zająć dużo czasu i zablokować procesy CI/CD. Laboratorium umożliwia łatwe dzielenie testów na części i przeprowadzanie ich równolegle na wielu urządzeniach. Możesz też wykrywać niestabilność, która jest częstym problemem podczas testowania na urządzeniach mobilnych.

Czego się nauczysz

  • Jak tworzyć artefakty testowe
  • Jak uruchomić test mobilny za pomocą gcloud CLI
  • Konfigurowanie Jenkins CI
  • Jak przeprowadzać testy mobilne za pomocą Jenkins CI
  • Konfigurowanie testów pod kątem skalowania w systemach CI

W tym Codelabie skupimy się na przeprowadzaniu testów. Nieistotne koncepcje i bloki kodu zostały pominięte. Można je po prostu skopiować i wkleić.

Czego potrzebujesz

Jeśli wolisz tworzyć wszystko od zera, do przeprowadzenia testu na Androidzie potrzebujesz Android Studio, a do przeprowadzenia testu na iOS – Xcode. Możesz też po prostu przyjść, a my dostarczymy artefakty.

2. Przeprowadzanie testu za pomocą interfejsu wiersza poleceń gcloud

Utwórz pakiet APK aplikacji na Androida i pakiet APK testowej aplikacji

Aby przeprowadzić test w Laboratorium, zacznij od utworzenia pliku APK aplikacji na Androida i pliku APK testu, który zawiera testy z instrumentacją do uruchamiania na urządzeniach lub emulatorach. Jeśli masz już działającą bazę kodu, możesz utworzyć własne pliki APK lub użyć BasicSample for Espresso.

Aby tworzyć pliki APK za pomocą poleceń Gradle, musisz zainstalować pakiet Android SDK. Jeśli Android Studio nie jest zainstalowane na Twoim komputerze, zainstaluj Android Studio i Android SDK oraz ustaw środowisko ANDROID_HOME z katalogiem Android SDK. Na przykład w pliku ~/.bash_profile dodaj ten wiersz:

export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk  # For MacOS

Następnie uruchom te polecenia, aby sklonować kod i utworzyć pliki APK:

git clone https://github.com/android/testing-samples.git
cd testing-samples/ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Po uruchomieniu poleceń klonowania i kompilacji plik APK aplikacji i plik APK testowania znajdziesz w tych lokalizacjach:

app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Możesz też użyć tych opcji, aby uzyskać pliki APK testowe i aplikacji:

  • Aby utworzyć pliki APK w Android Studio, postępuj zgodnie z instrukcjami w sekcji Testowanie w Android Studio.
  • Pobierz przykładową aplikację Notatnik. Użyj pliku binarnego app-debug-unaligned.apk i pliku testów instrumentacyjnych app-debug-test-unaligned.apk, które znajdują się w folderze NotePad/app/build/outputs/apk/.

Jeśli masz działający kod źródłowy aplikacji na iOS, możesz napisać XCTestutworzyć plik ZIP z aplikacji i testów.

Używanie interfejsu wiersza poleceń gcloud do przeprowadzania testów w Test Lab

W tej sekcji utworzysz projekt Firebase i skonfigurujesz lokalne środowisko pakietu Google Cloud SDK. Więcej informacji znajdziesz w artykule Rozpoczynanie testowania za pomocą interfejsu wiersza poleceń gcloud .

Konfigurowanie gcloud CLI

  1. Pobierz Google Cloud SDK, który zawiera narzędzie gcloud CLI.
  2. Sprawdź, czy instalacja jest aktualna:
gcloud components update
  1. Zaloguj się w gcloud CLI za pomocą konta Google:
gcloud auth login
  1. Ustaw projekt Firebase w interfejsie gcloud CLI, gdzie PROJECT_ID to identyfikator projektu Firebase. Identyfikator projektu znajdziesz w adresie URL konsoli Firebase, który ma następującą postać: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

Jeśli nie masz projektu Firebase, utwórz go w konsoli Firebase.

Uruchamianie testu za pomocą skompilowanych plików APK

W tej sekcji przeprowadzisz test instrumentacji na domyślnym urządzeniu Test Lab, czyli Pixelu 3 z interfejsem API na poziomie 28. Jeśli chcesz użyć innego urządzenia, sprawdź dostępne urządzenia.

Używając aplikacji i testowych plików APK utworzonych w sekcji Tworzenie pliku APK aplikacji na Androida i testowego pliku APK, uruchom test z instrumentacją na Androida za pomocą tego polecenia:

gcloud firebase test android run \
  --type instrumentation \
  --app app/build/outputs/apk/debug/app-debug.apk \
  --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Analizowanie wyników testu

Wyniki testu możesz analizować za pomocą tych opcji:

  • gcloud podsumowanie – po zakończeniu testu interfejs wiersza poleceń gcloud wyświetla podstawowe podsumowanie wyników testu.
  • gcloudkod zakończenia – po zakończeniu testu polecenie kończy się kodem 0, jeśli test został zaliczony. Jeśli test się nie powiedzie, polecenie zostanie zakończone z niezerowym kodem wyjścia.
  • Konsola Firebase – interfejs gcloud CLI wyświetla link do konsoli Firebase. Link jest zgodny z konwencją nazewnictwa https://console.firebase.google.com/project/PROJECT_ID/testlab/... Więcej informacji znajdziesz w artykule Interpretowanie wyników pojedynczego wykonania testu.
  • Plik XML JUnit – gcloud CLI wyświetla te informacje:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]

test-lab-xxxxx/xxxxx to zasobnik Cloud Storage, w którym są przechowywane artefakty i wyniki testów. Aby znaleźć plik XML JUnit zawierający wyniki testu, otwórz link i przejdź do blueline-28-en-portrait/test_result_1.xml.

3. Konfigurowanie za pomocą Jenkins CI

W tej sekcji użyjesz Jenkins CI, popularnego systemu CI, do przeprowadzania testów za pomocą Test Lab. Jeśli chcesz użyć innego systemu CI, zapoznaj się z zaawansowanymi sprawdzonymi metodami uruchamiania dużych zestawów testów oraz z dokumentacją innych systemów CI, takich jak BitriseCircle CI. Zamiast gcloud CLI możesz użyć Flank.

Włączanie gcloud CLI dla Jenkinsa

Zanim zaczniesz korzystać z Test Lab w Jenkinsie, musisz włączyć wymagane interfejsy API i skonfigurować konto usługi, którego Jenkins może używać do uwierzytelniania w interfejsie wiersza poleceń gcloud.

Dodawanie konta usługi Google Cloud na potrzeby Jenkinsa

Konta usługi to konta o ograniczonych możliwościach, które są przeznaczone do integracji usług. Konta te zapewniają szczegółową kontrolę nad konkretnymi usługami i nie podlegają sprawdzaniu pod kątem spamu ani wyświetlaniu próśb o wpisanie kodu CAPTCHA, które mogłyby blokować kompilacje CI.

Aby utworzyć konto usługi, wykonaj te czynności:

  1. Otwórz stronę Konta usługi w konsoli Google Cloud.
  2. Kliknij Utwórz konto usługi, dodaj nazwęopis, a potem kliknij Utwórz i kontynuuj.
  3. W menu Wybierz rolę kliknij Podstawowa, a następnie Edytujący.
  4. Kliknij kolejno DalejGotowe.

Następnie utwórz i pobierz klucz uwierzytelniania, którego Jenkins może używać do uwierzytelniania jako utworzone konto usługi.

Aby utworzyć i pobrać klucz konta usługi, wykonaj te czynności:

  1. Na stronie Konta usługi w konsoli Google Cloud kliknij adres e-mail powiązany z utworzonym kontem.
  2. Kliknij kolejno Klucze, Dodaj kluczUtwórz nowy klucz.
  3. Wybierz JSON, a potem kliknij Utwórz.
  4. Gdy pojawi się prośba o pobranie pliku, kliknij OK. Pobierz plik w bezpieczne miejsce na komputerze. Ten plik będzie potrzebny później podczas konfigurowania Jenkinsa.

Więcej informacji o tworzeniu kont usługi znajdziesz w artykule Tworzenie konta usługi.

Włączanie wymaganych interfejsów Google Cloud API

Interfejs Cloud Testing API umożliwia przeprowadzanie testów w infrastrukturze Google. Ten interfejs API został włączony podczas wykonywania czynności opisanych w artykule Uruchamianie testu za pomocą gcloud CLI. Interfejs Cloud Tool Results API umożliwia programowy dostęp do wyników testów.

  1. Otwórz Bibliotekę interfejsów API Google Developers Console.
  2. Na pasku wyszukiwania u góry konsoli Firebase wpisz nazwę każdego wymaganego interfejsu API ( Cloud Testing APICloud Tool Results API). Wyświetli się strona przeglądu wybranego interfejsu API.
  3. Na stronie przeglądu każdego interfejsu API kliknij Włącz API.

Instalowanie i konfigurowanie Jenkins

Jenkins CI możesz zainstalować i skonfigurować w systemach Linux, macOS, Windows i wielu innych środowiskach. Niektóre szczegóły tego kursu są specyficzne dla instalowania i uruchamiania Jenkins CI w systemie Linux, w tym używanie ukośników (/) w ścieżkach do plików.

Aby pobrać i zainstalować Jenkinsa na komputerze z systemem Linux lub Windows, postępuj zgodnie z instrukcjami instalacji Jenkinsa. Po zainstalowaniu Jenkinsa postępuj zgodnie z instrukcjami instalacji, aby dokończyć konfigurację i uzyskać dostęp do panelu Jenkinsa za pomocą adresu http://localhost:8080.

Sprawdzanie zainstalowanych wtyczek

Jenkins obsługuje różne systemy kontroli wersji. W tym laboratorium użyjesz Gita do uruchomienia poprzedniego testu. Aby wygodniej korzystać z interfejsu wiersza poleceń gcloud, musisz zainstalować wtyczkę GCloud SDK.

  1. Na panelu Jenkinsa kliknij Manage Jenkins (Zarządzaj Jenkinsem), a następnie Manage Plugins (Zarządzaj wtyczkami).
  2. Wyszukaj wtyczki GitGCloud SDK i zainstaluj je (jeśli nie są jeszcze zainstalowane).

Konfigurowanie lokalizacji pakietów SDK Androida i Google Cloud

Teraz musisz poinformować Jenkinsa, gdzie znajdują się pakiety SDK Google Cloud i Android.

Aby skonfigurować pakiety Google Cloud SDK i Android SDK na potrzeby Jenkinsa, wykonaj te czynności:

  1. Na panelu Jenkinsa kliknij Manage Jenkins (Zarządzaj Jenkinsem), a następnie Global Tool Configuration (Konfiguracja narzędzi globalnych).
  2. W sekcji Google Cloud SDK kliknij Add Google Cloud SDK (Dodaj Google Cloud SDK).
  3. W polu Nazwa wpisz łatwą do zapamiętania nazwę instancji pakietu SDK Google Cloud, np. GCloud-SDK.
  4. Wpisz katalog główny pakietu SDK Google Cloud, np. /opt/google-cloud-sdk.
  5. Kliknij Zapisz.
  6. Skonfiguruj właściwości w całym systemie dla pakietów SDK Androida i Google Cloud, otwierając Panel > Zarządzaj Jenkinsem > Skonfiguruj system.
  7. Zaznacz pole wyboru Zmienne środowiskowe i kliknij Dodaj.
  8. W polu Nazwa wpisz ANDROID_HOME. W polu Wartość wpisz lokalizację pakietu Android SDK, np. /opt/Android/Sdk.
  9. Kliknij pole wyboru Lokalizacje narzędzi i kliknij Dodaj. W menu Name (Nazwa) wybierz nazwę instancji pakietu Google Cloud SDK dodanej w konfiguracji narzędzia globalnego.
  10. W polu Home (Katalog domowy) wpisz lokalizację pakietu Google Cloud SDK, np. /opt/google-cloud-sdk.
  11. Kliknij Zapisz.

Dodawanie do Jenkinsa danych logowania konta usługi

Teraz dodaj do Jenkinsa dane logowania konta usługi interfejsu wiersza poleceń gcloud, aby Jenkins mógł się uwierzytelnić i skutecznie uruchamiać polecenia interfejsu wiersza poleceń gcloud.

  1. Na panelu Jenkinsa kliknij Manage Jenkins (Zarządzaj Jenkinsem), a następnie Manage Credentials (Zarządzaj danymi logowania).
  2. W sekcji Stores scoped to Jenkins (Sklepy w zakresie Jenkinsa) kliknij link do domeny (global), a następnie Add Credentials (Dodaj dane logowania).
  3. W menu Rodzaj wybierz Konto usługi Google z kluczem prywatnym.
  4. W polu Nazwa projektu wpisz nazwę projektu Firebase.
  5. Wybierz Klucz JSON, a potem kliknij Przeglądaj i przejdź do lokalizacji, w której został zapisany klucz konta usługi.
  6. Kliknij Utwórz.

Możesz teraz skonfigurować automatyczną kompilację Jenkinsa na potrzeby Test Lab.

4. Uruchamianie testów w Laboratorium za pomocą Jenkins CI

Po skonfigurowaniu Jenkinsa połączmy wszystko i uruchommy ten sam test za pomocą Jenkinsa.

Możesz skonfigurować Jenkinsa tak, aby uruchamiał automatyczne kompilacje i testy za każdym razem, gdy zostaną wprowadzone zmiany w aplikacji. Możesz też skonfigurować Jenkinsa tak, aby okresowo uruchamiał kompilacje. Więcej informacji o konfigurowaniu kompilacji w Jenkinsie znajdziesz w artykule Konfigurowanie automatycznych kompilacji.

Tworzenie i konfigurowanie projektu Jenkins

Utwórz projekt, aby przeprowadzać testy w trybie ciągłej integracji aplikacji za pomocą Laboratorium testów.

Tworzenie projektu Jenkins

  1. Otwórz panel Jenkins, wpisując w przeglądarce adres http://localhost:8080.
  2. W panelu Jenkinsa kliknij New Item (Nowy element).
  3. Wpisz nazwę projektu w polu Nazwa elementu i kliknij Projekt dowolny, aby utworzyć projekt, który używa jednej konfiguracji kompilacji.
  4. Kliknij OK. Aby dokończyć konfigurację projektu, wypełnij pozostałe sekcje w kolejności.

Konfigurowanie zarządzania kodem źródłowym

  1. Na karcie Source Code Management (Zarządzanie kodem źródłowym) wybierz Git.
  2. W polu Repository URL (Adres URL repozytorium) wpisz https://github.com/android/testing-samples.git.

Konfigurowanie środowiska kompilacji

W sekcji Środowisko kompilacji możesz skonfigurować charakterystykę kompilacji. Aby włączyć uwierzytelnianie przez Google Cloud, wykonaj te czynności:

  1. Na karcie Build Environment (Środowisko kompilacji) zaznacz pole wyboru GCloud SDK authentication (Uwierzytelnianie pakietu Google Cloud SDK) i wybierz nazwę instalacji, którą podano podczas dodawania informacji o instalacji Google Cloud.
  2. W menu Dane logowania Google wybierz skonfigurowane dane logowania konta usługi.

Dodawanie kroków kompilacji Gradle w celu ponownego utworzenia pakietów APK

  1. Przewiń w dół do sekcji Build (Kompilacja), kliknij Add build step (Dodaj krok kompilacji), a następnie wybierz Execute shell (Wykonaj polecenie powłoki).
  2. Dodaj krok kompilacji, aby uruchomić te polecenia w głównym katalogu aplikacji:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Dodawanie kroku kompilacji gcloud CLI do Jenkinsa

Teraz możesz dodać do Jenkinsa krok kompilacji, aby uruchomić Test Lab za pomocą wiersza poleceń gcloud CLI.

Aby dodać etap kompilacji interfejsu wiersza poleceń gcloud, dodaj nowy etap kompilacji Wykonaj polecenie powłoki i wpisz to polecenie:

gcloud config set project PROJECT_ID
gcloud firebase test android run \
--app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk
--test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Po zakończeniu konfiguracji projektu przewiń na dół strony i zapisz konfigurację. Nastąpi przekierowanie na stronę główną nowego projektu.

Przeprowadzanie testów za pomocą Jenkinsa

Teraz możesz utworzyć projekt Jenkinsa i przeprowadzić test podobny do testu ręcznego, który został przeprowadzony za pomocą interfejsu wiersza poleceń gcloud.

Aby uruchomić test za pomocą Jenkinsa, wykonaj te czynności:

  1. Aby ręcznie aktywować kompilację, kliknij Skompiluj teraz.
  2. Sprawdź postęp i wyniki, klikając nową kompilację > Dane wyjściowe konsoli.

Jeśli nie widzisz błędów, gratulacje! Właśnie udało Ci się skonfigurować projekt i przeprowadzić test na urządzeniu Pixel 2 jednym kliknięciem. Jeśli wystąpią błędy, zapoznaj się z sekcją Rozwiązywanie problemów.

5. Zaawansowane sprawdzone metody uruchamiania dużych pakietów testów

Jeśli chcesz przeprowadzić wiele testów jednocześnie, zastosuj te sprawdzone metody, aby mieć pewność, że będą one działać szybko i niezawodnie.

Zwiększanie zasięgu w przypadku konfiguracji wielu urządzeń

Możesz łatwo dodać wiele urządzeń do kroku kompilacji interfejsu wiersza poleceń gcloud. Możesz też sprawdzić i wybrać dostępne urządzenia, wersje, ustawienia regionalne i orientacje. Na przykład to polecenie uruchamia testy na 2 urządzeniach:

  • Wirtualny Google Pixel 2 z poziomem interfejsu API 30 w orientacji pionowej i w języku angielskim
  • Fizyczny telefon Samsung Galaxy S20 z poziomem interfejsu API 29 w orientacji poziomej i ustawieniami regionalnymi w języku francuskim
gcloud firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --device model=Pixel2,version=30,locale=en,orientation=portrait  \
  --device model=x1q,version=29,locale=fr,orientation=landscape

Używanie pliku konfiguracji YAML interfejsu wiersza poleceń gcloud

Jeśli wolisz zarządzać argumentami w jednym miejscu lub za pomocą systemu kontroli źródła, możesz określić te argumenty w pliku argumentów w formacie YAML. Aby dowiedzieć się, jak korzystać z tej funkcji, uruchom gcloud topic arg-files.

Fragmenty testów do uruchomienia równolegle

Dzielenie testów na fragmenty polega na podzieleniu zestawu testów na podgrupy (fragmenty), które są uruchamiane oddzielnie. Laboratorium testowe automatycznie uruchamia każdy fragment równolegle na wielu urządzeniach, dzięki czemu może szybciej przeprowadzić cały zestaw testów. Więcej informacji znajdziesz w artykule Włączanie dzielenia na fragmenty.

Aby włączyć fragmentację, użyj kanału gcloud beta i dodaj do kroku kompilacji w gcloud CLI flagę –num-uniform-shards lub –test-targets-for-shard. Aby na przykład podzielić testy na 5 wykonań i uruchomić je równolegle, uruchom te polecenia:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-uniform-shards 5

Włącz wykrywanie niestabilności

Testy na urządzeniach mobilnych mogą często zwracać niepewne wyniki. Czasami testy przechodzą, a czasami mogą się nie udać, nawet przy tej samej konfiguracji. Aby sprawdzić, czy nieudany test był niestabilny, użyj flagi –num-flaky-test-attempts w interfejsie wiersza poleceń gcloud. Ten parametr określa, ile razy należy ponownie uruchomić test, jeśli co najmniej jeden przypadek testowy zakończy się niepowodzeniem z dowolnego powodu.

Jeśli na przykład chcesz ponownie uruchomić nieudane przypadki testowe 3 razy po początkowym nieudanym uruchomieniu, wpisz:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-flaky-test-attempts 3

6. Gratulacje

Gratulujemy! Udało Ci się przeprowadzić pierwszy test w Laboratorium Firebase za pomocą systemu CI.

Utworzono aplikację i pliki APK do testowania oraz przeprowadzono test instrumentacji w Laboratorium za pomocą gcloud CLI. Konfigurujesz też projekt Jenkinsa, aby zautomatyzować ten sam test.

Znasz już kluczowe etapy integracji Test Lab z systemem CI/CD.

Co dalej?

Zapoznaj się z artykułem How to set up CI using the Firebase Emulator Suite (Jak skonfigurować CI za pomocą Pakietu emulatorów Firebase).

Więcej informacji

Dokumentacja