Test Lab'i CI/CD sisteminize entegre edin

1. Giriş

Son güncelleme tarihi: 07.04.2022

CI/CD sistemleriyle mobil testler nasıl yapılır?

Mobil testler yapmak zor olabilir: Birçok uygulama farklı platformlarda, cihazlarda ve API sürümlerinde çalışır. Uygulama geliştiriciler, sorunları kullanıcılardan önce tespit etmek için mümkün olduğunca çok sayıda yapılandırma üzerinde test yapmak ister. Ancak maliyet ve kaynak kısıtlamaları nedeniyle test cihazlarının sayısı ve bireysel geliştiricilerin yatırım yapabileceği manuel bakım miktarı sınırlıdır. Özellikle sürekli entegrasyon/sürekli geliştirme (CI/CD) sistemleri için geliştirme süreci ölçeklendiğinde, test sürecinin otomatik hale getirilmesi ve bakım için gerekli çabanın en aza indirilmesi gerekir.

Uygulamalarınızın kullanıcılarınızın cihazlarında nasıl performans gösterdiğini anlamanıza yardımcı olmak için Firebase Test Lab, veri merkezlerimizde çeşitli fiziksel ve sanal cihazlar barındırır. Ayrıca, veri merkezlerimizdeki cihazlarda yürütülen testleri düzenleyen ve platformdan bağımsız bir komut satırı aracı olan Google Cloud KSA'yı da sunuyoruz. gcloud CLI, Test Lab'in bulut tabanlı test çözümünü mevcut CI/CD iş akışlarına entegre etmeyi kolaylaştırır.

Platformlar arası destek

Test Lab, Android ve iOS uygulamaları için test çözümleri ve Unity gibi mobil oyunlar için özel destek sağlar. Test seçenekleri; Android Espresso, UI Automator ve iOS XCTest gibi popüler test çerçevelerini kapsar. Test Lab, otomatik tarayıcımız Robo'yu kullanarak herhangi bir test kodu olmadan test bile çalıştırabilir.

Donanım gereksinimi yoktur

Test Lab, Google veri merkezlerinde fiziksel cihazlar, Google Cloud'da ise sanal cihazlar barındırır. Tek yapmanız gereken testlerinizi Test Lab'e göndermek ve sonuçları beklemektir.

Hızlı ve güvenilir

Çok sayıda eş zamanlı test durumu çalıştırmak uzun zaman alabilir ve CI/CD işlemlerini engelleyebilir. Test Lab ile testleri kolayca parçalayabilir ve birden fazla cihazda paralel olarak çalıştırabilirsiniz. Mobil cihazlarda testlerde sık karşılaşılan bir sorun olan pürüzleri de tespit edebilirsiniz.

Neler öğreneceksiniz?

  • Test yapıları nasıl oluşturulur?
  • gcloud KSA'yı kullanarak mobil test çalıştırma
  • Jenkins CI'yı ayarlama
  • Jenkins CI kullanarak mobil testler çalıştırma
  • CI sistemleriyle ölçeği artırmak için testleri yapılandırma

Bu codelab'de testlerin çalıştırılmasına odaklanılmaktadır. Alakalı olmayan kavramlar ve kod blokları işaretlenmiştir ve yalnızca kopyalayıp yapıştırmanız için kullanımınıza sunulmuştur.

Gerekenler

Bir şeyi sıfırdan oluşturmayı tercih ederseniz Android testi çalıştırmak için Android Studio'ya, iOS testi çalıştırmak için XCode'a ihtiyacınız vardır. Ya da siz de götürün ve eserleri size biz sağlayacağız.

2. gcloud KSA ile test çalıştırma

Bir Android uygulama APK'sı oluşturma ve test APK'sı

Test Lab ile test çalıştırmak için öncelikle bir Android uygulama APK'sı ve donanım cihazları ya da emülatörlerde çalıştırılacak araçlı testleri içeren bir test APK'sı oluşturun. Çalışan bir kod tabanınız varsa kendi APK'larınızı oluşturabilir veya Espresso için Temel Örnek'i kullanabilirsiniz.

