Zintegruj Laboratorium testów z systemem CI/CD

1. Wprowadzenie

Ostatnia aktualizacja: 7.04.2022 r.

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

Przeprowadzanie testów mobilnych może być trudne: wiele aplikacji działa na różnych platformach i urządzeniach oraz na różnych wersjach interfejsów API. Deweloperzy aplikacji chcą przetestować jak najwięcej konfiguracji, aby wykryć problemy, zanim dotrą do użytkowników. Ograniczenia związane z kosztami i zasobami ograniczają jednak liczbę urządzeń testowych i ilość ręcznej konserwacji, w które poszczególni deweloperzy mogą zainwestować. Gdy proces programowania jest skalowany w górę, zwłaszcza w przypadku systemów ciągłej integracji/ciągłego programowania (CI/CD), proces testowania musi być zautomatyzowany przy minimalizacji kosztów i wysiłku związanych z konserwacją.

Aby lepiej poznać skuteczność aplikacji u użytkowników urządzeń, Laboratorium Firebase hostuje w naszych centrach danych szeroką gamę mobilnych i wirtualnych urządzeń. Udostępniamy też Google Cloud CLI – niezależne od platformy narzędzie wiersza poleceń, które administruje testami uruchomionymi na urządzeniach w naszych centrach danych. Interfejs wiersza poleceń gcloud ułatwia integrację narzędzia do testowania działającego w chmurze z Laboratorium z istniejącymi przepływami pracy CI/CD.

Obsługa wielu platform

Laboratorium oferuje rozwiązania do testowania aplikacji na Androida i iOS oraz pomoc specjalistyczną do gier mobilnych, takich jak Unity. Opcje testowania obejmują popularne platformy testowe, takie jak Android Espresso, UI Automator i iOS XCTest. Za pomocą naszego zautomatyzowanego robota, Robo, Laboratorium może przeprowadzać testy bez użycia kodu.

Brak wymagań sprzętowych

Laboratorium hostuje urządzenia fizyczne w centrach danych Google oraz hostuje urządzenia wirtualne w Google Cloud. Wystarczy, że wyślesz testy do Laboratorium i czekasz na wyniki.

Szybkie i niezawodne

Wykonywanie wielu jednoczesnych przypadków testowych może zajmować dużo czasu, co blokuje procesy CI/CD. Laboratorium pozwala łatwo dzielić testy na fragmenty i przeprowadzać je równolegle na wielu urządzeniach. Możesz również wykryć zniekształcenia, które są częstym problemem podczas testowania urządzeń mobilnych.

Czego się nauczysz

  • Jak tworzyć artefakty testowe
  • Jak przeprowadzić test wersji mobilnej za pomocą gcloud CLI
  • Jak skonfigurować Jenkins CI
  • Jak przeprowadzać testy mobilne przy użyciu Jenkins CI
  • Konfigurowanie testów pod kątem skalowania w górę z użyciem systemów CI

Skupia się on na przeprowadzaniu testów. Nieistotne koncepcje i bloki kodu zostały zamaskowane. Można je po prostu skopiować i wkleić.

Czego potrzebujesz

Jeśli wolisz tworzyć elementy od zera, potrzebujesz Androida Studio, by przeprowadzić test Androida, lub XCode, by przeprowadzić test na iOS. Możesz też zabrać ze sobą same przedmioty, a my dostarczymy artefakty.

2. Przeprowadzanie testu za pomocą gcloud CLI

Tworzenie pakietu APK aplikacji na Androida i testowanie pakietu APK

Aby przeprowadzić testy w Laboratorium, zacznij od utworzenia pakietu APK aplikacji na Androida oraz testowego pakietu APK, który zawiera testy instrumentowane do przeprowadzenia na sprzęcie lub emulatorach. Jeśli masz już działającą bazę kodu, możesz utworzyć własne pliki APK lub użyć podstawowego przykładu do Espresso.

Aby tworzyć pliki APK za pomocą poleceń Gradle, musisz zainstalować pakiet Android SDK. Jeśli Android Studio nie jest zainstalowany na komputerze, zainstaluj Android Studio i pakiet SDK Android, a następnie skonfiguruj środowisko ANDROID_HOME w katalogu 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 następujące polecenia, aby sklonować kod i skompilować 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 pakiet APK aplikacji i testowy plik APK znajdziesz w tych lokalizacjach:

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

Aby pobrać testowe pliki APK i pliki APK aplikacji, możesz też skorzystać z tych sposobów:

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

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

Przeprowadzanie testów w Laboratorium za pomocą interfejsu wiersza poleceń gcloud

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

