Araç testlerini kullanmaya başlayın

Bu kılavuzda, Firebase Test Lab kullanarak bir enstrümantasyon testinin nasıl hazırlanacağı ve çalıştırılacağı açıklanmaktadır. Bu kılavuzu kullanmak için enstrümantasyon testi (sizin veya ekibiniz tarafından yazılmış) yapmanız gerekir. Bu testte Espresso veya UI Automator Android test çerçeveleri kullanılır. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya kadar, sanal cihazlarda ise 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, enstrümantasyon testleri (ör. Espresso test çerçevesi kullanılarak yazılan testler) ç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 bunların 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

  1. Test projenizin kök düzeyindeki ayarlar Gradle dosyasında (settings.gradle.kts veya settings.gradle), Google'ın Maven deposunu her repositories 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()
        }
    }
    // ...
  2. Modülünüzün (uygulama düzeyinde) Gradle dosyasında (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/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")
      // ...
  3. Testinizin AndroidManifest.xml dosyasında, <instrumentation> öğesi içindeki bir meta veri etiketinde FirebaseScreenCaptureProcessor öğesini kaydedin. İş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>
    ...
    
  4. 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"/>
    
  5. 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ız WRITE_EXTERNAL_STORAGE iznini atlayın (uygulamanızın ekran görüntülerini cihazda okumak ve 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 yöntem, ScreenCapture nesnesi oluşturur. ScreenCapture nesnesinde process() yöntemini çağırdığınızda bu nesne, AndroidManifest.xml içinde kayıtlı ScreenCaptureProcessor kullanılarak işlenir. İşlemci kayıtlı değilse BasicScreenCaptureProcessor kullanılır. FirebaseScreenCaptureProcessor öğesini kaydettiğiniz 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 Etkinliğin ScreenCapture alın. Bu seçeneğin, Build.VERSION_CODES.JELLY_BEAN_MR2 sürümünden eski cihazlarda 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ığıyla ScreenCapture işleme:

    Screenshot.capture().process();
    
  • Belirtilen bir ScreenCaptureProcessor aracılığıyla ScreenCapture 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

  1. Uygulamanızı ve test APK'larını oluşturun (talimatlar için Uygulamanızı test etme başlıklı makaleyi inceleyin).

  2. Firebase konsolunda DevOps ve Etkileşim > Test Lab'e gidin ve APK dosyalarını yükleyin.

  3. 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 görüntüleyebilirsiniz:

  1. Firebase Console'da DevOps & Engagement > Test Lab'e gidin.

  2. Testler sekmesinde tamamladığınız testi seçin, ardından Sonuçlar sekmesini tıklayın.

  3. 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

Test Lab ile çalıştırmadan önce testinizde aşağıdaki özellikleri etkinleştirebilirsiniz:

Orkestratörü 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 yeni 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.
  • İzole edilmiş 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, uygulama sürecinin her test senaryosundan sonra yeniden başlatıldığı anlamına gelir. Sonuç olarak, çalışma süreleri artabilir ve bu durum kota kullanımınızı veya faturalandırılan süreyi etkileyebilir. Ayrıca, cihazlarınızın zaman aşımı sınırlarını aşmanıza neden olabilir. Uygulamanızın başlatma 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 paralel olarak otomatik olarak çalıştırır ve testlerin tamamını daha kısa sürede tamamlar.

Örneğin, N parçalama oluşturursanız seçtiğiniz her cihaz için Test Lab, N adet aynı cihazı başlatır ve her cihazda testlerin bir alt kümesini çalıştırır. Bu, parçalanmış test senaryolarının cihaz başına birden fazla test yürütülmesine neden olabileceği anlamına gelir. Ancak parçalanmamış test senaryoları, cihaz başına bir test yürütülmesine neden olur. Test Lab kavramları hakkında bilgi edinmek için Temel kavramlar başlıklı makaleyi inceleyin.

Firebase konsolunda test parçalama özelliğini etkinleştirmek için aşağıdaki adımları uygulayın:

  1. Enstrümantasyon testi kurulumunda Ek seçenekler'i tıklayın.

  2. 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) döndürme için ücretlendirilmemek üzere oluşturduğunuz parça sayısı, toplam test durumu sayısından az olmalıdır. Her test durumunun çalışması ne kadar sürdüğüne bağlı olarak, genellikle parça başına 2-10 test durumu atamak iyi bir fikirdir.

Faturalandırma hakkında daha fazla bilgi için Kullanım, kotalar ve faturalandırma başlıklı makaleyi inceleyin.