Gradle komutlarını kullanarak APK oluşturmak için Android SDK'sını yüklemeniz gerekir. Makinenizde Android Studio yüklü değilse Android Studio'yu ve Android SDK'sını yükleyin ve Android SDK dizininizle ANDROID_HOME ortamını ayarlayın. Örneğin, ~/.bash_profile dosyanıza aşağıdaki satırı ekleyin:

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

Ardından, kodu klonlamak ve APK'ları derlemek için aşağıdaki komutları çalıştırın:

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

Klon ve derleme komutlarını çalıştırdıktan sonra, uygulama APK'sını ve test APK'sını aşağıdaki konumlarda bulabilirsiniz:

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

Alternatif olarak, test ve uygulama APK'larını edinmek için aşağıdaki seçenekleri kullanabilirsiniz:

  • Android Studio'da APK oluşturmak için Android Studio'da Test Etme bölümündeki talimatları uygulayın.
  • Örnek Not Defteri uygulamasını indirin. NotePad/app/build/outputs/apk/ konumunda bulunan app-debug-unaligned.apk ikili dosyasını ve araç testleri dosyasını app-debug-test-unaligned.apk kullanın.

Bir iOS uygulaması için çalışan kaynak kodunuz varsa bir XCTest yazabilir ve uygulamadan ve testlerden bir ZIP dosyası oluşturabilirsiniz.

Test Lab ile test çalıştırmak için gcloud KSA'yı kullanma

Bu bölümde, bir Firebase projesi oluşturup yerel Google Cloud SDK ortamınızı yapılandıracaksınız. Daha fazla bilgi edinmek için gcloud KSA ile teste başlama başlıklı makaleyi inceleyin.

gcloud CLI'ı kurma

  1. gcloud CLI aracını içeren Google Cloud SDK'yı indirin.
  2. Yüklemenizin güncel olduğunu doğrulayın:
gcloud components update
  1. Google Hesabınızı kullanarak gcloud KSA'da oturum açın:
gcloud auth login
  1. Firebase projenizi gcloud KSA'da ayarlayın. Burada PROJECT_ID, Firebase proje kimliğinizdir. Proje kimliğini, şu adlandırma kuralına göre Firebase konsolu URL'sinde bulabilirsiniz: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

Firebase projeniz yoksa Firebase Konsolu'nda proje oluşturun.

derlenen APK'ları kullanarak test çalıştırma

Bu bölümde, Test Lab'in varsayılan cihazı olan Pixel 3 üzerinde API düzeyi 28 olan bir araç testi çalıştıracaksınız. Farklı bir cihaz kullanmak istiyorsanız kullanılabilir cihazları kontrol edin.

Android uygulama APK'sı oluşturma ve test APK'sını test etme bölümünde oluşturduğunuz uygulamayı ve test APK'larını kullanarak aşağıdaki komutu kullanarak bir Android Enstrümantasyon testi çalıştırın:

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

Test sonuçlarını analiz etme

Aşağıdaki seçeneklerden herhangi birini kullanarak test sonuçlarını analiz edebilirsiniz:

  • gcloud özeti: Testiniz tamamlandığında gcloud CLI, test sonuçlarınızın temel bir özetini yazdırır.
  • gcloud çıkış kodu: Test tamamlandıktan sonra, test başarılı olursa komut 0 değeriyle çıkar. Test başarısız olursa komut sıfır olmayan bir çıkış koduyla çıkar.
  • Firebase Konsolu: gcloud CLI, Firebase Konsolu için bir bağlantı yazdırır. Bağlantı, adlandırma kuralına uygundur https://console.firebase.google.com/project/PROJECT_ID/testlab/... Daha fazla bilgi edinmek için Tek bir test yürütmesinin sonuçlarını yorumlama başlıklı makaleyi inceleyin.
  • JUnit XML dosyası: gcloud CLI şunu yazdırır:
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, test yapılarını ve sonuçlarını depolayan Cloud Storage paketidir. Test sonuçlarını içeren JUnit XML dosyasını bulmak için bağlantıyı açıp blueline-28-en-portrait/test_result_1.xml konumuna gidin.

