Araç testlerini kullanmaya başlayın

Bu kılavuzda, Firebase Test Lab kullanılarak araç testinin nasıl hazırlanacağı ve çalıştırılacağı açıklanmaktadır. Bu kılavuzu kullanmak için Android test çerçevelerini Espresso veya UI Automator'ı kullanan bir araç testine (siz veya ekibiniz tarafından yazılmıştır) ihtiyacınız vardır. Araç testleri fiziksel cihazlarda 45 dakika, 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üklersiniz.

(İsteğe bağlı) Uygulamanıza ekran görüntüsü kitaplığı ekleyin

Firebase Test Lab, Espresso test çerçevesi kullanılarak yazılan testler gibi araç testlerini çalıştırırken AndroidX'in ScreenCapture ile aldığınız 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 kullanarak nasıl işleneceği açıklanmaktadır.

Araç 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 projesinde mevcuttur.

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

  1. Test projenizin kök düzeyi 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 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, FirebaseScreenCaptureProcessor öğesini <instrumentation> öğesi içindeki bir meta veri etiketine kaydedin. İşlemciyi bunun yerine AndroidJUnitRunner'da bir bağımsız değişken olarak da belirtebilirsiniz (nasıl yapılacağıyla ilgili talimatlar için AndroidJUnitRunner referans dokümanlarına 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 aşağıdaki satırları <manifest> öğesinin içine ekleyin:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. AndroidManifest.xml dosyanızda, aşağıdaki satırları <manifest> etiketinin içine 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, cihazda ekran görüntüsü okumak ve 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üsü alma

Testinizde ekran görüntüsü almak istediğiniz herhangi bir noktada AndroidX kitaplığından Screenshot.capture() yöntemini çağırın. Bu, bir ScreenCapture nesnesi oluşturur. ScreenCapture nesnesinde process() yöntemini çağırdığınızda bu öğe, AndroidManifest.xml içinde kayıtlı olan ScreenCaptureProcessor kullanılarak işlenir. Kayıtlı işlemci yoksa BasicScreenCaptureProcessor kullanılır. FirebaseScreenCaptureProcessor kaydını kaydettiğinizden, ekran görüntüleriniz FirebaseScreenCaptureProcessor aracılığıyla işlenir ve Firebase Test Lab ile testinizi çalıştırdığınızda sonuçlarınızla birlikte sunulur.

ScreenCapture oluşturmanın örnek kullanım alanları:

  • Bir API Derlemesi.VERSION_CODES.JELLY_BEAN_MR2 ve üzeri üzerinde tam Ekran Görüntüsü alın:

    Screenshot.capture()
    
  • Herhangi bir API düzeyinde Etkinlik'ten ScreenCapture alın. Build.VERSION_CODES.JELLY_BEAN_MR2 altındaki cihazlar için tek seçeneğin bu olduğunu unutmayın.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Ekran Görüntüsü'nün işlenmesi için örnek kullanım alanları

  • FirebaseScreenCaptureProcessor aracılığıyla bir ScreenCapture işlemi gerçekleştirin:

    Screenshot.capture().process();
    
  • Bir ScreenCapture öğesini belirtilen bir ScreenCaptureProcessor aracılığıyla işleyin (bu sayede işlemciyi kaydetme adımını atlayabilirsiniz):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • ScreenCapture öğesinin adını ve biçimini belirleyin 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 konusuna bakın).

  2. APK dosyalarını Firebase konsolunun Test Lab kontrol paneline 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, alınan ekran görüntülerini Firebase konsolunda görüntüleyebilirsiniz.

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

  2. Testinizi tekrar seçin, ardından görünen Ekran görüntüleri sekmesini 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 her bir araç 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 Orkestratör'ü etkinleştirmek üzere araç testi kurulumu'nda Ek seçenekler > Orchestrator ile çalıştır'ı tıklayın.

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

  • Paylaşılan durum yok. Her test kendi araç örneğinde çalışır. Böylece paylaşılan bir durum, testler arasında birikmez.
  • Yalıtılmış kilitlenmeler. Bir test kilitlenirse yalnızca bu araçlar sonlandırılır ve paketinizdeki diğer testler çalışmaya devam edebilir.

Orchestrator'ı kullandığınızda her testin kendi araç örneğini çalıştırdığını, yani uygulama işleminin her test durumundan sonra yeniden başlatılacağını unutmayın. Sonuç olarak artan çalışma süreleri, kota kullanımınızı veya faturalandırılma sürenizi etkileyebilir ve 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 de kısa gelir.

Orkestratör için ek seçenekler ayarlamak isterseniz bunları environmentVariables alanı aracılığıyla belirtin. Örneğin, clearPackageData hizmetini 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, her biri ayrı bir şekilde çalışan alt gruplara (kırıklar) böler. Test Lab, birden fazla cihaz kullanarak her bir kırığı otomatik olarak çalıştırır ve test grubunun tamamını daha kısa sürede tamamlar.

Örneğin, N parça oluşturursanız Test Lab, seçtiğiniz her cihaz için aynı N cihazı çalıştırır ve her cihazda testlerin bir alt kümesini çalıştırır. Bu da parçalanmış test durumlarının cihaz başına birden fazla test yürütmesi ile sonuçlanabileceği anlamına gelir. Bununla birlikte, parçalanmamış test durumları cihaz başına bir test yürütülmesiyle sonuçlanır. Test Lab kavramlarını öğrenmek için Temel kavramlar bölümüne bakın.

Firebase konsolunda test parçalamayı etkinleştirmek için aşağıdaki adımları izleyin:

  1. Araç testi kurulumu'nda Ek seçenekler'i tıklayın.

  2. Parçalama bölümünde çalıştırmak istediğiniz kırık sayısını girin.

Test parçaları için faturalandırma

Test Lab, AndroidJUnitRunner'ın yerleşik parçalama mekanizmasından yararlanarak kırıklarınızı uygular. Boş parçalar (atanmamış test durumu içermeyen parçalar) için ücret alınmasını önlemek amacıyla, oluşturduğunuz parça sayısının toplam test durumu sayısından az olması gerekir. Her bir test durumunun çalıştırılma süresine 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.