Zintegruj laboratorium testowe ze swoim systemem CI/CD

1. Wstęp

Ostatnia aktualizacja: 2022-04-07

Jak przeprowadzać testy mobilne z systemami CI/CD

Przeprowadzanie testów mobilnych może być trudne: wiele aplikacji działa na różnych platformach, urządzeniach i wersjach API. Twórcy aplikacji chcą testować na jak największej liczbie konfiguracji, aby wykryć problemy, zanim zrobią to ich użytkownicy. Jednak koszty i ograniczenia zasobów ograniczają liczbę urządzeń testowych oraz ilość ręcznej konserwacji, w jaką mogą zainwestować indywidualni programiści. Kiedy proces programowania nabiera tempa, szczególnie w przypadku systemów ciągłej integracji/ciągłego rozwoju (CI/CD), proces testowania musi zautomatyzować, minimalizując jednocześnie koszty i wysiłek związany z konserwacją.

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

Obsługa wielu platform

Laboratorium testowe zapewnia rozwiązania testowe dla 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. Korzystając z naszego automatycznego robota Robo , Laboratorium Testowe może nawet przeprowadzać testy bez żadnego kodu testowego.

Brak wymagań sprzętowych

Laboratorium testowe hostuje urządzenia fizyczne w centrach danych Google i hostuje urządzenia wirtualne w Google Cloud. Wystarczy wysłać swoje testy do Laboratorium Testowego i poczekać na wyniki.

Szybki i niezawodny

Uruchamianie wielu jednoczesnych przypadków testowych może zająć dużo czasu, blokując procesy CI/CD. Dzięki Test Lab możesz z łatwością przeprowadzać testy fragmentacyjne i uruchamiać je równolegle na wielu urządzeniach. Możesz także wykryć łuszczenie się skóry, częstą bolączkę podczas testowania urządzeń mobilnych.

Czego się dowiesz

  • Jak budować artefakty testowe
  • Jak uruchomić test mobilny za pomocą interfejsu CLI gcloud
  • Jak skonfigurować Jenkins CI
  • Jak przeprowadzić testy mobilne przy użyciu Jenkins CI
  • Jak skonfigurować testy, aby skalować je w systemach CI

Te zajęcia z programowania skupiają się na uruchamianiu testów. Nieistotne koncepcje i bloki kodu są pomijane i można je po prostu skopiować i wkleić.

Co będziesz potrzebował

Jeśli wolisz budować wszystko od zera, potrzebujesz Android Studio, aby uruchomić test Androida, lub XCode, aby uruchomić test iOS. Lub po prostu przyjdź, a my dostarczymy artefakty.

2. Uruchom test za pomocą interfejsu CLI gcloud

Utwórz plik APK aplikacji na Androida i przetestuj plik APK

Aby przeprowadzić test w Laboratorium testowym, zacznij od zbudowania pakietu APK aplikacji na Androida i pliku APK testowego, który zawiera testy oprzyrządowane do uruchamiania na urządzeniach sprzętowych lub emulatorach. Jeśli masz już działającą bazę kodu, możesz zbudować własne pliki APK lub użyć BasicSample for Espresso .

Aby tworzyć pliki APK za pomocą poleceń Gradle, musisz zainstalować pakiet SDK systemu Android. Jeśli na Twoim komputerze nie jest zainstalowane Android Studio, zainstaluj Android Studio i Android SDK oraz ustaw środowisko ANDROID_HOME w katalogu Android SDK. Na przykład w pliku ~/.bash_profile dodaj następujący 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 budowania możesz znaleźć plik APK aplikacji i przetestować plik APK w następujących lokalizacjach:

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

Alternatywnie możesz skorzystać z następujących opcji, aby uzyskać pliki APK do testów i aplikacji:

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

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

Użyj interfejsu wiersza polecenia gcloud, aby przeprowadzić test w laboratorium testowym

