Enstrümantasyon testlerine başlayın

Bu kılavuz, Firebase Test Lab kullanılarak bir enstrümantasyon testinin nasıl hazırlanacağını ve yürütüleceğini açıklamaktadır. Bu kılavuzu kullanmak için Espresso veya UI Automator Android test çerçevelerini kullanan bir enstrümantasyon testine (siz veya ekibiniz tarafından yazılmış) ihtiyacınız olacak. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya kadar ve sanal cihazlarda 60 dakikaya kadar sürebilir.

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 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 uygulama deneyin

Bu işlevi denemek için NotePad örnek uygulamasını indirin. Ekran görüntüsü alma yeteneği zaten NotePad projesine dahil edilmiştir.

1. Adım. Ekran görüntüsü kitaplığını projenize ekleyin

  1. Test projenizin kök düzeyindeki ayarlar Gradle dosyasında ( settings.gradle.kts veya settings.gradle ), her repositories bölümüne Google'ın Maven deposunu 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 (uygulama düzeyinde) Gradle dosyanıza (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle ), Test Laboratuvarı için bir bağımlılık ekleyin ekran görüntüsü kitaplığı.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2")
      // ...
    
  3. Testinizin AndroidManifest.xml dosyasında, FirebaseScreenCaptureProcessor <instrumentation> öğesi içindeki bir meta veri etiketine kaydedin. İşlemciyi bunun yerine AndroidJUnitRunner'da bağımsız değişken 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>
    ...
    
  4. Uygulamanızın AndroidManifest.xml dosyasında, <manifest> öğesinin içine şu satırları ekleyin:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. AndroidManifest.xml dosyanızda, <manifest> etiketinin içine aşağıdaki satırları ekleyerek uygulamanız için sistem izinlerini belirtin. Android 10 (API seviye 29) veya üzerinde test yapıyorsanız, WRITE_EXTERNAL_STORAGE iznini atlayın (uygulamanız, ekran görüntülerini okumak ve cihaza yazmak için bu izni gerektirmez).

    <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üleri alın

Testinizin herhangi bir noktasında ekran görüntüsü almak istediğinizde, AndroidX kitaplığından Screenshot.capture() yöntemini çağırın. Bu, bir ScreenCapture nesnesi üretir. ScreenCapture nesnesinde process() öğesini çağırdığınızda, AndroidManifest.xml dosyanızda kayıtlı olan ScreenCaptureProcessor kullanılarak işlenir. Kayıtlı işlemci yoksa BasicScreenCaptureProcessor kullanıldığını unutmayın. FirebaseScreenCaptureProcessor kaydettirdiğiniz için, ekran görüntüleriniz FirebaseScreenCaptureProcessor aracılığıyla işlenecek ve Firebase Test Lab ile testinizi yaptığınızda sonuçlarınızla birlikte size sunulacaktır.

Bir ScreenCapture oluşturmak için örnek kullanım durumları:

  • API Build.VERSION_CODES.JELLY_BEAN_MR2 ve üzeri sürümlerde tam bir ScreenCapture yapın:

    Screenshot.capture()
    
  • Herhangi bir API düzeyinde Aktivitenin ScreenCapture alın. Bunun, Build.VERSION_CODES.JELLY_BEAN_MR2 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());
    ...
    

Bir ScreenCapture işlemek için örnek kullanım durumları

  • FirebaseScreenCaptureProcessor aracılığıyla bir ScreenCapture işleyin:

    Screenshot.capture().process();
    
  • Belirli bir ScreenCaptureProcessor aracılığıyla bir ScreenCapture işleyin (bu, işlemcinin kaydını atlamanıza izin verir):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • ScreenCapture adını ve formatını ayarlayın ve kayıtlı işlemciyi kullanarak işleyin:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

3. Adım. Testinizi oluşturun ve çalıştırın

  1. Uygulamanızı oluşturun ve APK'ları test edin (talimatlar için Uygulamanızı test etme bölümüne bakın).

  2. APK dosyalarını Firebase konsolunun Test Lab panosuna yükleyin.

  3. Son olarak, testinizi çalıştırın.

4. Adım. Test ekran görüntülerinizi görüntüleyin

Testiniz tamamlandıktan sonra, Firebase konsolunda çekilmiş tüm ekran görüntülerini görüntüleyebilirsiniz.

  1. Testler sekmesinde, tamamladığınız testi seçin ve ardından Sonuçlar sekmesine tıklayın.

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

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

Test Lab için Orchestrator'ı etkinleştirmek için, enstrümantasyon test kurulumunda, Ek seçenekler > Orchestrator ile çalıştır öğesine tıklayın.

Orchestrator'ı kullandığınızda aşağıdakilerden yararlanırsınız:

  • Paylaşılan durum yok. Her test kendi enstrümantasyon örneğinde çalışır, bu nedenle testler arasında paylaşılan bir durum birikmez.
  • İzole çökmeler. Bir test çökerse yalnızca o 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. Artan çalışma süreleri , kota kullanımınızı veya fatura sürenizi 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 kısalır.

Orchestrator için ek seçenekler ayarlamak üzere, 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ç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 otomatik olarak her bir parçacığı paralel olarak çalıştırır ve tüm test setini daha kısa sürede tamamlar.

Örneğin, seçtiğiniz her cihaz için N parça oluşturursanız, Test Lab N özdeş cihazı döndürür ve her cihazda testlerin bir alt kümesini çalıştırır. Bu, bölünmüş test senaryolarının cihaz başına birden çok test yürütmesiyle sonuçlanabileceği anlamına gelir. Ancak parçalanmamış test senaryoları, cihaz başına bir test yürütmesiyle sonuçlanır. Test Lab kavramlarını öğrenmek için bkz. Anahtar kavramlar .

Firebase konsolunda test paylaşımını etkinleştirmek için şu adımları izleyin:

  1. Enstrümantasyon test kurulumunda, Ek seçenekler 'e 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, parçalarınızı AndroidJUnitRunner'ın yerleşik parçalama mekanizmasından yararlanarak uygular. Boş parçaları (atanan test senaryoları olmayan kırıklar) döndürmek için ücretlendirilmekten kaçınmak için, oluşturduğunuz parça sayısının toplam test senaryosu sayısından az olması gerekir. Her bir test senaryosunun çalıştırılmasının ne kadar sürdüğüne bağlı olarak, parça başına 2-10 test senaryosu atamak genellikle iyi bir fikirdir.

Faturalama hakkında daha fazla bilgi için Kullanım, kotalar ve faturalandırma bölümünü okuyun.