lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Testing Support Library

Android Testing Support Library menyediakan kerangka kerja yang lengkap untuk menguji aplikasi Android. Pustaka ini menyediakan set API yang memungkinkan Anda dengan cepat membangun dan menjalankan kode pengujian untuk aplikasi Anda, termasuk pengujian JUnit 4 dan antarmuka pengguna (UI) fungsional. Anda bisa menjalankan pengujian yang dibuat menggunakan API ini dari Android Studio IDE atau dari baris perintah.

Android Testing Support Library tersedia melalui Android SDK Manager. Untuk informasi selengkapnya, lihat Persiapan Testing Support Library

Laman ini menyediakan informasi tentang alat yang disediakan di Android Testing Support Library, cara menggunakannya dalam lingkungan pengujian Anda, dan informasi tentang rilis pustaka.

Fitur Testing Support Library

Android Testing Support Library berisi alat otomatisasi pengujian seperti berikut:

  • AndroidJUnitRunner: Test runner kompatibel JUnit 4 untuk Android
  • Espresso: Kerangka kerja pengujian UI; cocok untuk pengujian UI fungsional dalam aplikasi
  • UI Automator: Kerangka kerja pengujian UI; cocok untuk pengujian UI fungsional lintas-aplikasi di seluruh sistem dan aplikasi yang terpasang

AndroidJUnitRunner

Kelas AndroidJUnitRunner adalah test runner JUnit yang memungkinkan Anda menjalankan kelas pengujian model JUnit 3 atau JUnit 4 pada perangkat Android, termasuk yang menggunakan kerangka kerja pengujian Espresso dan UI Automator. Test runner menangani pemuatan paket pengujian dan aplikasi yang diuji ke perangkat, menjalankan pengujian, dan melaporkan hasil pengujian. Kelas ini menggantikan kelas InstrumentationTestRunner, yang hanya mendukung pengujian JUnit 3.

Fitur utama dari test runner meliputi:

Membutuhkan Android 2.2 (API level 8) atau yang lebih tinggi.

Dukungan JUnit

Test runner kompatibel dengan pengujian JUnit 3 dan JUnit 4 (hingga JUnit 4.10). Akan tetapi, Anda tidak boleh mencampurkan kode pengujian JUnit 3 dan JUnit 4 dalam paket yang sama, karena hal ini dapat menyebabkan hasil yang tidak diharapkan. Jika Anda membuat kelas pengujian JUnit 4 terinstrumentasi untuk dijalankan pada perangkat atau emulator, kelas pengujian Anda harus diawali dengan keterangan @RunWith(AndroidJUnit4.class).

Cuplikan kode berikut menunjukkan bagaimana Anda bisa menulis pengujian JUnit 4 terinstrumentasi untuk memvalidasi bahwa operasi add di kelas CalculatorActivity bekerja dengan benar.

import android.support.test.runner.AndroidJUnit4;
import android.support.test.runner.AndroidJUnitRunner;
import android.test.ActivityInstrumentationTestCase2;

@RunWith(AndroidJUnit4.class)
public class CalculatorInstrumentationTest
        extends ActivityInstrumentationTestCase2<CalculatorActivity> {

    @Before
    public void setUp() throws Exception {
        super.setUp();

        // Injecting the Instrumentation instance is required
        // for your test to run with AndroidJUnitRunner.
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        mActivity = getActivity();
    }

    @Test
    public void typeOperandsAndPerformAddOperation() {
        // Call the CalculatorActivity add() method and pass in some operand values, then
        // check that the expected value is returned.
    }

    @After
    public void tearDown() throws Exception {
        super.tearDown();
    }
}

Akses ke informasi instrumentasi

Anda bisa menggunakan kelas InstrumentationRegistry untuk mengakses informasi yang terkait dengan uji coba. Kelas ini berisi objek Instrumentation, objek Context aplikasi target, objek Context aplikasi pengujian, dan argumen baris perintah yang dimasukkan ke pengujian Anda. Data ini akan berguna ketika Anda menulis pengujian menggunakan kerangka kerja UI Automator atau ketika menulis pengujian yang memiliki dependensi pada objek Instrumentation atau Context.

Filter pengujian