W tej sekcji utworzysz projekt Firebase i skonfigurujesz lokalne środowisko Google Cloud SDK. Aby dowiedzieć się więcej, zobacz Rozpoczynanie testowania za pomocą interfejsu wiersza polecenia gcloud .

Skonfiguruj interfejs wiersza polecenia gcloud

  1. Pobierz pakiet Google Cloud SDK , który zawiera narzędzie gcloud CLI.
  2. Sprawdź, czy Twoja instalacja jest aktualna:
gcloud components update
  1. Zaloguj się do interfejsu wiersza polecenia gcloud przy użyciu swojego konta Google:
gcloud auth login
  1. Ustaw swój projekt Firebase w interfejsie CLI gcloud, gdzie PROJECT_ID to identyfikator projektu Firebase. Identyfikator projektu można znaleźć w adresie URL konsoli Firebase, który jest zgodny z następującą konwencją nazewnictwa: 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 .

Uruchom test, korzystając z wbudowanych plików APK

W tej sekcji przeprowadzasz test oprzyrządowania na domyślnym urządzeniu Laboratorium Testowego, czyli Pixelu 3 z poziomem API 28. Jeśli chcesz użyć innego urządzenia, sprawdź dostępne urządzenia .

Korzystając z aplikacji i testując pliki APK utworzone w ramach tworzenia aplikacji na Androida i testując plik APK, uruchom test Android Instrumentation za pomocą następującego 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

Przeanalizuj wyniki testu

Wyniki testu można analizować, korzystając z dowolnej z następujących opcji:

  • podsumowanie gcloud — po zakończeniu testu interfejs CLI gcloud drukuje podstawowe podsumowanie wyników testu.
  • Kod wyjścia gcloud — po zakończeniu testu polecenie kończy się z wartością 0, jeśli test zakończył się pomyślnie. Jeżeli test zakończy się niepowodzeniem, komenda zakończy działanie z niezerowym kodem zakończenia.
  • Konsola Firebase — interfejs CLI gcloud wyświetla link do konsoli Firebase. Link jest zgodny z konwencją nazewnictwa https://console.firebase.google.com/project/PROJECT_ID/testlab/... Aby dowiedzieć się więcej, zobacz Interpretowanie wyników wykonania pojedynczego testu .
  • Plik XML JUnit — interfejs CLI gcloud wypisuje następujące 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 przechowywane są artefakty i wyniki testów. Aby zlokalizować plik XML JUnit zawierający wyniki testu, otwórz łącze i przejdź do blueline-28-en-portrait/test_result_1.xml .

3. Skonfiguruj za pomocą Jenkins CI

W tej sekcji używasz Jenkins CI, popularnego systemu CI, do przeprowadzania testów w Test Lab. Jeśli chcesz użyć innego systemu CI, zobacz Zaawansowane najlepsze praktyki dotyczące uruchamiania dużych zestawów testów i dokumentację innych systemów CI, takich jak Bitrise i Circle CI . Możesz użyć Flanka jako alternatywy dla gcloud CLI.

Włącz interfejs wiersza polecenia gcloud dla Jenkinsa

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

Dodaj konto usługi Google Cloud dla Jenkins

Konta usług to ograniczone konta przeznaczone do integracji usług. Konta te zapewniają szczegółową kontrolę nad określonymi usługami i nie podlegają kontroli spamu ani monitom captcha, które w przeciwnym razie mogłyby blokować kompilacje CI.

Aby utworzyć konto usługi, wykonaj następujące kroki:

  1. Otwórz stronę Konta usług w Google Cloud Console.
  2. Kliknij opcję Utwórz konto usługi , dodaj nazwę i opis , a następnie kliknij opcję Utwórz i kontynuuj .
  3. Z listy rozwijanej Wybierz rolę wybierz opcję Podstawowa , a następnie Edytor .
  4. Kliknij Kontynuuj , a następnie Gotowe .

Następnie utwórz i pobierz klucz uwierzytelniający, którego Jenkins może użyć do uwierzytelnienia utworzonego konta usługi.

