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 Espresso veya UI Automator Android test çerçevelerini kullanan bir araç testi (sizin tarafınızdan veya ekibiniz tarafından yazılmış) gerekir. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya, 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üklersiniz.

(İsteğe bağlı) Ekran görüntüsü kitaplığını uygulamanıza ekleme

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ü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ıktan sonra, yakalanan ekran görüntülerini Firebase konsolunda görüntüleyebilirsiniz.

Örnek uygulamayı deneme

Bu işlevi denemek için Not Defteri ö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ın bulunduğu Gradle dosyasına (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 (uygulama düzeyi) 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> öğesindeki bir meta veri etiketine kaydedin. Bunun yerine, AndroidJUnitRunner'da işlemciyi 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ında, <manifest> öğesine aşağıdaki satırları ekleyin:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. AndroidManifest.xml dosyanızda, <manifest> etiketine 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 çıkarın (Uygulamanızın ekran görüntülerini okumak ve 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 ekran görüntüsü almak istediğiniz herhangi bir noktasında AndroidX kitaplığındaki Screenshot.capture() yöntemini çağırın. Bu işlem sonucunda bir ScreenCapture nesnesi oluşturulur. ScreenCapture nesnesinde process() çağrısı yaptığınızda, AndroidManifest.xml'inize kayıtlı ScreenCaptureProcessor kullanılarak işlenir. Hiçbir işleyici kaydedilmemişse BasicScreenCaptureProcessor değerinin kullanıldığını unutmayın. FirebaseScreenCaptureProcessor'ü kaydettiğiniz için ekran görüntüleriniz FirebaseScreenCaptureProcessor üzerinden işlenir ve testinizi Firebase Test Lab ile çalıştırdığınızda sonuçlarınızla birlikte size sunulur.

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

    Screenshot.capture()
    
  • Etkinliğin herhangi bir API düzeyinde ScreenCapture'sini alın. Bu seçeneğin, Build.VERSION_CODES.JELLY_BEAN_MR2 sürümünden eski sürümlere sahip cihazlar için 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 üzerinden ScreenCapture işleyin:

    Screenshot.capture().process();
    
  • Belirli bir ScreenCaptureProcessor üzerinden ScreenCapture işleyin (bu işlem, ödeme işleyiciyi kaydetme adımını atlamanıza olanak tanır):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • ScreenCapture öğesinin adını ve biçimini ayarlayın ve kayıtlı işleyiciyi kullanarak işleyin:

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

3. Adım: Testinizi derleyip çalıştırma

  1. Uygulamanızı derleyin 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 kontrol paneline yükleyin.

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

4. Adım. Test ekran görüntülerini görüntüleme

Testiniz tamamlandıktan sonra, alınan tüm 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 ve 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 testinizde aşağıdaki özellikleri etkinleştirebilirsiniz:

Orchestrator'ı etkinleştirme

Android Test Orchestrator, uygulamanızın her enstrümasyon 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 araç testi kurulumunda Ek seçenekler > Orchestrator ile çalıştır'ı tıklayın.

Orchestrator'ı kullandığınızda aşağıdakilerden yararlanabilirsiniz:

  • Paylaşılan durum yok. Her test kendi enstrümantasyon örneğinde çalıştığından, testler arasında paylaşılan bir durum birikmez.
  • Tekil kilitlenmeler. Bir test kilitlenirse yalnızca ilgili 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ı, yani her test senaryosundan sonra uygulama sürecinin yeniden başlatıldığını unutmayın. Sonuç olarak artan çalışma süreleri, kota kullanımınızı veya faturalandırılan 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ısalır.

Orchestrator için ek seçenekler ayarlamak 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

Bölme işlemini etkinleştirme

Test bölme, bir test grubunu ayrı ayrı çalışan alt gruplara (parçalara) ayırır. Test Lab, her bir parçayı birden fazla cihaz kullanarak otomatik olarak paralel olarak çalıştırır ve tüm test grubunu daha kısa sürede tamamlar.

Örneğin, N sayıda parça oluşturursanız Test Lab, seçtiğiniz her cihaz için N tane aynı cihaz oluşturur ve her cihazda testlerin bir alt kümesini çalıştırır. Bu, parçalara ayrılmış test durumlarının cihaz başına birden fazla test çalıştırmasına neden olabileceği anlamına gelir. Ancak, bölümlenmemiş test durumları cihaz başına bir test işlemiyle sonuçlanır. Test Lab kavramlarını öğrenmek için Temel kavramlar başlıklı makaleyi inceleyin.

Firebase konsolunda test bölme işlemini 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 bölme mekanizmasından yararlanarak parçalarınızı uygular. Boş parçalar (atanmış test durumu olmayan parçalar) oluşturmak için ödeme almamak üzere oluşturduğunuz parça sayısı toplam test durumu sayısından az olmalıdır. Her test senaryosunun çalıştırılmasının ne kadar sürdüğüne bağlı olarak, genellikle her bölüme 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 okuyun.