Konfigurowanie interfejsu wiersza poleceń gcloud

  1. Pobierz Google Cloud SDK, który zawiera narzędzie interfejsu wiersza poleceń gcloud.
  2. Sprawdź, czy Twoja instalacja jest aktualna:
gcloud components update
  1. Zaloguj się w interfejsie wiersza poleceń gcloud za pomocą konta Google:
gcloud auth login
  1. Skonfiguruj projekt Firebase w gcloud CLI, gdzie PROJECT_ID to identyfikator projektu Firebase. Identyfikator projektu znajdziesz w adresie URL konsoli Firebase zgodnie z tą konwencją nazewnictwa: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

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

Przeprowadzanie testu przy użyciu utworzonych plików APK

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

Korzystając z aplikacji i testowych plików APK utworzonych w sekcji Utwórz pakiet APK aplikacji na Androida oraz do testowania pakietu APK, uruchom test instrumentacji w Androidzie, korzystając z 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ą dowolnej z tych opcji:

  • gcloud podsumowanie – po zakończeniu testu interfejs wiersza poleceń gcloud wyświetli podstawowe podsumowanie jego wyników.
  • gcloud kod wyjścia – po zakończeniu testu polecenie zakończy się z wartością 0, jeśli test się zaliczy. Jeśli test się nie powiedzie, polecenie zakończy się z kodem wyjścia innym niż zero.
  • Konsola Firebase – interfejs wiersza poleceń gcloud 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 testu.
  • Plik XML JUnit – interfejs wiersza poleceń gcloud wyświetla to:
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 przechowywane są artefakty i wyniki testów. Aby znaleźć plik XML JUnit zawierający wyniki testu, otwórz link i przejdź do folderu blueline-28-en-portrait/test_result_1.xml.

3. Skonfiguruj z użyciem Jenkinsa CI

W tej sekcji przeprowadzisz testy w Test Lab w popularnym systemie CI Jenkins CI. Jeśli chcesz używać innego systemu CI, zapoznaj się z zaawansowanymi sprawdzonymi metodami uruchamiania dużych zestawów testów oraz dokumentacją innych systemów CI, takich jak Bitrise i Circle CI. Zamiast interfejsu wiersza poleceń gcloud możesz użyć polecenia Flank.

Włączanie interfejsu wiersza poleceń gcloud dla Jenkinsa

Zanim użyjesz Laboratorium razem z Jenkinsem, musisz włączyć wymagane interfejsy API i skonfigurować konto usługi, którego Jenkins będzie mógł używać do uwierzytelniania w gcloud CLI.

Dodawanie konta usługi Google Cloud dla Jenkinsa

Konta usługi to konta z ograniczonym dostępem przeznaczone do integracji usług. Te konta zapewniają szczegółową kontrolę nad określonymi usługami i nie podlegają kontroli spamu ani promptów captcha, które w innym wypadku mogłyby zablokować 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ę i opis, a potem kliknij Utwórz i kontynuuj.
  3. W menu Wybierz rolę kliknij Podstawowy, a następnie Edytujący.
  4. Kliknij kolejno Dalej i Gotowe.

Następnie utworzysz i pobierzesz klucz uwierzytelniania, którego Jenkins może użyć do uwierzytelnienia jako utworzone przez Ciebie 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. Wybierz Klucze, a następnie kliknij kolejno Dodaj klucz i Utwórz nowy klucz.
  3. Wybierz JSON i 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 na temat tworzenia kont usługi znajdziesz w artykule Tworzenie konta usługi.

Włącz wymagane interfejsy API Google Cloud

Interfejs Cloud Testing API umożliwia przeprowadzanie testów w infrastrukturze Google. Ten interfejs API został włączony po ukończeniu testu za pomocą interfejsu wiersza poleceń gcloud. Interfejs Cloud Tool Score API umożliwia programistyczny dostęp do wyników testów.

  1. Otwórz bibliotekę interfejsów Google Developers Console API.
  2. Na pasku wyszukiwania u góry konsoli Firebase wpisz nazwę każdego wymaganego interfejsu API ( Cloud Testing API i Cloud Tool Results API). Pojawi się strona przeglądu żądanego interfejsu API.
  3. Kliknij Włącz API na stronie przeglądu każdego interfejsu API.

Instalowanie i konfigurowanie Jenkinsa

Jenkins CI możesz instalować i konfigurować w systemach Linux, macOS, Windows i wielu innych. Niektóre szczegóły tego ćwiczenia w Codelabs dotyczą instalowania i uruchamiania Jenkins CI w systemie Linux, w tym używania ukośników (/) w ścieżkach plików.