Aby utworzyć i pobrać klucz konta usługi, wykonaj następujące kroki:

  1. Na stronie Konta usług w Google Cloud Console kliknij adres e-mail powiązany z utworzonym kontem.
  2. Wybierz Klucze , następnie kliknij Dodaj klucz i Utwórz nowy klucz .
  3. Wybierz JSON , a następnie kliknij Utwórz .
  4. Po wyświetleniu monitu o pobranie pliku kliknij OK. Pobierz plik w bezpieczne miejsce na swoim komputerze. Będziesz potrzebować tego pliku później podczas konfigurowania Jenkinsa.

Aby dowiedzieć się więcej o tworzeniu kont usług, zobacz Tworzenie konta usługi .

Włącz wymagane interfejsy API Google Cloud

Cloud Testing API umożliwia przeprowadzanie testów na infrastrukturze Google. Włączyłeś ten interfejs API po ukończeniu Uruchom test za pomocą interfejsu wiersza polecenia gcloud. Interfejs Cloud Tool Results API umożliwia programowy dostęp do wyników testów.

  1. Otwórz bibliotekę API konsoli programistów Google .
  2. Na pasku wyszukiwania u góry konsoli Firebase wprowadź nazwę każdego wymaganego interfejsu API ( Cloud Testing API i Cloud Tool Results API ). Zostanie wyświetlona strona przeglądu żądanego interfejsu API.
  3. Kliknij opcję Włącz interfejs API na stronie przeglądu każdego interfejsu API.

Zainstaluj i skonfiguruj Jenkinsa

Możesz zainstalować i skonfigurować Jenkins CI w systemach Linux, macOS, Windows i wielu innych środowiskach. Niektóre szczegóły tego ćwiczenia z programowania dotyczą instalowania i uruchamiania Jenkins CI w systemie Linux, w tym użycia ukośników (/) w ścieżkach plików.

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

Sprawdź zainstalowane wtyczki

Jenkins obsługuje różne systemy kontroli wersji. W tych ćwiczeniach z programowania użyjesz Gita do uruchomienia poprzedniego testu. Aby uzyskać lepsze wrażenia z uruchamiania interfejsu CLI gcloud, musisz zainstalować wtyczkę GCloud SDK.

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

Skonfiguruj lokalizację zestawów SDK dla Androida i Google Cloud

Teraz instruujesz Jenkinsa, gdzie znaleźć pakiety Google Cloud SDK i Android SDK.

Aby skonfigurować zestawy SDK Google Cloud i Android dla Jenkins, wykonaj następujące kroki:

  1. Na pulpicie nawigacyjnym Jenkins kliknij Zarządzaj Jenkinsem , a następnie kliknij Globalna konfiguracja narzędzi .
  2. w sekcji Google Cloud SDK kliknij Dodaj Google Cloud SDK .
  3. W polu Nazwa wpisz łatwą do zapamiętania nazwę instancji Google Cloud SDK, na przykład GCloud-SDK.
  4. Wprowadź katalog domowy pakietu Google Cloud SDK, na przykład /opt/google-cloud-sdk .
  5. Kliknij Zapisz .
  6. Skonfiguruj właściwości ogólnosystemowe dla zestawów SDK dla Androida i Google Cloud, otwierając Dashboard > Manage Jenkins > Configure System .
  7. Zaznacz pole wyboru Zmienne środowiskowe i kliknij Dodaj .
  8. W polu Nazwa wpisz ANDROID_HOME . W polu Wartość wprowadź lokalizację pakietu SDK systemu Android, na przykład /opt/Android/Sdk .
  9. Kliknij pole wyboru Lokalizacje narzędzi i kliknij Dodaj . Z listy rozwijanej Nazwa wybierz nazwę instancji Google Cloud SDK dodanej w globalnej konfiguracji narzędzia.
  10. W polu Strona główna wpisz lokalizację pakietu SDK Google Cloud, na przykład /opt/google-cloud-sdk .
  11. Kliknij Zapisz .

