Memulai uji instrumentasi

Panduan ini menjelaskan cara menyiapkan dan menjalankan uji instrumentasi menggunakan Firebase Test Lab. Untuk menggunakan panduan ini, Anda memerlukan uji instrumentasi (yang ditulis oleh Anda atau tim Anda) yang menggunakan framework pengujian Android Espresso atau UI Automator. Uji instrumentasi dapat berlangsung hingga 45 menit di perangkat fisik dan hingga 60 menit di perangkat virtual.

Pada langkah selanjutnya, Anda akan dipandu untuk mengupload APK aplikasi dan APK pengujian ke Firebase.

(Opsional) Menambahkan library screenshot ke aplikasi

Firebase Test Lab menyertakan library (testlab-instr-lib) yang dapat digunakan untuk memproses screenshot yang diambil dengan ScreenCapture AndroidX saat menjalankan uji instrumentasi, misalnya pengujian yang ditulis menggunakan Espresso test framework. Bagian ini menjelaskan cara membuat objek ScreenCapture dengan library AndroidX dan cara memprosesnya menggunakan testlab-instr-lib.

Setelah uji instrumentasi berjalan, Anda dapat melihat screenshot yang diambil di Firebase console.

Mencoba aplikasi contoh

Download aplikasi contoh NotePad untuk mencoba fungsionalitas ini. Kemampuan untuk mengambil screenshot sudah disertakan dalam project NotePad.

Langkah 1. Tambahkan library screenshot ke project Anda

  1. Di file Gradle setelan level root project pengujian (settings.gradle.kts atau settings.gradle), tambahkan repositori Maven Google ke setiap bagian repositories:

    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. Di file Gradle modul (level aplikasi) (biasanya <project>/<app-module>/build.gradle.kts atau <project>/<app-module>/build.gradle), tambahkan dependensi untuk library screenshot Test Lab.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2")
      // ...
  3. Dalam file AndroidManifest.xml pengujian, daftarkan FirebaseScreenCaptureProcessor pada tag meta-data dalam elemen <instrumentation>. Anda juga dapat menentukan pemroses sebagai argumen di AndroidJUnitRunner (lihat dokumentasi referensi AndroidJUnitRunner untuk mendapatkan petunjuk cara melakukannya).

    <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. Di file AndroidManifest.xml aplikasi Anda, tambahkan baris berikut dalam elemen <manifest>:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. Di file AndroidManifest.xml, tentukan izin sistem untuk aplikasi Anda dengan menambahkan baris berikut ke dalam tag <manifest>. Jika Anda melakukan pengujian di Android 10 (API level 29) atau versi yang lebih baru, hapus izin WRITE_EXTERNAL_STORAGE (aplikasi Anda tidak memerlukan izin ini untuk dapat membaca dan menulis screenshot ke perangkat).

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

Langkah 2. Ambil screenshot selama pengujian

Jika sewaktu-waktu Anda ingin mengambil screenshot selama pengujian, panggil metode Screenshot.capture() dari library AndroidX. Tindakan ini akan menghasilkan objek ScreenCapture. Saat Anda memanggil process() pada objek ScreenCapture, objek tersebut akan diproses menggunakan ScreenCaptureProcessor yang terdaftar di AndroidManifest.xml Anda. Perhatikan bahwa BasicScreenCaptureProcessor digunakan jika tidak ada pemroses yang terdaftar. Karena Anda mendaftarkan FirebaseScreenCaptureProcessor, screenshot akan diproses melalui FirebaseScreenCaptureProcessor dan akan tersedia untuk Anda saat menjalankan pengujian dengan Firebase Test Lab.

Contoh kasus penggunaan untuk membuat ScreenCapture:

  • Ambil ScreenCapture penuh di API Build.VERSION_CODES.JELLY_BEAN_MR2 dan yang lebih baru:

    Screenshot.capture()
    
  • Ambil ScreenCapture dari Aktivitas pada API level mana pun. Perhatikan bahwa ini adalah satu-satunya opsi untuk perangkat dengan versi yang lebih lama dari Build.VERSION_CODES.JELLY_BEAN_MR2.

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

Contoh kasus penggunaan untuk memproses ScreenCapture

  • Proses ScreenCapture melalui FirebaseScreenCaptureProcessor:

    Screenshot.capture().process();
    
  • Proses ScreenCapture melalui ScreenCaptureProcessor yang ditentukan (tindakan ini memungkinkan Anda melewatkan pendaftaran pemroses):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Tetapkan nama dan format ScreenCapture, lalu proses menggunakan pemroses yang terdaftar:

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