3. Jenkins CI ile kurulum

Bu bölümde Test Lab ile testler çalıştırmak için popüler bir CI sistemi olan Jenkins CI'yı kullanacaksınız. Farklı bir CI sistemi kullanmak istiyorsanız büyük test paketlerini çalıştırmak için gelişmiş en iyi uygulamalar sayfasına ve Bitrise ile Circle CI gibi diğer CI sistemlerine ilişkin dokümanlara bakın. gcloud KSA'ya alternatif olarak Flank'ı kullanabilirsiniz.

Jenkins için gcloud CLI'ı etkinleştirin

Test Lab'i Jenkins ile kullanabilmek için öncelikle gerekli API'leri etkinleştirmeniz ve Jenkins'in gcloud KSA ile kimlik doğrulamak için kullanabileceği bir hizmet hesabı oluşturmanız gerekir.

Jenkins için bir Google Cloud hizmet hesabı ekleyin

Hizmet hesapları, hizmet entegrasyonuna yönelik sınırlı hesaplardır. Bu hesaplar, belirli hizmetler için ayrıntılı denetim sunar ve spam kontrollerine veya captcha istemlerine tabi değildir. Bu durum, CI derlemelerinizin engellenmesine yol açabilir.

Hizmet hesabı oluşturmak için şu adımları uygulayın:

  1. Google Cloud Console'da Hizmet Hesapları sayfasını açın.
  2. Hizmet hesabı oluştur'u tıklayın, Ad ve Açıklama ekleyin, ardından Oluştur ve devam et'i tıklayın.
  3. Rol seçin açılır menüsünden Temel'i, ardından Düzenleyici'yi seçin.
  4. Devam'ı, ardından Bitti'yi tıklayın.

Şimdi, Jenkins'in oluşturduğunuz hizmet hesabı olarak kimlik doğrulaması yapmak için kullanabileceği bir kimlik doğrulama anahtarı oluşturup indirin.

Hizmet hesabı anahtarını oluşturmak ve indirmek için şu adımları uygulayın:

  1. Google Cloud Console'daki Hizmet Hesapları sayfasında, oluşturduğunuz hesapla ilişkili e-posta adresini tıklayın.
  2. Anahtarlar'ı seçin, ardından Anahtar ekle ve Yeni anahtar oluştur'u tıklayın.
  3. JSON'yi seçip Oluştur'u tıklayın.
  4. Dosyayı indirmeniz istendiğinde Tamam'ı tıklayın. Dosyayı bilgisayarınızda güvenli bir yere indirin. Daha sonra Jenkins'i yapılandırırken bu dosyaya ihtiyacınız olacak.

Hizmet hesapları oluşturma hakkında daha fazla bilgi edinmek için Hizmet hesabı oluşturma başlıklı makaleyi inceleyin.

Gerekli Google Cloud API'lerini etkinleştirin

Cloud Testing API, Google altyapısı üzerinde testler çalıştırmanızı sağlar. gcloud KSA ile test çalıştırma işlemini tamamladıktan sonra bu API'yi etkinleştirdiniz. Cloud Tool Results API, test sonuçlarınıza programatik olarak erişmenizi sağlar.

  1. Google Developers Console API Kitaplığı'nı açın.
  2. Firebase Konsolu'nun üst kısmındaki arama çubuğuna gerekli her bir API'nin adını ( Cloud Testing API ve Cloud Tool Results API) girin. İstenen API'nin genel bakış sayfası görünür.
  3. Her API'nin genel bakış sayfasında API'yi etkinleştir'i tıklayın.

Jenkins'i yükleme ve ayarlama