Dalam pengujian JUnit 4.x, Anda bisa menggunakan anotasi untuk mengonfigurasi jalannya pengujian. Fitur ini meminimalkan kebutuhan untuk menambahkan kode kondisional dan boilerplate dalam pengujian Anda. Selain anotasi standar yang didukung oleh JUnit 4, test runner juga mendukung anotasi khusus-Android, seperti:

  • @RequiresDevice: Menetapkan bahwa pengujian harus dijalankan hanya pada perangkat fisik, bukan pada emulator.
  • @SdkSupress: Mencegah pengujian agar tidak dijalankan pada level Android API yang lebih rendah daripada tingkat yang ditentukan. Misalnya, agar tidak menjalankan pengujian pada semua API dengan level lebih rendah dari 18, gunakan anotasi @SDKSupress(minSdkVersion=18).
  • @SmallTest, @MediumTest, dan @LargeTest: Tentukan seberapa lama pengujian sebaiknya dijalankan, dan sebagai akibatnya, seberapa sering Anda bisa menjalankan pengujian.

Pecahan pengujian

Test runner membagi satu paket pengujian ke dalam beberapa pecahan, sehingga Anda bisa dengan mudah menjalankan pengujian yang termasuk dalam pecahan yang sama secara berbarengan sebagai sebuah grup, di bawah instance Instrumentation yang sama. Setiap pecahan diidentifikasi dengan nomor indeks. Bila menjalankan pengujian, gunakan opsi -e numShards untuk menetapkan jumlah pecahan terpisah yang dibuat dan opsi -e shardIndex untuk menetapkan pecahan yang akan dijalankan.

Misalnya, untuk membagi paket pengujian menjadi 10 pecahan dan menjalankan hanya tes yang dikelompokkan dalam pecahan kedua, gunakan perintah berikut:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

Untuk mengetahui selengkapnya tentang penggunaan test runner ini, lihat referensi API.

Espresso

Kerangka kerja pengujian Espresso menyediakan seperangkat API untuk membangun pengujian UI untuk menguji alur pengguna dalam sebuah aplikasi. API ini memungkinkan Anda menulis pengujian UI otomatis yang ringkas dan berjalan dengan andal. Espresso sangat cocok untuk menulis pengujian otomatis model kotak putih, dengan kode pengujian menggunakan detail kode implementasi dari aplikasi yang diuji.

Fitur utama kerangka kerja pengujian Espresso antara lain:

  • API fleksibel untuk menampilkan dan mencocokkan adaptor di aplikasi target. Untuk informasi selengkapnya, lihat Pencocokan tampilan.
  • Kumpulan lengkap API tindakan untuk mengotomatisasi interaksi UI. Untuk informasi selengkapnya, lihat Action API.
  • Sinkronisasi thread UI untuk meningkatkan keandalan pengujian. Untuk informasi selengkapnya, lihat Sinkronisasi thread UI.

Membutuhkan Android 2.2 (API level 8) atau yang lebih tinggi.

Pencocokan tampilan

Metode Espresso.onView() memungkinkan Anda mengakses komponen UI dalam aplikasi target dan berinteraksi dengan itu. Metode ini menerima argumen Matcher dan menelusuri hierarki tampilan untuk menemukan instance View yang cocok serta memenuhi beberapa kriteria yang ditetapkan. Anda bisa mempersempit penelusuran dengan menetapkan kriteria seperti:

  • Nama kelas tampilan
  • Keterangan materi tampilan
  • R.id tampilan
  • Teks yang ditampilkan dalam tampilan

Misalnya, untuk menargetkan sebuah tombol yang memiliki nilai ID my_button, Anda bisa menetapkan pencocok seperti ini:

onView(withId(R.id.my_button));

Jika penelusuran berhasil, metode onView() mengembalikan referensi yang memungkinkan Anda melakukan tindakan pengguna dan penegasan pengujian terhadap tampilan target.

Pencocokan adaptor

Dalam layout AdapterView, layout secara dinamis diisi dengan tampilan anak pada waktu proses. Jika tampilan target berada dalam subkelas layout dari AdapterView (seperti ListView atau GridView), metode onView() mungkin tidak bekerja karena hanya sebagian tampilan layout yang bisa dimuat dalam hierarki tampilan saat ini.

