Araç testlerini kullanmaya başlayın

Bu kılavuzda, Firebase Test Lab kullanarak enstrümantasyon testi hazırlama ve çalıştırma adımları açıklanmaktadır. 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 vardır. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya, sanal cihazlarda ise 60 dakikaya kadar sürebilir.

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 ekleme

Firebase Test Lab, Espresso test çerçevesi kullanılarak yazılan testler gibi enstrümantasyon testleri çalıştırılırken AndroidX'in ScreenCapture özelliğiyle 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 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ı deneme

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

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

  1. Test projenizin kök düzeyindeki ayarlar 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ü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, FirebaseScreenCaptureProcessor öğesini <instrumentation> öğesinin içindeki bir meta veri etiketine kaydedin. Bunun yerine, işlemciyi AndroidJUnitRunner'da bağımsız değişken olarak da belirtebilirsiniz (bunun 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> öğesinin içine aşağıdaki 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ın 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 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

Testinizde ekran görüntüsü almak istediğiniz herhangi bir noktada AndroidX kitaplığından Screenshot.capture() yöntemini çağırın. Bu işlem, bir ScreenCapture nesnesi oluşturur. ScreenCapture nesnesinde process() yöntemini çağırdığınızda, AndroidManifest.xml nesnenizde kayıtlı olan ScreenCaptureProcessor kullanılarak işlenir. Hiçbir işlemci kayıtlı değilse BasicScreenCaptureProcessor kullanıldığını unutmayın. FirebaseScreenCaptureProcessor kaydını yaptığınız 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şturmayla ilgili ö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'den daha 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());
    ...
    

ScreenCapture'ı işlemek için örnek kullanım alanları

  • FirebaseScreenCaptureProcessor üzerinden ScreenCapture işleme:

    Screenshot.capture().process();
    
  • Belirtilen ScreenCaptureProcessor üzerinden bir ScreenCapture işleme (bu, işleyiciyi kaydetmeyi atlamanıza olanak tanır):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • ScreenCapture için ad ve biçim belirleyin 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ızı derleyin (talimatlar için Uygulamanızı test etme bölümüne bakın).

  2. Firebase konsolunda DevOps & Engagement (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 ekran görüntülerini görüntüleyebilirsiniz:

  1. Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Test Lab'e gidin.

  2. Testler sekmesinde tamamlanan testinizi seçin, ardından Sonuçlar sekmesini tıklayın.

  3. Testinizi tekrar seçin ve ardından görüntülenen 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 aşağıdaki özellikleri etkinleştirebilirsiniz:

Orchestrator'ı 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 istiyorsanız enstrümantasyon testi kurulumunda 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. Bu nedenle, paylaşılan durum testler arasında birikmez.
  • İzole kilitlenmeler. Bir test kilitlenirse yalnızca o araç 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ıldığını unutmayın. Bunun sonucunda 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 azalı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

Parçalamayı etkinleştirme

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

Örneğin, N parça 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çalı test durumlarının cihaz başına birden fazla test işlemiyle sonuçlanabileceği anlamına gelir. Ancak parçalara ayrılmamış 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 parçalamayı etkinleştirmek için aşağıdaki adımları uygulayın:

  1. Enstrümantasyon testi kurulumu bölümünde 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 durumu olmayan parçalar) oluşturmak için ücretlendirilmemek amacıyla oluşturduğunuz parça sayısı, toplam test durumu sayısından az olmalıdır. Her bir test durumunun ne kadar sürdüğüne bağlı olarak, genellikle her parçaya 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.