Jenkins CI'yı Linux, macOS, Windows ve diğer birçok ortamda yükleyip kurabilirsiniz. Bu codelab'in belirli ayrıntıları, dosya yollarında eğik çizgi (/) kullanımı da dahil olmak üzere Linux'ta Jenkins CI'nın yüklenmesi ve çalıştırılması ile ilgilidir.

Jenkins'i Linux veya Windows çalıştıran bir bilgisayara indirip yüklemek için Jenkins'i yükleme talimatlarını uygulayın. Jenkins'i yükledikten sonra, kurulumu tamamlamak ve http://localhost:8080 adresini kullanarak Jenkins kontrol paneline erişmek için aynı Jenkins yükleme talimatlarını uygulayın.

Yüklü eklentileri doğrulama

Jenkins, farklı sürüm kontrol sistemlerini destekler. Bu codelab'de, önceki testi çalıştırmak için Git'i kullanacaksınız. gcloud KSA'yı çalıştırma konusunda daha iyi bir deneyim için de GCloud SDK Eklentisi'ni yüklemeniz gerekir.

  1. Jenkins kontrol panelinde, Manage Jenkins'i (Jenkins'i Yönetin) sepete gidip Manage Plugins'i (Eklentileri Yönet) tıklayın.
  2. Git ve GCloud SDK eklentilerini arayın ve yükleyin (henüz yüklü değilse).

Android ve Google Cloud SDK'larınızın konumunu yapılandırma

Artık Jenkins'e Google Cloud SDK'yı ve Android SDK'yı nerede bulacağı konusunda talimat verebilirsiniz.

Jenkins için Google Cloud ve Android SDK'larını yapılandırmak üzere aşağıdaki adımları uygulayın:

  1. Jenkins kontrol panelinde, Manage Jenkins'i (Jenkins'i Yönet) ve ardından Global Tool Configuration'ı (Global Araç Yapılandırması) tıklayın.
  2. Google Cloud SDK bölümünde Add Google Cloud SDK'yı (Google Cloud SDK'yı Ekle) tıklayın.
  3. Ad alanına Google Cloud SDK örneği için akılda kalıcı bir ad girin (ör. GCloud-SDK).
  4. Google Cloud SDK'nızın ana dizinini girin (ör. /opt/google-cloud-sdk).
  5. Kaydet'i tıklayın.
  6. Kontrol Paneli > Jenkins'i yönetin > Sistemi Yapılandır'ı tıklayın.
  7. Ortam değişkenleri onay kutusunu seçip Ekle'yi tıklayın.
  8. Name (Ad) alanına ANDROID_HOME yazın. Değer alanına Android SDK'nızın konumunu girin (ör. /opt/Android/Sdk).
  9. Araç Konumları onay kutusunu işaretleyip Ekle'yi tıklayın. Ad açılır listesinden Global Araç Yapılandırması'na eklediğiniz Google Cloud SDK örneğinin adını seçin.
  10. Home (Ana Sayfa) alanına Google Cloud SDK'nızın konumunu girin (ör. /opt/google-cloud-sdk).
  11. Kaydet'i tıklayın.

Hizmet hesabı kimlik bilgilerinizi Jenkins'e ekleyin

Jenkins'in kimlik doğrulaması yapabilmesi ve gcloud CLI komutlarını başarıyla çalıştırabilmesi için gcloud CLI hizmet hesabı kimlik bilgilerinizi Jenkins'e ekleyebilirsiniz.

  1. Jenkins kontrol panelinde, Manage Jenkins'i (Jenkins'i Yönet) tıklayıpManage Credentials'ı (Kimlik Bilgilerini Yönet) tıklayın.
  2. Jenkins'e dahil edilen mağazalar bölümünde (global) alan bağlantısını, ardından Add Credentials'ı (Kimlik Bilgisi Ekle) tıklayın.
  3. Tür açılır listesinden Özel anahtardan Google Hizmet Hesabı'nı seçin.
  4. Proje Adı alanına Firebase projenizin adını girin.
  5. JSON anahtarı'nı, ardından Göz at'ı tıklayın ve hizmet hesabı anahtarınızı kaydettiğiniz konuma göz atın.
  6. Oluştur'u tıklayın.

