1. Giriş
Last Updated: 2022-04-07
CI/CD sistemleriyle mobil testler nasıl çalıştırılır?
Mobil testler yapmak zor olabilir: Birçok uygulama farklı platformlarda, cihazlarda ve API sürümlerinde çalışır. Uygulama geliştiriciler, kullanıcıları sorunlarla karşılaşmadan önce sorunları yakalamak için mümkün olduğunca çok yapılandırmada test yapmak ister. Ancak maliyet ve kaynak kısıtlamaları, test cihazlarının sayısını ve bağımsız geliştiricilerin yapabileceği manuel bakım miktarını sınırlar. Geliştirme süreci ölçeklendirildiğinde, özellikle sürekli entegrasyon/sürekli geliştirme (CI/CD) sistemlerinde test sürecinin otomatikleştirilmesi ve bakım maliyeti ile çabasının en aza indirilmesi gerekir.
Firebase Test Lab, uygulamalarınızın kullanıcı cihazlarındaki performansını anlamanıza yardımcı olmak için veri merkezlerimizde çeşitli fiziksel ve sanal mobil cihazlar barındırır. Ayrıca, veri merkezlerimizdeki cihazlarda testlerin çalıştırılmasını düzenleyen, platformdan bağımsız bir komut satırı aracı olan Google Cloud CLI'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 sunar. Test seçenekleri arasında Android Espresso, UI Automator ve iOS XCTest gibi popüler test çerçeveleri yer alır. Test Lab, otomatik tarayıcımız Robo'yu kullanarak test kodu olmadan bile testler çalıştırabilir.
Donanım gereksinimi yok
Test Lab, Google veri merkezlerinde fiziksel cihazları, Google Cloud'da ise sanal cihazları barındırır. Testlerinizi Test Lab'e göndermeniz ve sonuçları beklemeniz yeterlidir.
Hızlı ve güvenilir
Aynı anda çok sayıda test durumu çalıştırmak uzun zaman alabilir ve CI/CD süreçlerini engelleyebilir. Test Lab ile testleri kolayca parçalara ayırabilir ve birden fazla cihazda paralel olarak çalıştırabilirsiniz. Ayrıca, yaygın bir mobil test sorunu olan kararsızlığı da tespit edebilirsiniz.
Neler öğreneceksiniz?
- Test yapıları oluşturma
- gcloud KSA'yı kullanarak mobil test çalıştırma
- Jenkins CI'yı ayarlama
- Jenkins CI kullanarak mobil testleri çalıştırma
- Testleri CI sistemleriyle ölçeklenecek şekilde yapılandırma
Bu codelab, test çalıştırmaya odaklanmaktadı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
Her şeyi sıfırdan oluşturmayı tercih ediyorsanız Android testi çalıştırmak için Android Studio'yu, iOS testi çalıştırmak için ise Xcode'u kullanmanız gerekir. Dilerseniz sadece kendiniz gelin, eserleri biz sağlarız.
2. gcloud KSA ile test çalıştırma
Android uygulama APK'sı ve test APK'sı oluşturma
Test Lab ile test çalıştırmak için öncelikle bir Android uygulaması APK'sı ve donanım cihazlarda veya emülatörlerde çalıştırılacak enstrümanlı testler içeren bir test APK'sı oluşturun. Çalışan bir kod tabanınız varsa kendi APK'larınızı oluşturabilir veya BasicSample for Espresso'yu kullanabilirsiniz.
Gradle komutlarını kullanarak APK oluşturmak için Android SDK'yı yüklemeniz gerekir. Android Studio, makinenize yüklenmemişse Android Studio ve Android SDK'yı yükleyin ve ANDROID_HOME
ortamını Android SDK dizininizle 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ı oluşturmak 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
Klonlama 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ı almak 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 Notepad uygulamasını indirin.
NotePad/app/build/outputs/apk/
klasöründe bulunan ikili dosyayıapp-debug-unaligned.apk
ve enstrümantasyon testleri dosyasınıapp-debug-test-unaligned.apk
kullanın.
Bir iOS uygulaması için çalışan kaynak kodunuz varsa 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şturacak ve yerel Google Cloud SDK ortamınızı yapılandıracaksınız. Daha fazla bilgi edinmek için gcloud CLI ile test etmeye başlama başlıklı makaleyi inceleyin.
gcloud CLI'yı ayarlama
- gcloud KSA aracını içeren Google Cloud SDK'yı indirin.
- Yüklemenizin güncel olduğunu doğrulayın:
gcloud components update
- Google Hesabınızı kullanarak gcloud CLI'da oturum açın:
gcloud auth login
- Firebase projenizi gcloud CLI'da ayarlayın. Burada
PROJECT_ID
, Firebase proje kimliğinizdir. Proje kimliğini, şu adlandırma kuralına uyan Firebase Konsolu URL'sinde bulabilirsiniz:https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID
Firebase projeniz yoksa Firebase konsolunda bir proje oluşturun.
Oluşturulan APK'ları kullanarak test çalıştırma
Bu bölümde, Test Lab'in varsayılan cihazında (API düzeyi 28 olan bir Pixel 3) enstrümantasyon testi çalıştıracaksınız. Farklı bir cihaz kullanmak istiyorsanız kullanılabilir cihazları kontrol edin.
Android uygulama APK'sı oluşturma ve APK'yı test etme bölümünde oluşturduğunuz uygulamayı ve test APK'larını kullanarak aşağıdaki komutla 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
Test sonuçlarını aşağıdaki seçeneklerden herhangi birini kullanarak analiz edebilirsiniz:
gcloud
summary: 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 ile çıkar. Test başarısız olursa komut, sıfır olmayan bir çıkış koduyla çıkar.- Firebase Konsolu: gcloud CLI, Firebase Konsolu'nun bağlantısını yazdırır. Bağlantı,
https://console.firebase.google.com/project/PROJECT_ID/testlab/...
adlandırma kuralına uygundur. Daha fazla bilgi için Tek bir test yürütmesinden elde edilen sonuçları yorumlama başlıklı makaleyi inceleyin. - JUnit XML dosyası: gcloud CLI, aşağıdakileri 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çın ve blueline-28-en-portrait/test_result_1.xml
bölümüne gidin.
3. Jenkins CI ile kurulum
Bu bölümde, Test Lab ile test ç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ırmaya yönelik gelişmiş en iyi uygulamalar ve Bitrise ile Circle CI gibi diğer CI sistemlerinin dokümanlarına bakın. gcloud KSA'ya alternatif olarak Flank'ı kullanabilirsiniz.
Jenkins için gcloud CLI'yı etkinleştirme
Test Lab'i Jenkins ile kullanabilmek için gerekli API'leri etkinleştirmeniz ve Jenkins'in gcloud CLI ile kimlik doğrulaması yapmak için kullanabileceği bir hizmet hesabı oluşturmanız gerekir.
Jenkins için Google Cloud hizmet hesabı ekleme
Hizmet hesapları, hizmet entegrasyonları için tasarlanmış sınırlı hesaplardır. Bu hesaplar, belirli hizmetler için ayrıntılı kontrol sunar ve aksi takdirde CI derlemelerinizi engelleyebilecek spam kontrollerine veya captcha istemlerine tabi değildir.
Hizmet hesabı oluşturmak için aşağıdaki adımları uygulayın:
- Google Cloud Console'da Hizmet Hesapları sayfasını açın.
- Hizmet hesabı oluştur'u tıklayın, Ad ve Açıklama ekleyin, ardından Oluştur ve devam et'i tıklayın.
- Rol seçin açılır listesinden Temel'i ve ardından Düzenleyici'yi seçin.
- Devam'ı, ardından Bitti'yi tıklayın.
Ardından, Jenkins'in oluşturduğunuz hizmet hesabı olarak kimliğini doğrulamak için kullanabileceği bir kimlik doğrulama anahtarı oluşturup indirirsiniz.
Hizmet hesabı anahtarını oluşturmak ve indirmek için aşağıdaki adımları uygulayın:
- Google Cloud Console'daki Hizmet Hesapları sayfasında, oluşturduğunuz hesapla ilişkili e-postayı tıklayın.
- Anahtarlar'ı seçin, ardından Anahtar ekle ve Yeni anahtar oluştur'u tıklayın.
- JSON'ı seçin ve Oluştur'u tıklayın.
- Dosyayı indirmeniz istendiğinde Tamam'ı tıklayın. Dosyayı bilgisayarınızda güvenli bir yere indirin. Bu dosyaya daha sonra Jenkins'i yapılandırırken ihtiyacınız olacaktır.
Hizmet hesabı 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ında testler çalıştırmanıza olanak tanır. Bu API'yi, gcloud CLI ile test çalıştırma bölümünü tamamladığınızda etkinleştirmiştiniz. Cloud Tool Results API, test sonuçlarınıza programatik olarak erişmenizi sağlar.
- Google Developers Console API Kitaplığı'nı açın.
- Firebase konsolunun üst kısmındaki arama çubuğuna gerekli her API'nin adını ( Cloud Testing API ve Cloud Tool Results API) girin. İstenen API'nin genel bakış sayfası görünür.
- Her API'nin genel bakış sayfasında API'yi etkinleştir'i tıklayın.
Jenkins'i yükleme ve ayarlama
Jenkins CI'ı Linux, macOS, Windows ve diğer birçok ortama yükleyip ayarlayabilirsiniz. Bu codelab'deki bazı ayrıntılar, dosya yollarında eğik çizgi (/) kullanılması da dahil olmak üzere Jenkins CI'ın Linux'a yüklenmesi ve Linux'ta çalıştırılmasına özeldir.
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 kullanırsınız. gcloud KSA'yı daha iyi bir deneyimle çalıştırmak için GCloud SDK eklentisini yüklemeniz gerekir.
- Jenkins kontrol panelinde Manage Jenkins'i (Jenkins'i Yönet) ve ardından Manage Plugins'i (Eklentileri Yönet) tıklayın.
- Git ve GCloud SDK eklentilerini arayın ve henüz yüklenmemişlerse yükleyin.
Android ve Google Cloud SDK'larınızın konumunu yapılandırma
Artık Jenkins'e Google Cloud SDK ve Android SDK'nın nerede bulunacağını söylüyorsunuz.
Jenkins için Google Cloud ve Android SDK'larını yapılandırmak üzere aşağıdaki adımları uygulayın:
- Jenkins kontrol panelinde Manage Jenkins'i (Jenkins'i Yönet) ve ardından Global Tool Configuration'ı (Genel Araç Yapılandırması) tıklayın.
- Google Cloud SDK bölümünde Google Cloud SDK ekle'yi tıklayın.
- Ad alanına, Google Cloud SDK örneği için kolayca hatırlanabilecek bir ad girin (örneğin, GCloud-SDK).
- Google Cloud SDK ana dizininizi girin (örneğin,
/opt/google-cloud-sdk
). - Kaydet'i tıklayın.
- Kontrol Paneli > Jenkins'i Yönet > Sistemi Yapılandır'ı açarak Android ve Google Cloud SDK'ları için sistem genelindeki özelliklerinizi yapılandırın.
- Ortam değişkenleri onay kutusunu işaretleyin ve Ekle'yi tıklayın.
- Name (Ad) alanına ANDROID_HOME girin. Değer alanına Android SDK'nızın konumunu girin (ör.
/opt/Android/Sdk
). - Araç Konumları onay kutusunu ve Ekle'yi tıklayın. Ad açılır listesinden, Global Araç Yapılandırması'nda eklediğiniz Google Cloud SDK örneğinin adını seçin.
- Home (Ana dizin) alanına Google Cloud SDK'nızın konumunu girin (ör.
/opt/google-cloud-sdk
). - Kaydet'i tıklayın.
Hizmet hesabı kimlik bilgilerinizi Jenkins'e ekleme
Artık Jenkins'in kimliğini doğrulayabilmesi ve gcloud CLI komutlarını başarıyla çalıştırabilmesi için gcloud CLI hizmet hesabı kimlik bilgilerinizi Jenkins'e ekleyebilirsiniz.
- Jenkins kontrol panelinde Manage Jenkins'i (Jenkins'i Yönet) ve ardından Manage Credentials'ı (Kimlik Bilgilerini Yönet) tıklayın.
- Stores scoped to Jenkins (Jenkins'e göre kapsamlandırılmış depolar) bölümünde (global) alan adı bağlantısını ve ardından Add Credentials'ı (Kimlik bilgileri ekle) tıklayın.
- Tür açılır listesinden Özel anahtardan Google hizmet hesabı'nı seçin.
- Proje Adı alanına Firebase proje adınızı girin.
- JSON anahtarı'nı seçin, ardından Göz at'ı tıklayın ve hizmet hesabı anahtarınızı kaydettiğiniz konuma gidin.
- Oluştur'u tıklayın.
Artık Jenkins otomatik derlemenizi Test Lab için yapılandırmaya hazırsınız.
4. Jenkins CI ile Test Lab testleri çalıştırma
Jenkins'i kurduğunuza göre şimdi her şeyi bir araya getirelim ve Jenkins'i kullanarak aynı testi çalıştıralım.
Jenkins'i, otomatik derlemeler çalıştıracak ve uygulamanızdaki güncellemeler her kontrol edildiğinde 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 başlıklı makaleyi inceleyin.
Jenkins projenizi oluşturma ve yapılandırma
Uygulamanızın Test Lab ile sürekli entegrasyon testini çalıştırmak için bir proje oluşturun.
Jenkins projesi oluşturma
- http://localhost:8080 adresine giderek Jenkins kontrol panelini açın.
- Jenkins kontrol panelinde New Item'ı (Yeni Öğe) tıklayın.
- Öğe adı alanına projeniz için bir ad girin ve tek bir derleme yapılandırması kullanan bir proje oluşturmak için Serbest stil proje'yi tıklayın.
- 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ırma
- Kaynak Kodu Yönetimi sekmesinde Git'i seçin.
- Repository URL (Depo URL'si) alanına https://github.com/android/testing-samples.git adresini girin.
Derleme ortamını yapılandırma
Derleme Ortamı bölümünde derleme özelliklerini yapılandırabilirsiniz. Aşağıdaki adımları uygulayarak Google Cloud kimlik doğrulamasını etkinleştirin:
- Build Environment (Derleme Ortamı) sekmesinde GCloud SDK authentication (GCloud SDK kimlik doğrulaması) onay kutusunu işaretleyin ve Google Cloud yükleme bilgilerinizi eklerken seçtiğiniz yükleme adını belirleyin.
- Google Kimlik Bilgileri açılır listesinden, yapılandırdığınız hizmet hesabı kimlik bilgilerini seçin.
APK paketlerini yeniden oluşturmak için Gradle derleme adımları ekleme
- Build (Derleme) bölümüne gidin, Add build step'i (Derleme adımı ekle) tıklayın ve Execute shell'i (Kabuğu yürüt) seçin.
- 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ı ekleme
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 test çalıştırma
Artık Jenkins projesini oluşturmaya ve gcloud CLI ile çalıştırdığınız manuel teste benzer bir test çalıştırmaya hazırsınız.
Jenkins ile test çalıştırmak için aşağıdaki adımları uygulayın:
- Derlemeyi manuel olarak tetiklemek için Şimdi Derle'yi tıklayın.
- Yeni derleme > Console Output'u (Konsol Çıkışı) tıklayarak ilerleme durumunu ve sonuçları kontrol edin.
Hata görmüyorsanız tebrikler. Tek bir tıklamayla proje oluşturup Pixel 2 cihazda test çalıştırdınız. Hatayla karşılaşırsanız Sorun giderme bölümüne bakın.
5. Büyük test paketlerini çalıştırmaya yönelik gelişmiş en iyi uygulamalar
Aynı anda çok sayıda test çalıştırmak istediğinizde testlerinizin hızlı ve güvenilir bir şekilde çalışmasını sağlamak için aşağıdaki en iyi uygulamaları takip edin.
Birden fazla cihaz yapılandırmasında kapsamı artırma
gcloud CLI derleme adımına birden fazla cihazı kolayca ekleyebilirsiniz. Ayrıca, kullanılabilir cihazları, sürümleri, yerel ayarları ve yönleri kontrol edip seçebilirsiniz. Örneğin, aşağıdaki komut iki cihazda test çalıştırır:
- Portre yönünde ve İngilizce yerel ayarıyla API düzeyi 30 olan sanal bir Google Pixel 2
- Yatay yönde ve Fransızca yerel ayarında API düzeyi 29 olan 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 KSA YAML yapılandırma dosyası kullanma
Bağımsız değişkenlerinizi tek bir yerden 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ışacak parça testleri
Test parçalama, bir dizi testi ayrı olarak ve yalıtılmış şekilde çalışan alt gruplara (parçalar) böler. Test Lab, her parçayı birden fazla cihaz kullanarak otomatik olarak paralel şekilde çalıştırır. Bu sayede Test Lab, testlerin tamamını daha hızlı bir şekilde tamamlayabilir. Daha fazla bilgi için Parçalama özelliğini etkinleştirme başlıklı makaleyi inceleyin.
Parçalamayı etkinleştirmek için gcloud beta
kanalını kullanın ve gcloud CLI 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
Kararsızlık algılamayı etkinleştirme
Mobil testler genellikle güvenilir değildir. Bazen testler aynı kurulumla bile başarılı olurken bazen başarısız olabilir. Başarısız olan bir testin kararsız olup olmadığını –num-flaky-test-attempts gcloud KSA işaretini kullanarak tespit edebilirsiniz. Bu işaret, test durumlarından biri veya daha fazlası herhangi bir nedenle başarısız olursa test yürütmenin kaç kez yeniden denenmesi gerektiğini belirtir.
Örneğin, ilk başarısız çalıştırmadan sonra başarısız test senaryolarını üç kez daha ç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, ilk Test Lab testinizi bir CI sistemiyle başarıyla çalıştırdınız.
Uygulama ve test APK'ları oluşturdunuz ve gcloud CLI'yı kullanarak Test Lab ile bir enstrümantasyon testi çalıştırdınız. Aynı testi otomatikleştirmek için bir Jenkins projesi de oluşturursunuz.
Artık Test Lab'i CI/CD sisteminize entegre etmenin temel adımlarını biliyorsunuz.
Sırada ne var?
Firebase Emulator Suite'i kullanarak CI ayarlama başlıklı makaleye göz atın.
Daha fazla bilgi
- CI sistemleriyle test etmeye başlama | Firebase Dokümanları
- gcloud CLI ile test etmeye başlama | Firebase Belgeleri
Referans belgeleri
- gcloud firebase test android | Google Cloud CLI Documentation (gcloud firebase test android | Google Cloud CLI Belgeleri)
- Jenkins Kullanıcı Belgeleri