Sebagai gantinya, gunakan metode Espresso.onData() untuk mengakses elemen tampilan target. Metode Espresso.onData() mengembalikan referensi yang memungkinkan Anda melakukan tindakan pengguna dan penegasan pengujian terhadap elemen dalam AdapterView.

Action API

Biasanya, Anda menguji aplikasi dengan melakukan beberapa interaksi pengguna terhadap antarmuka pengguna aplikasi. Anda bisa dengan mudah mengotomatisasi tindakan ini dalam pengujian dengan menggunakan ViewActions API. Anda bisa melakukan interaksi UI seperti:

  • Mengeklik tampilan
  • Menggesek
  • Menekan kunci dan tombol
  • Mengetik teks
  • Membuka tautan

Misalnya, untuk menyimulasikan masukan nilai string dan penekanan tombol untuk mengirimkan nilai, Anda bisa menulis skrip pengujian otomatis seperti ini. Metode ViewInteraction.perform() dan DataInteraction.perform() membutuhkan satu atau beberapa argumen ViewAction dan menjalankan tindakan dalam urutan yang diberikan.

// Type text into an EditText view, then close the soft keyboard
onView(withId(R.id.editTextUserInput))
    .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());

// Press the button to submit the text change
onView(withId(R.id.changeTextBt)).perform(click());

Sinkronisasi thread UI

Pengujian pada perangkat Android bisa gagal secara acak karena masalah pengaturan waktu. Masalah pengujian ini disebut serpihan pengujian. Sebelum Espresso, solusinya adalah dengan menyisipkan periode tidur atau waktu tunggu yang cukup panjang dalam pengujian atau dengan menambahkan kode agar terus mencoba kembali operasi yang gagal. Kerangka kerja pengujian Espresso menangani sinkronisasi antara Instrumentation dan thread UI; ini meniadakan keharusan untuk menyelesaikan masalah pengaturan waktu sebelumnya dan memastikan bahwa tindakan pengujian dan penegasan berjalan dengan lebih andal.

Untuk mengetahui selengkapnya tentang penggunaan Espresso, lihat referensi API dan pelatihan UI Pengujian untuk Aplikasi Tunggal.

UI Automator

Kerangka kerja pengujian UI Automator menyediakan seperangkat API untuk membangun pengujian UI yang melakukan interaksi pada aplikasi pengguna dan aplikasi sistem. UI Automator API memungkinkan Anda untuk melakukan operasi seperti membuka menu Settings atau peluncur aplikasi di perangkat pengujian. Kerangka kerja pengujian UI Automator sangat cocok untuk menulis pengujian otomatis model kotak hitam, karena kode pengujian tidak bergantung pada detail implementasi internal dari aplikasi target.

Fitur utama dalam kerangka kerja pengujian UI Automator antara lain:

  • Sebuah penampil untuk memeriksa hierarki layout. Untuk informasi selengkapnya, lihat UI Automator Viewer.
  • API untuk memperoleh informasi status dan melakukan operasi pada perangkat target. Untuk informasi selengkapnya, lihat Mengakses status perangkat.
  • API yang mendukung pengujian UI lintas-aplikasi. Untuk informasi selengkapnya, lihat UI Automator API.

Membutuhkan Android 4.3 (API level 18) atau yang lebih tinggi.

UI Automator Viewer

Alat uiautomatorviewer menyediakan GUI yang mudah digunakan untuk memindai dan menganalisis komponen UI yang saat ini ditampilkan pada perangkat Android. Anda bisa menggunakan alat ini untuk memeriksa hierarki layout dan melihat properti komponen UI yang tampak di latar depan perangkat. Informasi ini memungkinkan Anda membuat pengujian yang lebih baik menggunakan UI Automator, misalnya dengan membuat pemilih UI yang cocok dengan properti tertentu yang terlihat.

Alat bantu uiautomatorviewer terletak di direktori <android-sdk>/tools/.

Mengakses status perangkat

Kerangka kerja pengujian UI Automator menyediakan kelas UiDevice untuk mengakses dan menjalankan operasi pada perangkat tempat aplikasi target dijalankan. Anda bisa memanggil metode untuk mengakses properti perangkat seperti orientasi ukuran layar saat ini. Kelas UiDevice juga memungkinkan Anda melakukan tindakan seperti:

  • Mengubah rotasi perangkat
  • Menekan tombol D-pad
  • Menekan tombol Back, Home, atau Menu
  • Buka bayangan pemberitahuan
  • Mengambil tangkapan layar dari jendela layar saat ini

