Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Enstrümantasyon testlerine başlayın

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Bu kılavuz, Firebase Test Lab kullanılarak bir enstrümantasyon testinin nasıl hazırlanacağını ve çalıştırılacağını açıklar. 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 olacak. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya ve sanal cihazlarda 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, 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üm, AndroidX kitaplığı ile ScreenCapture nesnelerinin nasıl oluşturulacağını ve bunların testlab-instr-lib kullanılarak nasıl işleneceğini açıklar.

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 özelliği zaten NotePad projesine dahil edilmiştir.

Adım 1. Projenize ekran görüntüsü kitaplığını ekleyin

  1. Test projenizin kök düzeyinde (proje düzeyinde) Gradle dosyasında ( build.gradle ), Google'ın Maven deposunu her depo bölümüne ekleyin:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. Modülünüzde (app-level) Gradle dosyanızda (genellikle app/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. AndroidManifest.xml dosyasında, FirebaseScreenCaptureProcessor öğesini <instrumentation> öğesi içindeki bir meta-veri etiketine kaydedin. Bunun yerine işlemciyi AndroidJUnitRunner'da bir argüman 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 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 için sistem izinlerini belirtin. Android 10 (API seviyesi 29) veya üzeri bir sürümde test yapıyorsanız, WRITE_EXTERNAL_STORAGE iznini atlayın (uygulamanız cihaza ekran görüntülerini okumak ve yazmak için bu izne ihtiyaç duymaz).

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

Adım 2. Testiniz sırasında ekran görüntüsü alın