Aby pobrać i zainstalować Jenkinsa na komputerze z systemem Linux lub Windows, postępuj zgodnie z instrukcjami instalowania Jenkinsa. Po zainstalowaniu Jenkinsa postępuj zgodnie z tymi samymi instrukcjami instalacji, aby ukończyć konfigurację i uzyskać dostęp do panelu Jenkinsa przy użyciu adresu http://localhost:8080.

Zweryfikuj zainstalowane wtyczki

Jenkins obsługuje różne systemy kontroli wersji. W ramach tego ćwiczenia w Codelabs wykorzystasz Git do uruchomienia poprzedniego testu. Aby ułatwić sobie korzystanie z gcloud CLI, musisz zainstalować wtyczkę GCloud SDK.

  1. W panelu Jenkins kliknij Zarządzaj Jenkinsem, a następnie Zarządzaj wtyczkami.
  2. Wyszukaj wtyczki Git i GCloud SDK i zainstaluj je (jeśli nie są jeszcze zainstalowane).

Skonfiguruj lokalizację pakietów SDK na Androida i pakietów SDK Google Cloud

Teraz wskazujesz Jenkinsowi, gdzie znajduje się pakiet SDK Google Cloud i pakiet Android SDK.

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

  1. W panelu Jenkins kliknij Manage Jenkins (Zarządzaj Jenkinsem), a następnie kliknij Global Tool Configuration (Konfiguracja narzędzia globalnego).
  2. W sekcji Google Cloud SDK kliknij Dodaj pakiet SDK Google Cloud.
  3. W polu Nazwa wpisz łatwą do zapamiętania nazwę instancji pakietu SDK Google Cloud, na przykład GCloud-SDK.
  4. Wpisz katalog główny pakietu SDK Google Cloud, na przykład /opt/google-cloud-sdk.
  5. Kliknij Zapisz.
  6. Skonfiguruj obowiązujące w całym systemie właściwości pakietów SDK Androida i Google Cloud. Aby to zrobić, otwórz 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 Tool Locations (Lokalizacje narzędzi), a następnie kliknij Add (Dodaj). W menu Nazwa wybierz nazwę instancji pakietu SDK Google Cloud dodanej w sekcji Konfiguracja narzędzia globalnego.
  10. W polu Strona główna wpisz lokalizację pakietu Google Cloud SDK, na przykład /opt/google-cloud-sdk.
  11. Kliknij Zapisz.

Dodaj dane logowania do konta usługi do Jenkinsa

Teraz dodasz dane logowania do konta usługi interfejsu wiersza poleceń gcloud do aplikacji Jenkins, aby umożliwić uwierzytelnianie i uruchamianie poleceń interfejsu wiersza poleceń gcloud.

  1. W panelu Jenkins kliknij Manage Jenkins (Zarządzaj aplikacją Jenkins), a następnie kliknij Zarządzaj danymi logowania.
  2. W sekcji Sklepy w Jenkins kliknij link domeny (globalna), a następnie kliknij Dodaj dane logowania.
  3. W menu Rodzaj wybierz Konto usługi Google z klucza prywatnego.
  4. W polu Nazwa projektu wpisz nazwę projektu Firebase.
  5. Wybierz Klucz JSON, 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 Laboratorium.

4. Przeprowadzanie testów w Laboratorium przy użyciu Jenkins CI

Skoro masz już skonfigurowanego Jenkinsa, połączmy wszystko w jedną całość i uruchommy ten sam test w Jenkinsie.

Możesz skonfigurować Jenkinsa tak, aby uruchamiał automatyczne kompilacje i przeprowadzał testy przy każdym sprawdzaniu aktualizacji aplikacji. Możesz też skonfigurować Jenkinsa tak, aby okresowo uruchamiał kompilacje. Aby dowiedzieć się więcej o konfigurowaniu kompilacji w Jenkinsie, zobacz Konfigurowanie kompilacji automatycznych.

Tworzenie i konfigurowanie projektu Jenkins

Utwórz projekt, aby prowadzić testy w trybie ciągłej integracji aplikacji w Laboratorium.

Tworzenie projektu Jenkinsa

  1. Otwórz panel Jenkins, wchodząc na http://localhost:8080.
  2. W panelu Jenkins kliknij New Item (Nowy element).
  3. Wpisz nazwę projektu w polu Nazwa elementu i kliknij Freestyle project (Projekt Freestyle), aby utworzyć projekt korzystający z pojedynczej konfiguracji kompilacji.
  4. Kliknij OK. Aby dokończyć konfiguracje projektu, wykonaj po kolei pozostałe sekcje.

Konfigurowanie zarządzania kodem źródłowym

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

Konfigurowanie środowiska kompilacji