Artık Test Lab için Jenkins otomatik derlemenizi yapılandırmaya hazırsınız.

4. Jenkins CI ile Test Lab testleri çalıştırın

Artık Jenkins'i ayarladığınıza göre her şeyi bir araya getirelim ve Jenkins kullanarak aynı testi çalıştıralım.

Jenkins'i, otomatik derlemeler çalıştıracak ve uygulamanızda yapılan her güncelleme için testler çalıştıracak şekilde yapılandırabilirsiniz. Jenkins'i, derlemeleri düzenli olarak çalıştıracak şekilde de yapılandırabilirsiniz. Jenkins'te derlemeleri yapılandırma hakkında daha fazla bilgi edinmek için Otomatik derlemeleri yapılandırma bölümüne bakın.

Jenkins projenizi oluşturma ve yapılandırma

Test Lab ile uygulamanızın sürekli entegrasyon testini yapmak için bir proje oluşturun.

Jenkins projesi oluşturma

  1. http://localhost:8080 adresine giderek Jenkins kontrol panelini açın.
  2. Jenkins kontrol panelinde New Item (Yeni Öğe) seçeneğini tıklayın.
  3. Öğe adı alanına projeniz için bir ad girin ve tek bir derleme yapılandırması kullanan bir proje oluşturmak için Freestyle projesi'ni tıklayın.
  4. Tamam'ı tıklayın. Proje yapılandırmalarını tamamlamak için kalan bölümleri sırayla tamamlayın.

Kaynak kodu yönetimini yapılandırın

  1. Source Code Management (Kaynak Kodu Yönetimi) sekmesinde Git'i seçin.
  2. Kod deposu URL'si alanına https://github.com/android/testing-samples.git adresini girin.

Derleme ortamını yapılandırma

Derleme Ortamı bölümünden derleme özelliklerini yapılandırabilirsiniz. Şu adımları uygulayarak Google Cloud kimlik doğrulamasını etkinleştirin:

  1. Derleme Ortamı sekmesinde, GCloud SDK kimlik doğrulaması onay kutusunu işaretleyin ve Google Cloud yükleme bilgilerinizi eklerken seçtiğiniz yükleme adını seçin.
  2. Google Kimlik Bilgileri açılır menüsünden, yapılandırdığınız hizmet hesabı kimlik bilgilerini seçin.

APK paketlerini yeniden oluşturmak için Gradle derleme adımlarını ekleyin

  1. Build (Derleme) bölümüne ilerleyin, Add build step'i (Derleme adımı ekle) tıklayın ve ardından Execute shell'i (Kabuk çalıştır) seçin.
  2. Uygulamanızın ana dizininde aşağıdaki komutları çalıştırmak için bir derleme adımı ekleyin:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Jenkins'e gcloud CLI derleme adımı ekleyin

Artık gcloud CLI komut satırını kullanarak Test Lab'i çalıştırmak için Jenkins'e bir derleme adımı eklemeye hazırsınız.

gcloud CLI derleme adımını eklemek için yeni bir Execute shell derleme adımı ekleyin ve aşağıdaki komutu girin:

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

Proje kurulumunu tamamladıktan sonra sayfanın en altına gidin ve yapılandırmayı kaydedin. Yeni projenin ana sayfasına yönlendirilirsiniz.

Jenkins ile testler çalıştırma

Artık Jenkins projesini derlemeye ve gcloud CLI ile çalıştırdığınız manuel teste benzer bir test çalıştırmaya hazırsınız.

Jenkins ile test yapmak için aşağıdaki adımları uygulayın:

  1. Derlemeyi manuel olarak tetiklemek için Build Now'ı (Şimdi Derle) tıklayın.
  2. Yeni derlemeyi tıklayarak ilerleme durumunu ve sonuçları kontrol edin > Konsol Çıkışı.