Misalnya, untuk menyimulasikan menekan tombol Home, panggil metode UiDevice.pressHome().

UI Automator API

UI Automator API memungkinkan Anda untuk membuat pengujian yang tangguh tanpa perlu mengetahui tentang detail implementasi dari aplikasi yang ditargetkan. Anda bisa menggunakan API ini untuk menangkap dan memanipulasi komponen UI pada beberapa aplikasi:

  • UiCollection: Menghitung elemen UI kontainer untuk tujuan penghitungan, atau menargetkan sub-elemen dengan properti teks yang terlihat atau keterangan-materi.
  • UiObject: Menyatakan elemen UI yang terlihat pada perangkat.
  • UiScrollable: Menyediakan dukungan untuk penelusuran item dalam kontainer UI yang dapat digulir.
  • UiSelector: Menyatakan kueri untuk satu atau beberapa elemen UI target pada perangkat.
  • Configurator: Memungkinkan Anda untuk menetapkan parameter utama dalam menjalankan pengujian UI Automator.

Misalnya, kode berikut menunjukkan bagaimana Anda bisa menulis skrip pengujian yang menampilkan peluncur aplikasi default di perangkat:

// Initialize UiDevice instance
mDevice = UiDevice.getInstance(getInstrumentation());

// Perform a short press on the HOME button
mDevice.pressHome();

// Bring up the default launcher by searching for
// a UI component that matches the content-description for the launcher button
UiObject allAppsButton = mDevice
        .findObject(new UiSelector().description("Apps"));

// Perform a click on the button to bring up the launcher
allAppsButton.clickAndWaitForNewWindow();

Untuk mengetahui selengkapnya tentang penggunaan UI Automator, lihat referensi API dan pelatihan Pengujian UI untuk Beberapa Aplikasi.

Persiapan Testing Support Library

Paket Android Testing Support Library disertakan dengan Android Support Repository versi terbaru, yang bisa Anda peroleh dalam bentuk unduhan tambahan melalui Android SDK Manager.

Untuk mengunduh Android Support Repository melalui SDK Manager:

  1. Jalankan Android SDK Manager.
  2. Pada jendela SDK Manager, gulir ke akhir daftar Packages, temukan folder Extras dan, jika diperlukan, perluas tampilan untuk menampilkan isinya.
  3. Pilih item Android Support Repository.
  4. Klik tombol Install packages....

Setelah mengunduh, alat akan memasang file Support Repository ke direktori Android SDK Anda. File pustaka terletak di subdirektori SDK berikut: direktori <sdk>/extras/android/m2repository.

Kelas Android Testing Support Library terletak di bawah paket android.support.test.

Untuk menggunakan Android Testing Support Library pada proyek Gradle, tambahkan dependensi ini ke dalam file build.gradle Anda:

dependencies {
  androidTestCompile 'com.android.support.test:runner:0.4'
  // Set this dependency to use JUnit 4 rules
  androidTestCompile 'com.android.support.test:rules:0.4'
  // Set this dependency to build and run Espresso tests
  androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
  // Set this dependency to build and run UI Automator tests
  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

Untuk menentukan AndroidJUnitRunner sebagai runner instrumentasi pengujian default pada proyek Gradle, tetapkan dependensi ini ke dalam file build.gradle Anda:

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

Sangat disarankan agar Anda menggunakan Android Testing Support Library bersama-sama dengan Android Studio IDE. Android Studio menawarkan kemampuan yang mendukung development pengujian, seperti:

  • Sistem pembangunan berbasis Flexible Gradle yang mendukung manajemen dependensi untuk kode pengujian Anda
  • Struktur proyek tunggal berisi unit dan kode pengujian terinstrumentasi bersama-sama dengan kode sumber aplikasi Anda
  • Dukungan untuk menerapkan dan menjalankan pengujian pada perangkat fisik atau virtual, dari baris perintah atau Graphic User Interface

Untuk informasi selengkapnya tentang Android Studio dan cara mengunduhnya, lihat Mengunduh Android Studio and Alat SDK.