Bu kılavuzda, Firebase Test Lab kullanarak bir enstrümantasyon testini nasıl hazırlayacağınız ve çalıştıracağınız açıklanmaktadır. Bu kılavuzu kullanmak için Espresso veya UI Automator Android test çerçevelerini kullanan bir enstrümantasyon testi (sizin veya ekibiniz tarafından yazılmış) gerekir. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya kadar, sanal cihazlarda ise 60 dakikaya kadar çalıştırılabilir.
Daha sonraki adımlarda uygulamanızın APK'sını ve testinizin APK'sını Firebase'e yükleyeceksiniz.
(İsteğe bağlı) Ekran görüntüsü kitaplığını uygulamanıza ekleyin
Firebase Test Lab, Espresso test çerçevesi kullanılarak yazılan testler gibi enstrümantasyon testleri çalıştırırken AndroidX'in ScreenCapture ile aldığınız tüm ekran görüntülerini işlemek için kullanabileceğiniz bir kitaplık (testlab-instr-lib) içerir.
Bu bölümde, AndroidX kitaplığıyla ScreenCapture
nesnelerinin nasıl oluşturulacağı ve testlab-instr-lib kullanılarak nasıl işleneceği açıklanmaktadır.
Enstrümantasyon testiniz çalıştırıldıktan sonra, yakalanan ekran görüntülerini Firebase konsolunda görüntüleyebilirsiniz.
Örnek bir uygulamayı deneyin
Bu işlevi denemek için NotePad örnek uygulamasını indirin. Ekran görüntüsü alma özelliği, Not Defteri projesine zaten dahil edilmiştir.
1. Adım. Ekran görüntüsü kitaplığını projenize ekleme
Test projenizin kök düzeyindeki ayarlar Gradle dosyasında (
settings.gradle.kts
veyasettings.gradle
), Google'ın Maven deposunu herrepositories
bölümüne ekleyin:pluginManagement { repositories { // Add the following line: google() // Google's Maven repository mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // Add the following line: google() // Google's Maven repository mavenCentral() } } // ...
Modülünüzün (uygulama düzeyi) Gradle dosyasına (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
) ekran görüntüsü kitaplığı için bir bağımlılık ekleyin.Test Labdependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
Testinizin
AndroidManifest.xml
dosyasında,<instrumentation>
öğesi içindeki bir meta veri etiketindeFirebaseScreenCaptureProcessor
öğesini kaydedin. Ayrıca, işlemciyi AndroidJUnitRunner'da bağımsız değişken olarak da belirtebilirsiniz (nasıl yapılacağıyla ilgili talimatlar için AndroidJUnitRunner referans belgelerine bakın).<instrumentation // Check that you have the following line (if not, add it): android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner android:targetPackage="com.your.package.name"> // Add the following: <meta-data android:name="screenCaptureProcessors" android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" /> </instrumentation> ...
Uygulamanızın
AndroidManifest.xml
dosyasına,<manifest>
öğesinin içine aşağıdaki satırları ekleyin:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
AndroidManifest.xml
dosyanızda,<manifest>
etiketi içine aşağıdaki satırları ekleyerek uygulamanız için sistem izinlerini belirtin. Android 10 (API düzeyi 29) veya sonraki sürümlerde test yapıyorsanızWRITE_EXTERNAL_STORAGE
iznini atlayın (uygulamanızın, ekran görüntülerini okuyup cihaza yazmak için bu izne ihtiyacı yoktur).<manifest ... > <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
2. Adım. Testiniz sırasında ekran görüntüsü alma
Testinizin herhangi bir noktasında ekran görüntüsü almak istediğinizde AndroidX kitaplığındaki Screenshot.capture()
yöntemini çağırın. Bu işlem, ScreenCapture
nesnesi oluşturur.
ScreenCapture
nesnesinde process()
işlevini çağırdığınızda, AndroidManifest.xml
içinde kayıtlı ScreenCaptureProcessor kullanılarak işlenir. İşleyici kaydedilmemişse BasicScreenCaptureProcessor
öğesinin kullanıldığını unutmayın.
FirebaseScreenCaptureProcessor
'ya kaydolduğunuz için ekran görüntüleriniz FirebaseScreenCaptureProcessor
üzerinden işlenir ve Firebase Test Lab ile testinizi çalıştırdığınızda sonuçlarınızla birlikte kullanılabilir.
ScreenCapture
oluşturmak için örnek kullanım alanları:
API Build.VERSION_CODES.JELLY_BEAN_MR2 ve sonraki sürümlerde tam ekran görüntüsü alma:
Screenshot.capture()
Herhangi bir API düzeyinde Etkinlik
ScreenCapture
. Bu seçeneğin, Build.VERSION_CODES.JELLY_BEAN_MR2 sürümünden eski cihazlarda kullanılabilecek tek seçenek olduğunu unutmayın.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
Ekran görüntüsü işleme için örnek kullanım alanları
FirebaseScreenCaptureProcessor
aracılığıylaScreenCapture
işleme:Screenshot.capture().process();
Belirtilen bir
ScreenCaptureProcessor
aracılığıylaScreenCapture
işleme alın (bu, işlemciyi kaydetme adımını atlamanıza olanak tanır):Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);
ScreenCapture
adını ve biçimini ayarlayın ve kayıtlı işlemciyi kullanarak işleyin:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
3. Adım: Testinizi oluşturma ve çalıştırma
Uygulamanızı ve test APK'larını oluşturun (talimatlar için Uygulamanızı test etme başlıklı makaleye bakın).
APK dosyalarını Firebase konsolunun Test Lab kontrol paneline yükleyin.
Son olarak, testinizi çalıştırın.
4. Adım. Test ekran görüntülerinizi görüntüleme
Testiniz tamamlandıktan sonra alınan tüm ekran görüntülerini Firebase konsolunda görüntüleyebilirsiniz.
Testler sekmesinde tamamladığınız testi seçin, ardından Sonuçlar sekmesini tıklayın.
Testinizi tekrar seçin ve ardından görünen Ekran görüntüleri sekmesini tıklayın.
(İsteğe bağlı) Ek test özelliklerini etkinleştirme
Testinizi Test Lab ile çalıştırmadan önce aşağıdaki özellikleri etkinleştirebilirsiniz:
Orchestrator'ı etkinleştirme
Android Test Orchestrator, uygulamanızın her bir enstrümantasyon testini bağımsız olarak çalıştıran bir araçtır. Test Lab her zaman Orchestrator'ın en son sürümünü kullanır.
Test Lab için Orchestrator'ı etkinleştirmek üzere enstrümantasyon testi kurulumunda Ek seçenekler > Orchestrator ile çalıştır'ı tıklayın.
Orchestrator'ı kullandığınızda aşağıdaki avantajlardan yararlanabilirsiniz:
- Paylaşılan durum yok. Her test kendi enstrümantasyon örneğinde çalışır. Bu nedenle, testler arasında ortak bir durum birikmez.
- Yer yer kilitlenmeler. Bir test çökerse yalnızca bu enstrümantasyon sonlandırılır ve paketinizdeki diğer testler çalışmaya devam edebilir.
Orchestrator'ı kullandığınızda her testin kendi enstrümantasyon örneğini çalıştırdığını unutmayın. Bu nedenle, uygulama işlemi her test senaryosundan sonra yeniden başlatılır. Bu durum, kota kullanımınızı veya faturalandırılan süreyi etkileyebilir ve cihazlarınızın zaman aşımı sınırlarını aşmanıza neden olabilir. Uygulamanızın başlangıç süresini kısaltırsanız bu ek yük azalır.
Orchestrator için ek seçenekler belirlemek istiyorsanız bunları environmentVariables
alanı aracılığıyla belirtin. Örneğin, clearPackageData
kullanmak için gcloud'da şu seçeneği kullanın:
--environment-variables clearPackageData=true
Parçalama özelliğini etkinleştirme
Test parçalama, bir dizi testi ayrı ayrı ve yalıtılmış olarak çalışan alt gruplara (parçalar) böler. Test Lab Her parçayı birden fazla cihaz kullanarak otomatik olarak paralel çalıştırır ve testlerin tamamını daha kısa sürede tamamlar.
Örneğin, N parça oluşturursanız seçtiğiniz her cihaz için Test Lab, N sayıda aynı cihazı başlatır ve testlerin bir alt kümesini her cihazda çalıştırır. Bu, parçalanmış test durumlarının cihaz başına birden fazla test yürütülmesine neden olabileceği anlamına gelir. Ancak parçalanmamış test durumları, cihaz başına bir test işlemiyle sonuçlanır. Test Lab kavramlarını öğrenmek için Temel kavramlar bölümüne bakın.
Firebase konsolunda test parçalama özelliğini etkinleştirmek için aşağıdaki adımları uygulayın:
Enstrümantasyon testi kurulumunda Ek seçenekler'i tıklayın.
Parçalama bölümünde, çalıştırmak istediğiniz parça sayısını girin.
Test parçaları için faturalandırma
Test Lab, AndroidJUnitRunner'ın yerleşik parçalama mekanizmasından yararlanarak parçalarınızı uygular. Boş parçalar (atanmış test durumları olmayan parçalar) için ücretlendirilmemek istiyorsanız oluşturduğunuz parça sayısı, toplam test durumu sayısından az olmalıdır. Her test senaryosunun ne kadar sürede çalıştırıldığına bağlı olarak, genellikle parça başına 2-10 test senaryosu atamak iyi bir fikirdir.
Faturalandırma hakkında daha fazla bilgi için Kullanım, kotalar ve faturalandırma başlıklı makaleyi inceleyin.