Hata görmüyorsanız sizi tebrik ederiz! Az önce bir proje oluşturdunuz ve tek tıklamayla Pixel 2 cihazda test yaptınız. Hatalarla karşılaşırsanız Sorun Giderme bölümünü inceleyin.

5. Büyük test paketleri çalıştırmak için gelişmiş en iyi uygulamalar

Aynı anda çok sayıda test gerçekleştirmek istediğinizde, testlerinizin hızlı ve güvenilir bir şekilde yürütülmesini sağlamak için aşağıdaki en iyi uygulamaları izleyin.

Birden fazla cihaz yapılandırmasında kapsamı artırma

gcloud CLI derleme adımına kolayca birden fazla cihaz ekleyebilirsiniz. Ayrıca kullanılabilir cihazları, sürümleri, yerel ayarları ve yönleri kontrol edebilir ve seçebilirsiniz. Örneğin, aşağıdaki komut iki cihazda testleri çalıştırır:

  • Dikey yönde ve İngilizce yerel ayarda API düzeyi 30'a sahip sanal bir Google Pixel 2
  • Yatay yönde ve Fransız yerel ayarında API düzeyi 29 ile fiziksel bir Samsung Galaxy S20
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

gcloud CLI YAML yapılandırma dosyası kullanma

Bağımsız değişkenlerinizi tek bir yerde veya kaynak kontrol sisteminizle yönetmeyi tercih ederseniz bu bağımsız değişkenleri YAML biçimli bir bağımsız değişken dosyasında belirtebilirsiniz. Bu özelliği nasıl kullanacağınızı öğrenmek için gcloud topic arg-files komutunu çalıştırın.

Paralel olarak çalıştırılacak parça testleri

Test parçalama, bir dizi testi, ayrı ayrı çalışan alt gruplara (kırıklar) böler. Test Lab, her kırığı birden fazla cihaz kullanarak otomatik olarak paralel şekilde çalıştırır. Böylece, Test Lab'in tüm testleri daha hızlı bir şekilde tamamlaması sağlanır. Daha fazla bilgi için Parçalamayı etkinleştirme bölümüne bakın.

Parçalamayı etkinleştirmek için gcloud beta kanalını kullanın ve gcloud KSA derleme adımına –num-uniform-shards veya –test-targets-for-shard işaretini ekleyin. Örneğin, testlerinizi beş yürütmeye bölmek ve paralel olarak çalıştırmak için aşağıdaki komutları çalıştırın:

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

Pürüzsüzlük algılamayı etkinleştir

Mobil testler genellikle güvenilir olmayabilir. Testler bazen başarılı olur, bazen de aynı kurulumda bile başarısız olabilir. Başarısız bir testin güvenilir olup olmadığını –num-flaky-test-attempts gcloud KSA işaretini kullanarak tespit edebilirsiniz. Bu işaret, test durumlarından bir veya daha fazlasının herhangi bir nedenle başarısız olması durumunda bir test yürütmenin kaç kez tekrar denenmesi gerektiğini belirtir.

Örneğin, ilk başarısız çalıştırmadan sonra başarısız test durumlarını üç kez daha yeniden çalıştırmak için aşağıdakileri belirtin:

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

6. Tebrikler

Tebrikler, CI sistemiyle ilk Test Lab testinizi başarıyla çalıştırdınız.

Uygulama ve test APK'ları derlediniz ve gcloud KSA'yı kullanarak Test Lab ile bir araç testi çalıştırdınız. Aynı testi otomatik hale getirmek için bir Jenkins projesi de oluşturabilirsiniz.

Artık Test Lab'i CI/CD sisteminize entegre etmek için gerekli temel adımları biliyorsunuz.

Sırada ne var?

How to set up CI using the Firebase Emulator Suite (Firebase Emulator Suite kullanarak CI kurulumu yapma) başlıklı makaleye göz atın.

Daha fazla bilgi

Referans belgeler