Dodaj poświadczenia konta usługi do Jenkins

Teraz dodajesz dane uwierzytelniające konta usługi CLI gcloud do Jenkinsa, aby Jenkins mógł uwierzytelniać i pomyślnie uruchamiać polecenia CLI gcloud.

  1. Na pulpicie nawigacyjnym Jenkins kliknij Zarządzaj Jenkinsem , a następnie kliknij Zarządzaj poświadczeniami .
  2. W sekcji Sklepy o zasięgu Jenkins kliknij łącze domeny (globalnej) , a następnie kliknij opcję Dodaj dane uwierzytelniające .
  3. Z listy rozwijanej Rodzaj wybierz Konto usługi Google z klucza prywatnego .
  4. W polu Nazwa projektu wpisz nazwę projektu Firebase.
  5. Wybierz Klucz JSON , następnie kliknij Przeglądaj i przejdź do lokalizacji, w której zapisałeś klucz konta usługi.
  6. Kliknij opcję Utwórz .

Możesz teraz skonfigurować zautomatyzowaną kompilację Jenkins dla laboratorium testowego.

4. Przeprowadź testy w laboratorium testowym za pomocą Jenkins CI

Teraz, gdy skonfigurowałeś Jenkinsa, złóżmy wszystko w całość i przeprowadźmy ten sam test przy użyciu Jenkinsa.

Możesz skonfigurować Jenkinsa tak, aby uruchamiał automatyczne kompilacje i uruchamiał testy za każdym razem, gdy zostaną zaewidencjonowane aktualizacje Twojej aplikacji. Możesz także skonfigurować Jenkinsa, aby okresowo uruchamiał kompilacje. Aby dowiedzieć się więcej o konfigurowaniu kompilacji w Jenkins, zobacz Konfigurowanie kompilacji automatycznych .

Utwórz i skonfiguruj swój projekt Jenkins

Utwórz projekt, aby przeprowadzić ciągłe testy integracyjne swojej aplikacji za pomocą Test Lab.

Utwórz projekt Jenkinsa

  1. Otwórz pulpit nawigacyjny Jenkins, przechodząc do http://localhost:8080 .
  2. Na pulpicie nawigacyjnym Jenkins kliknij opcję Nowy element .
  3. Wprowadź nazwę projektu w polu Nazwa elementu i kliknij Projekt Freestyle , aby utworzyć projekt korzystający z konfiguracji z pojedynczą kompilacją.
  4. Kliknij OK . Aby dokończyć konfiguracje projektu, wykonaj kolejno pozostałe sekcje.

Skonfiguruj zarządzanie kodem źródłowym

  1. Na karcie Zarządzanie kodem źródłowym wybierz Git .
  2. Wpisz https://github.com/android/testing-samples.git w polu Adres URL repozytorium .

Skonfiguruj środowisko kompilacji

Sekcja Środowisko kompilacji umożliwia skonfigurowanie charakterystyki kompilacji. Włącz uwierzytelnianie Google Cloud, wykonując następujące kroki:

  1. Na karcie Środowisko kompilacji zaznacz pole wyboru Uwierzytelnianie GCloud SDK i wybierz nazwę instalacji wybraną podczas dodawania informacji instalacyjnych Google Cloud.
  2. Z listy rozwijanej Poświadczenia Google wybierz skonfigurowane poświadczenia konta usługi.

Dodaj kroki kompilacji Gradle, aby odbudować 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 uruchomić następujące polecenia w głównym katalogu aplikacji:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Dodaj krok kompilacji interfejsu CLI gcloud do Jenkinsa

Teraz możesz dodać etap kompilacji do Jenkinsa, aby uruchomić laboratorium testowe przy użyciu wiersza poleceń interfejsu CLI gcloud.

Aby dodać krok kompilacji interfejsu CLI gcloud, dodaj nowy krok kompilacji Wykonaj powłokę i wpisz następujące 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ń stronę w dół i zapisz konfigurację. Zostaniesz przekierowany na stronę główną nowego projektu.