W sekcji Środowisko kompilacji możesz skonfigurować cechy kompilacji. Włącz uwierzytelnianie w Google Cloud, wykonując te czynności:

  1. Na karcie Build Environment zaznacz pole wyboru GCloud SDK authentication i wybierz nazwę instalacji wybraną podczas dodawania informacji instalacyjnych Google Cloud.
  2. Z menu Dane logowania Google wybierz skonfigurowane dane logowania do konta usługi.

Dodaj kroki kompilacji Gradle, aby ponownie skompilować pakiety APK

  1. Przewiń w dół do sekcji Kompilacja, kliknij Dodaj krok kompilacji, a następnie wybierz Wykonaj powłokę.
  2. Dodaj krok kompilacji, aby uruchamiać te polecenia w katalogu głównym aplikacji:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Dodaj krok kompilacji interfejsu wiersza poleceń gcloud do Jenkinsa

Teraz możesz dodać krok kompilacji do Jenkinsa, aby uruchomić Laboratorium przy użyciu wiersza poleceń gcloud.

Aby dodać krok kompilacji interfejsu wiersza poleceń gcloud, dodaj nowy krok kompilacji Execute shell 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 konfigurowania projektu przewiń stronę w dół i zapisz konfigurację. Nastąpi przekierowanie na stronę główną nowego projektu.

Przeprowadzanie testów w Jenkinsie

Teraz możesz utworzyć projekt Jenkins i przeprowadzić test podobny do testu ręcznego przeprowadzonego za pomocą interfejsu wiersza poleceń gcloud.

Aby przeprowadzić test w Jenkinsie, wykonaj te czynności:

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

Jeśli nie widzisz błędów, gratulacje! 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 zestawów testowych

Jeśli chcesz przeprowadzać wiele jednoczesnych testów, postępuj zgodnie z tymi sprawdzonymi metodami, aby zapewnić szybkie i niezawodne przeprowadzanie testów.

Większe pokrycie w przypadku wielu konfiguracji urządzeń

Do kroku kompilacji w gcloud CLI możesz łatwo dodać wiele urządzeń. Możesz też sprawdzić i wybrać dostępne urządzenia, wersje, języki i orientacje. Na przykład to polecenie uruchamia testy na 2 urządzeniach:

  • Wirtualny telefon Google Pixel 2 z interfejsem API poziomu 30 w orientacji pionowej i języku angielskim
  • Fizyczny telefon Samsung Galaxy S20 z interfejsem API poziomu 29 w orientacji poziomej i językiem 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żyj pliku konfiguracji interfejsu wiersza poleceń gcloud

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

Równoległe testowanie wycinków

Fragmentacja testowa dzieli zestaw testów na podgrupy (fragmenty), które są uruchamiane oddzielnie, niezależnie od siebie. Laboratorium automatycznie uruchamia równolegle każdy fragment na wielu urządzeniach, dzięki czemu może szybciej przeprowadzać cały zestaw testów. Więcej informacji znajdziesz w artykule Włączanie fragmentacji.

Aby włączyć fragmentację, użyj kanału gcloud beta i dodaj flagę –num-uniform-shards lub -test-targets-for-shard do kroku kompilacji interfejsu wiersza poleceń gcloud. Aby na przykład podzielić testy na 5 wykonań i przeprowadzić 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 nieregularności

Testy mobilne często bywają niestabilne. Czasami testy dają zamierzone wyniki, a w innych przypadkach mogą zakończyć się niepowodzeniem (nawet przy tej samej konfiguracji). Aby sprawdzić, czy niepowodzenie testu wykazało niepewne wyniki, użyj flagi interfejsu wiersza poleceń gcloud –num-flaky-test-attempts. Ta flaga określa, ile razy należy ponowić próbę wykonania testu, jeśli co najmniej 1 przypadek testowy zakończył się niepowodzeniem z dowolnego powodu.

Aby na przykład ponownie uruchomić przypadki testowe 3 razy po nieudanym uruchomieniu, podaj te informacje:

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

6. Gratulacje

Gratulacje! Udało Ci się ukończyć pierwszy test w Laboratorium z wykorzystaniem systemu CI.

Udało Ci się utworzyć aplikację i testowe pliki APK oraz przeprowadzić test instrumentacji w Laboratorium przy użyciu gcloud CLI. skonfigurujesz też projekt Jenkins w celu automatyzacji tego samego testu;

Znasz już najważniejsze etapy integracji Laboratorium z systemem CI/CD.

Co dalej?

Dowiedz się, jak skonfigurować CI za pomocą Pakietu emulatorów Firebase.

Więcej informacji

Dokumenty referencyjne