Bu kılavuz, Firebase Test Lab kullanılarak bir enstrümantasyon testinin nasıl hazırlanıp çalıştırılacağını açıklar. Bu kılavuzu kullanmak için Espresso veya UI Automator Android test çerçevelerini kullanan bir enstrümantasyon testine (sizin veya ekibiniz tarafından yazılmış) ihtiyacınız olacak. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya ve sanal cihazlarda 60 dakikaya kadar çalışabilir.
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ılmış testler gibi enstrümantasyon testleri çalıştırırken AndroidX'in ScreenCapture ile çektiğiniz ekran görüntülerini işlemek için kullanabileceğiniz bir kitaplık (testlab-instr-lib) içerir. Bu bölüm, AndroidX kitaplığı ile ScreenCapture
nesnelerinin nasıl oluşturulacağını ve bunların testlab-instr-lib kullanılarak nasıl işleneceğini açıklar.
Enstrümantasyon testiniz çalıştırıldıktan sonra, yakalanan ekran görüntülerini Firebase konsolunda görüntüleyebilirsiniz.
Örnek bir uygulama deneyin
Bu işlevi denemek için NotePad örnek uygulamasını indirin. Ekran görüntüsü alma özelliği zaten NotePad projesine dahil edilmiştir.
Adım 1. Projenize ekran görüntüsü kitaplığını ekleyin
Test projenizin kök düzeyinde (proje düzeyinde) Gradle dosyasında (
build.gradle
), her depo bölümüne Google'ın Maven deposunu ekleyin:buildscript { repositories { // Add the following line: google() // Google's Maven repository } dependencies { // ... // Check that you have the following line (if not, add it): classpath 'com.google.gms:google-services:4.3.8' // Google Services plugin } } allprojects { // ... repositories { // Add the following line: google() // Google's Maven repository // ... } }
Modülünüzde (app-level) Gradle dosyanızda (genellikle
app/build.gradle
), Test Lab ekran görüntüsü kitaplığı için bir bağımlılık ekleyin.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2' // ... }
AndroidManifest.xml
dosyasında,FirebaseScreenCaptureProcessor
öğesini<instrumentation>
öğesi içindeki bir meta-veri etiketine kaydedin. Bunun yerine işlemciyi AndroidJUnitRunner'da bir argüman olarak da belirtebilirsiniz (nasıl yapılacağına ilişkin talimatlar için AndroidJUnitRunner başvuru 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ında,<manifest>
öğesinin içine aşağıdaki satırları ekleyin:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
AndroidManifest.xml
dosyanızda,<manifest>
etiketinin içine aşağıdaki satırları ekleyerek uygulamanız için sistem izinlerini belirtin. Android 10 (API düzeyi 29) veya sonraki bir sürümde test yapıyorsanız,WRITE_EXTERNAL_STORAGE
iznini atlayın (uygulamanız cihaza ekran görüntülerini okumak ve yazmak için bu izne ihtiyaç duymaz).<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>
Adım 2. Testiniz sırasında ekran görüntüsü alın
Testinizin ekran görüntüsünü almak istediğiniz herhangi bir noktasında AndroidX kitaplığından Screenshot.capture()
yöntemini çağırın. Bu, bir ScreenCapture
nesnesi üretir. ScreenCapture
nesnesinde process()
'i çağırdığınızda, AndroidManifest.xml
kayıtlı ScreenCaptureProcessor kullanılarak işlenir. Kayıtlı işlemci yoksa BasicScreenCaptureProcessor
kullanıldığını unutmayın. FirebaseScreenCaptureProcessor
kaydettirdiğinizden, ekran görüntüleriniz FirebaseScreenCaptureProcessor
aracılığıyla işlenecek ve testinizi Firebase Test Lab ile çalıştırdığınızda sonuçlarınız size sunulacaktır.
ScreenCapture
oluşturmak için örnek kullanım örnekleri:
API Build.VERSION_CODES.JELLY_BEAN_MR2 ve üzeri sürümlerde tam ScreenCapture alın:
Screenshot.capture()
Herhangi bir API düzeyinde Etkinliğin
ScreenCapture
Alın. Bunun, Build.VERSION_CODES.JELLY_BEAN_MR2'nin altındaki cihazlar için tek seçenek olduğunu unutmayın.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
ScreenCapture işlemek için örnek kullanım örnekleri
FirebaseScreenCaptureProcessor
aracılığıyla birScreenCapture
işleyin:Screenshot.capture().process();
Belirtilen bir
ScreenCapture
aracılığıyla birScreenCaptureProcessor
işleyin (bu, işlemciyi kaydetmeyi 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();
Adım 3. Testinizi oluşturun ve çalıştırın
Uygulamanızı oluşturun ve APK'ları test edin (talimatlar için bkz . Uygulamanızı test edin ).
APK dosyalarını Firebase konsolunun Test Lab panosuna yükleyin.
Son olarak, testinizi çalıştırın.
Adım 4. Test ekran görüntülerinizi görüntüleyin
Testiniz tamamlandıktan sonra Firebase konsolunda alınan ekran görüntülerini görüntüleyebilirsiniz.
Testler sekmesinde, tamamlanmış testinizi seçin ve ardından Sonuçlar sekmesine tıklayın.
Testinizi tekrar seçin, ardından beliren Ekran Görüntüleri sekmesine tıklayın.
(İsteğe bağlı) Ek test özelliklerini etkinleştirin
Test Lab ile çalıştırmadan önce testinizde aşağıdaki özellikleri etkinleştirebilirsiniz:
Orkestratör'ü Etkinleştir
Android Test Orchestrator , uygulamanızın enstrümantasyon testlerinin her birini 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.
Orchestrator for Test Lab'i etkinleştirmek için, enstrümantasyon test kurulumunda Ek seçenekler > Orkestratörle Çalıştır öğesine tıklayın.
Yararlar ve zararlar
- Fayda: Paylaşılan durum yok. Her test kendi enstrümantasyon örneğinde çalışır, böylece testler arasında paylaşılan bir durum birikmez.
- Fayda: İzole çökmeler. Bir test çökerse, yalnızca o enstrümantasyon sonlandırılır ve paketinizdeki diğer testler çalışmaya devam edebilir.
- Dezavantajı: Daha uzun çalışma süreleri . Her test kendi enstrümantasyon örneğini çalıştırır, yani test süreci genel olarak biraz daha uzun sürer. İşaretlenmezse, artan çalışma süreleri potansiyel olarak kota kullanımınızı veya faturalandırma sürenizi etkileyebilir ve cihazlarınızın zaman aşımı sınırlarına ulaşmanıza neden olabilir.
Parçalamayı etkinleştir
Test parçalama, bir dizi testi ayrı ayrı çalışan alt gruplara (parçalara) böler. Test Lab, birden fazla cihaz kullanarak her parçayı otomatik olarak paralel olarak çalıştırır ve tüm test setini daha kısa sürede tamamlar.
Test parçalama nasıl çalışır?
N parça oluşturduğunuzu varsayalım. Seçtiğiniz her cihaz için Test Lab, N özdeş cihazı döndürür ve her cihazda testlerin bir alt kümesini çalıştırır. Bu, parçalı test senaryolarının, her zaman aygıt başına bir test yürütmesiyle sonuçlanan, parçalanmamış test senaryolarının aksine, aygıt başına birden çok test yürütmesiyle sonuçlanabileceği anlamına gelir (Test Lab'deki temel kavramlara hızlı bir genel bakış için, bkz. Anahtar kavramlar ).
Firebase konsolunda test parçalamayı etkinleştirebilirsiniz:
Enstrümantasyon testi kurulumunda, Ek seçenekler öğesine 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 senaryoları olmayan parçalar) döndürmek için ücretlendirilmekten kaçınmak için, oluşturduğunuz parça sayısı toplam test senaryosu sayısından az olmalıdır. Her bir test senaryosunun ne kadar sürede çalıştırılacağı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 bölümünü okuyun.