Testinizin ekran görüntüsünü almak istediğiniz herhangi bir noktasında 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 kayıtlı ScreenCaptureProcessor kullanılarak işlenir. Kayıtlı işlemci yoksa BasicScreenCaptureProcessor kullanıldığını unutmayın. FirebaseScreenCaptureProcessor kaydettirdiğinizden, ekran görüntüleriniz FirebaseScreenCaptureProcessor aracılığıyla işlenecek ve testinizi Firebase Test Lab ile çalıştırdığınızda sonuçlarınız size sunulacaktır.

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

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

    Screenshot.capture()
    
  • Herhangi bir API düzeyinde Etkinliğin ScreenCapture Alın. Bunun, Build.VERSION_CODES.JELLY_BEAN_MR2'nin 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 örnekleri

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

    Screenshot.capture().process();
    
  • Bir ScreenCaptureProcessor belirli bir ScreenCapture aracılığıyla işleyin (bu, işlemciyi kaydetmeyi 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();
    

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

  1. Uygulamanızı oluşturun ve APK'ları test edin (talimatlar için bkz . Uygulamanızı test edin ).

  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 alınan ekran görüntülerini görüntüleyebilirsiniz.

  1. Testler sekmesinde, tamamlanmış testinizi 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

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.

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

Yararlar ve zararlar

  • Fayda: Paylaşılan durum yok. Her test kendi enstrümantasyon örneğinde çalışır, böylece testler arasında paylaşılan bir durum birikmez.
  • Fayda: İzole çökmeler. Bir test çökerse, yalnızca o enstrümantasyon sonlandırılır ve paketinizdeki diğer testler çalışmaya devam edebilir.
  • Dezavantajı: Daha uzun çalışma süreleri . Her test kendi enstrümantasyon örneğini çalıştırır, yani test süreci genel olarak biraz daha uzun sürer. İşaretlenmezse, artan çalışma süreleri potansiyel olarak kota kullanımınızı veya faturalandırma sürenizi etkileyebilir ve cihazlarınızın zaman aşımı sınırlarına ulaşmanıza neden olabilir.

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 her parçayı otomatik olarak paralel olarak çalıştırır ve tüm testleri daha kısa sürede tamamlar.

Test parçalama nasıl çalışır?

N parça oluşturduğunuzu varsayalım. Seçtiğiniz her cihaz için Test Lab, N özdeş cihazı döndürür ve her cihazda testlerin bir alt kümesini çalıştırır. Bu, parçalı test senaryolarının, her zaman aygıt başına bir test yürütmesiyle sonuçlanan, parçalanmamış test senaryolarının aksine, aygıt başına birden çok test yürütmesiyle sonuçlanabileceği anlamına gelir (Test Lab'deki temel kavramlara hızlı bir genel bakış için, bkz. Anahtar kavramlar ).

Firebase konsolunda test parçalamayı etkinleştirebilirsiniz:

  1. Enstrümantasyon testi kurulumunda, Ek seçenekler öğesine 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 senaryoları olmayan parçalar) döndürmek için ücretlendirilmekten kaçınmak için, oluşturduğunuz parça sayısı toplam test senaryosu sayısından az olmalıdır. Her bir test senaryosunun ne kadar sürede çalıştırılacağına bağlı olarak, genellikle parça başına 2-10 test senaryosu atamak iyi bir fikirdir.

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

,

Bu kılavuz, Firebase Test Lab kullanılarak bir enstrümantasyon testinin nasıl hazırlanacağını ve çalıştırılacağını açıklar. 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 olacak. Enstrümantasyon testleri, fiziksel cihazlarda 45 dakikaya ve sanal cihazlarda 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, 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üm, AndroidX kitaplığı ile ScreenCapture nesnelerinin nasıl oluşturulacağını ve bunların testlab-instr-lib kullanılarak nasıl işleneceğini açıklar.

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 özelliği zaten NotePad projesine dahil edilmiştir.

Adım 1. Projenize ekran görüntüsü kitaplığını ekleyin

  1. Test projenizin kök düzeyinde (proje düzeyinde) Gradle dosyasında ( build.gradle ), Google'ın Maven deposunu her depo bölümüne ekleyin:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. Modülünüzde (app-level) Gradle dosyanızda (genellikle app/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. AndroidManifest.xml dosyasında, FirebaseScreenCaptureProcessor öğesini <instrumentation> öğesi içindeki bir meta-veri etiketine kaydedin. Bunun yerine işlemciyi AndroidJUnitRunner'da bir argüman 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 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 için sistem izinlerini belirtin. Android 10 (API seviyesi 29) veya üzeri bir sürümde test yapıyorsanız, WRITE_EXTERNAL_STORAGE iznini atlayın (uygulamanız cihaza ekran görüntülerini okumak ve yazmak için bu izne ihtiyaç duymaz).

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

Adım 2. Testiniz sırasında ekran görüntüsü alın

Testinizin ekran görüntüsünü almak istediğiniz herhangi bir noktasında 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 kayıtlı 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 testinizi Firebase Test Lab ile çalıştırdığınızda sonuçlarınız ile birlikte size sunulacaktır.

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

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

    Screenshot.capture()
    
  • Herhangi bir API düzeyinde Etkinliğin ScreenCapture Alın. Bunun, Build.VERSION_CODES.JELLY_BEAN_MR2'nin 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 örnekleri

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

    Screenshot.capture().process();
    
  • Bir ScreenCaptureProcessor belirli bir ScreenCapture aracılığıyla işleyin (bu, işlemciyi kaydetmeyi 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();
    

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

  1. Uygulamanızı oluşturun ve APK'ları test edin (talimatlar için bkz . Uygulamanızı test edin ).

  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 alınan ekran görüntülerini görüntüleyebilirsiniz.

  1. Testler sekmesinde, tamamlanmış testinizi 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

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.

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

Yararlar ve zararlar

  • Fayda: Paylaşılan durum yok. Her test kendi enstrümantasyon örneğinde çalışır, böylece testler arasında paylaşılan bir durum birikmez.
  • Fayda: İzole çökmeler. Bir test çökerse, yalnızca o enstrümantasyon sonlandırılır ve paketinizdeki diğer testler çalışmaya devam edebilir.
  • Dezavantajı: Daha uzun çalışma süreleri . Her test kendi enstrümantasyon örneğini çalıştırır, yani test süreci genel olarak biraz daha uzun sürer. İşaretlenmezse, artan çalışma süreleri potansiyel olarak kota kullanımınızı veya faturalandırma sürenizi etkileyebilir ve cihazlarınızın zaman aşımı sınırlarına ulaşmanıza neden olabilir.

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 her parçayı otomatik olarak paralel olarak çalıştırır ve tüm testleri daha kısa sürede tamamlar.

Test parçalama nasıl çalışır?

N parça oluşturduğunuzu varsayalım. Seçtiğiniz her cihaz için Test Lab, N özdeş cihazı döndürür ve her cihazda testlerin bir alt kümesini çalıştırır. Bu, parçalı test senaryolarının, her zaman aygıt başına bir test yürütmesiyle sonuçlanan, parçalanmamış test senaryolarının aksine, aygıt başına birden çok test yürütmesiyle sonuçlanabileceği anlamına gelir (Test Lab'deki temel kavramlara hızlı bir genel bakış için, bkz. Anahtar kavramlar ).

Firebase konsolunda test parçalamayı etkinleştirebilirsiniz:

  1. Enstrümantasyon testi kurulumunda, Ek seçenekler öğesine 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 senaryoları olmayan parçalar) döndürmek için ücretlendirilmekten kaçınmak için, oluşturduğunuz parça sayısı toplam test senaryosu sayısından az olmalıdır. Her bir test senaryosunun ne kadar sürede çalıştırılacağına bağlı olarak, genellikle parça başına 2-10 test senaryosu atamak iyi bir fikirdir.

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