Langkah 3. Build dan jalankan pengujian Anda

  1. Build APK aplikasi dan APK pengujian (lihat Menguji aplikasi Anda untuk mendapatkan petunjuknya).

  2. Upload file APK ke dasbor Test Lab dari Firebase console.

  3. Terakhir, jalankan pengujian Anda.

Langkah 4. Lihat screenshot pengujian Anda

Setelah pengujian selesai, Anda dapat melihat screenshot apa pun yang diambil di Firebase console.

  1. Di tab Tests, pilih pengujian yang telah selesai, lalu klik tab Results.

  2. Pilih pengujian Anda lagi, lalu klik tab Screenshots yang muncul.

(Opsional) Mengaktifkan fitur pengujian tambahan

Anda dapat mengaktifkan fitur berikut dalam pengujian sebelum menjalankannya dengan Test Lab:

Mengaktifkan Orchestrator

Android Test Orchestrator adalah alat untuk menjalankan setiap uji instrumentasi aplikasi secara terpisah. Test Lab selalu menggunakan Orchestrator versi terbaru.

Guna mengaktifkan Orchestrator untuk Test Lab, dalam penyiapan uji instrumentasi klik Additional options > Run with Orchestrator.

Saat menggunakan Orchestrator, Anda mendapatkan manfaat dari hal berikut:

  • Tidak ada status yang dibagikan: Setiap pengujian berjalan dalam instance instrumentasinya sendiri, sehingga status yang dibagikan tidak terakumulasi di seluruh pengujian.
  • Error yang terisolasi: Jika ada pengujian yang mengalami error, hanya instrumentasi tersebut yang akan dihentikan, sementara pengujian lainnya di suite Anda tetap berjalan.

Perlu diingat bahwa saat Anda menggunakan Orchestrator, setiap pengujian menjalankan instance instrumentasinya sendiri. Artinya, proses aplikasi dimulai ulang setelah setiap kasus pengujian. Peningkatan waktu proses yang dihasilkan dapat memengaruhi penggunaan kuota atau waktu yang ditagih dan dapat menyebabkan Anda melebihi batas waktu tunggu perangkat. Jika Anda mengurangi waktu memulai aplikasi, beban ini akan dipersingkat.

Untuk menetapkan opsi tambahan bagi Orchestrator, tentukan opsi tersebut melalui kolom environmentVariables. Misalnya, untuk menggunakan clearPackageData, gunakan opsi ini di gcloud:

--environment-variables clearPackageData=true

Mengaktifkan sharding

Sharding pengujian membagi satu set pengujian menjadi sejumlah subgrup (shard) yang masing-masing berjalan secara terpisah. Test Lab otomatis menjalankan setiap shard secara bersamaan menggunakan beberapa perangkat dan menyelesaikan keseluruhan set pengujian tersebut dalam waktu yang lebih singkat.

Misalnya, jika Anda membuat shard N untuk setiap perangkat yang dipilih, Test Lab akan menjalankan N perangkat yang identik dan menjalankan subset pengujian di setiap perangkat. Artinya, kasus pengujian dengan sharding dapat menghasilkan beberapa eksekusi uji per perangkat. Namun, kasus pengujian yang tidak di-sharding akan menghasilkan satu eksekusi uji per perangkat. Untuk mempelajari konsep Test Lab, lihat Konsep utama.

Untuk mengaktifkan sharding pengujian di Firebase console, ikuti langkah-langkah berikut:

  1. Di instrumentation test setup, klik Additional options.

  2. Di bagian Sharding, masukkan jumlah shard yang ingin Anda jalankan.

Penagihan untuk shard pengujian

Test Lab mengimplementasikan shard Anda dengan memanfaatkan mekanisme sharding bawaan AndroidJUnitRunner. Agar tidak dikenai biaya untuk membuat shard kosong (shard tanpa kasus pengujian yang ditetapkan), jumlah shard yang Anda buat harus kurang dari jumlah total kasus pengujian. Secara umum, tetapkan 2-10 kasus pengujian per shard, tergantung durasi penyelesaian setiap kasus pengujian.

Untuk mengetahui informasi selengkapnya tentang penagihan, baca artikel Penggunaan, kuota, dan penagihan.