Przeprowadź testy z Jenkinsem

Teraz możesz zbudować projekt Jenkins i uruchomić test, taki jak test ręczny, który uruchomiłeś za pomocą interfejsu wiersza polecenia gcloud.

Aby uruchomić test z Jenkinsem, wykonaj następujące kroki:

  1. Aby ręcznie uruchomić kompilację, kliknij opcję Buduj teraz .
  2. Sprawdź postęp i wyniki, klikając nową kompilację > Wyjście konsoli .

Jeśli nie widzisz błędów, gratulacje! Właśnie założyłeś projekt i jednym kliknięciem przeprowadziłeś test na urządzeniu Pixel 2. Jeśli napotkasz błędy, zobacz Rozwiązywanie problemów .

5. Zaawansowane najlepsze praktyki dotyczące uruchamiania dużych zestawów testów

Jeśli chcesz przeprowadzić wiele jednoczesnych testów, postępuj zgodnie z poniższymi najlepszymi praktykami, aby mieć pewność, że testy będą przebiegać szybko i niezawodnie.

Zwiększ zasięg w konfiguracjach wielu urządzeń

Do etapu kompilacji gcloud CLI możesz z łatwością dodać wiele urządzeń. Możesz także sprawdzać i wybierać dostępne urządzenia, wersje, ustawienia regionalne i orientacje. Na przykład następujące polecenie uruchamia testy na dwóch urządzeniach:

  • Wirtualny Google Pixel 2 z poziomem API 30 w orientacji pionowej i wersją angielską
  • Fizyczny Samsung Galaxy S20 z poziomem API 29 w orientacji poziomej i francuską lokalizacją
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 konfiguracyjnego YAML CLI gcloud

Jeśli wolisz zarządzać swoimi 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 .

Testy fragmentowe do uruchomienia równoległego

Dzielenie testów na fragmenty dzieli zestaw testów na podgrupy (fragmenty), które działają oddzielnie, w izolacji. Laboratorium testowe automatycznie uruchamia każdy fragment równolegle przy użyciu wielu urządzeń, co pozwala laboratorium testowemu szybciej ukończyć cały zestaw testów. Aby uzyskać więcej informacji, zobacz Włączanie fragmentowania .

Aby włączyć sharding, użyj kanału gcloud beta i dodaj flagę –num-uniform-shards lub –test-targets-for-shard do kroku kompilacji interfejsu wiersza polecenia gcloud. Na przykład, aby podzielić testy na pięć wykonań i uruchomić je równolegle, uruchom następujące 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 łuszczenia

Testy mobilne często mogą zawodzić. Czasami testy kończą się pomyślnie, a innym razem mogą zakończyć się niepowodzeniem, nawet przy tej samej konfiguracji. Możesz wykryć, czy nieudany test był niestabilny, używając flagi –num-flaky-test-attempts gcloud CLI. Ta flaga określa, ile razy należy ponawiać wykonanie testu, jeśli z jakiegoś powodu jeden lub więcej przypadków testowych zakończy się niepowodzeniem.

Na przykład, aby ponownie uruchomić przypadki testowe zakończone niepowodzeniem jeszcze trzy razy po pierwszym nieudanym uruchomieniu, należy podać następujące 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, pomyślnie przeprowadziłeś swój pierwszy test w laboratorium testowym z systemem CI!

Stworzyłeś aplikację i testowałeś pliki APK, a także przeprowadziłeś test oprzyrządowania w laboratorium testowym, korzystając z interfejsu wiersza polecenia gcloud. Skonfigurowałeś także projekt Jenkins, aby zautomatyzować ten sam test.

Teraz znasz kluczowe kroki integracji Laboratorium Testowego z systemem CI/CD.

Co dalej?

Sprawdź Jak skonfigurować CI za pomocą pakietu Firebase Emulator Suite

Dalsza lektura

Dokumenty referencyjne