Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menjalankan pengujian dari command line

Dokumen ini menjelaskan cara membuat dan menjalankan pengujian langsung dari command line. Dokumen ini mengasumsikan bahwa Anda telah memahami cara membuat aplikasi Android di lingkungan pemrograman.

Menjalankan pengujian

Anda dapat menjalankan pengujian dari command line, baik dengan Gradle atau dengan shell Android Debug Bridge (adb).

Plugin Android untuk Gradle memungkinkan Anda menjalankan pengujian unit dari project Gradle melalui command line. Untuk informasi lebih lanjut cara mem-build pengujian unit aplikasi Anda, lihat Mem-build Pengujian Unit yang Efektif.

Menjalankan pengujian unit dengan Gradle

Plugin Android untuk Gradle memungkinkan Anda menjalankan pengujian unit dari project Gradle melalui command line. Untuk informasi lebih lanjut cara mem-build pengujian unit aplikasi Anda, lihat Mem-build Pengujian Unit yang Efektif.

Tabel di bawah merangkum cara menjalankan pengujian unit dengan Gradle:

Jenis pengujian unit Perintah untuk dijalankan Lokasi hasil pengujian
Pengujian unit lokal Panggil tugas test:

./gradlew test
File hasil pengujian HTML: direktori path_to_your_project/module_name/build/reports/tests/.

File hasil pengujian XML: direktori path_to_your_project/module_name/build/test-results/.

Pengujian unit berinstrumen Panggil tugas connectedAndroidTest:

./gradlew connectedAndroidTest
File hasil pengujian HTML: direktori path_to_your_project/module_name/build/reports/androidTests/connected/.

File hasil pengujian XML: direktori path_to_your_project/module_name/build/outputs/androidTest-results/connected/.

Gradle mendukung singkatan nama tugas. Berarti, misalnya, Anda dapat memulai tugas connectedAndroidTest cukup dengan memasukkan perintah berikut.

./gradlew cAT

Tugas test dan connectedAndroidTest menjalankan pengujian pada setiap modul dan varian build dalam project. Anda dapat menjalankan pengujian hanya untuk modul tertentu dalam project dengan memberi awalan tugas test atau connectedAndroidTest dengan nama modul dan titik dua (:). Misalnya, perintah berikut menjalankan pengujian unit berinstrumen hanya untuk modul mylibrary.

./gradlew mylibrary:connectedAndroidTest

Anda juga dapat menargetkan varian build tertentu menggunakan sintaksis berikut.

  • Untuk pengujian unit lokal:
    ./gradlew testVariantNameUnitTest
    
  • Untuk pengujian unit berinstrumen:
    ./gradlew connectedVariantNameAndroidTest
    

Catatan: Jika Anda tidak menentukan modul target yang akan diuji, Gradle akan memeriksa semua modul dan menjalankan pengujian untuk setiap varian yang cocok dengan nama konfigurasi yang ditentukan.

Gradle juga memungkinkan Anda menargetkan pengujian tertentu menggunakan flag --tests. Misalnya, perintah berikut hanya menjalankan pengujian sampleTestMethod untuk varian build yang ditentukan. Untuk mempelajari cara penggunaan flag --tests lebih lanjut, baca dokumentasi Gradle tentang pemfilteran pengujian.

./gradlew testVariantNameUnitTest --tests *.sampleTestMethod

Laporan multi-modul

Seperti yang dijelaskan dalam tabel 1, Gradle menyimpan laporan pengujian dalam direktori build/ dari setiap modul yang diuji. Namun, saat menjalankan pengujian di beberapa modul, sebaiknya gabungkan semua hasil pengujian menjadi satu laporan. Untuk membuat satu laporan saat menjalankan pengujian di beberapa modul, lakukan langkah-langkah berikut:

  1. Dalam file build.gradle level project, tambahkan kode berikut setelah semua konfigurasi lain dalam file tersebut.
    apply plugin: 'android-reporting'
    
  2. Panggil tugas test atau connectedAndroidTest dengan tugas mergeAndroidReports. Contoh:
    ./gradlew connectedAndroidTest mergeAndroidReports
    

    Jika Anda ingin melewati kegagalan pengujian agar Gradle dapat menyelesaikan semua pengujian yang tersisa, tambahkan opsi --continue:

    ./gradlew connectedAndroidTest mergeAndroidReports --continue
    

Setelah Gradle selesai menjalankan semua pengujian, Gradle akan menyimpan laporan gabungan dalam direktori PATH_TO_YOUR_PROJECT/build/.

Menjalankan pengujian dengan ADB

Jika menjalankan pengujian dari command line dengan Android Debug Bridge (adb), Anda akan memiliki lebih banyak opsi untuk memilih pengujian yang akan dijalankan daripada dengan metode lainnya. Anda dapat memilih metode pengujian individual, memfilter pengujian sesuai dengan anotasinya, atau menentukan opsi pengujian. Karena jalannya pengujian dikendalikan sepenuhnya dari command line, Anda dapat menyesuaikan pengujian dengan skrip shell dengan berbagai cara.

Untuk menjalankan pengujian dari command line, jalankan adb shell untuk memulai shell command line di perangkat atau emulator, lalu jalankan perintah am instrument di shell. Kontrol am dan pengujian Anda dengan flag command line.

Untuk mempermudah, Anda dapat memulai shell adb, panggil am instrument, dan menentukan flag command line dalam satu baris input. Shell akan terbuka di perangkat atau emulator, menjalankan pengujian, menghasilkan output, kemudian kembali ke command line di komputer Anda.

Untuk menjalankan pengujian dengan am instrument:

  1. Jika perlu, buat ulang aplikasi utama dan paket pengujian Anda.
  2. Instal file paket pengujian dan paket aplikasi utama Android Anda (file .apk) ke emulator atau perangkat Android Anda saat ini
  3. Di command line, masukkan:
    $ adb shell am instrument -w <test_package_name>/<runner_class>
    

    dengan <test_package_name> sebagai nama paket Android aplikasi pengujian, dan <runner_class> sebagai nama class test runner Android yang digunakan. Nama paket Android adalah nilai atribut package dari elemen manifest dalam file manifes (AndroidManifest.xml) paket pengujian Anda. Class test runner Android biasanya AndroidJUnitRunner.

    Hasil pengujian Anda muncul di STDOUT.

Operasi ini memulai shell adb, lalu menjalankan am instrument dengan parameter yang ditentukan. Bentuk perintah khusus ini akan menjalankan semua pengujian dalam paket pengujian Anda. Anda dapat mengontrol perilaku ini dengan flag yang diteruskan ke am instrument. Flag ini dijelaskan di bagian berikutnya.

Menggunakan perintah am instrument

Sintaksis umum perintah am instrument adalah:

am instrument [flags] <test_package>/<runner_class>

Parameter input utama untuk am instrument dijelaskan dalam tabel berikut:

Parameter Nilai Deskripsi
<test_package> Nama paket Android dari paket pengujian. Nilai atribut package dari elemen manifest dalam file manifes paket pengujian.
<runner_class> Nama class test runner berinstrumen yang Anda gunakan. Nama class biasanya adalah AndroidJUnitRunner.

Flag untuk am instrument dijelaskan dalam tabel berikut:

Flag Nilai Deskripsi
-w (tidak ada) Memaksa am instrument untuk menunggu sampai intrumentasi dihentikan sebelum berhenti sendiri. Efek akhirnya adalah membuat shell tetap terbuka sampai pengujian selesai. Flag ini tidak diwajibkan, tetapi jika Anda tidak menggunakannya, hasil pengujian Anda tidak akan ditampilkan.
-r (tidak ada) Output menghasilkan format raw. Gunakan flag ini saat Anda ingin mengumpulkan hasil pengukuran performa, sehingga tidak diformat sebagai hasil pengujian. Flag ini dirancang untuk digunakan dengan flag -e perf true (didokumentasikan dalam bagian Opsi instrumen).
-e <test_options> Memberikan opsi pengujian sebagai key-value pair. Alat am instrument meneruskan kode ini ke class instrumentasi yang ditentukan melalui metode onCreate(). Anda dapat menentukan beberapa kemunculan -e <test_options>. Kunci dan nilai dijelaskan di bagian opsi am instrument. Anda hanya dapat menggunakan pasangan nilai kunci ini dengan AndroidJUnitRunner atau dengan InstrumentationTestRunner dan subclass-nya. Menggunakannya dengan class lain tidak berpengaruh apa pun.
--no-hidden-api-checks (tidak ada) Menonaktifkan pembatasan penggunaan API tersembunyi. Untuk informasi selengkapnya tentang definisi API tersembunyi, dan pengaruhnya terhadap aplikasi Anda, baca Pembatasan pada antarmuka non-SDK.

Opsi am instrument

Alat am instrument meneruskan opsi pengujian ke AndroidJUnitRunner atau InstrumentationTestRunner dalam bentuk key-value pair, menggunakan flag -e, dengan sintaksis ini:

-e <key> <value>

Sebagian kunci menerima beberapa nilai. Tentukan beberapa nilai dalam daftar yang dipisahkan koma. Misalnya, pemanggilan AndroidJUnitRunner memberikan beberapa nilai untuk kunci package:

$ adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/android.support.test.runner.AndroidJUnitRunner

Tabel berikut mencantumkan pasangan nilai kunci yang dapat Anda gunakan dengan test runner.

Kunci Nilai Deskripsi
package <Java_package_name> Nama paket Java yang sepenuhnya memenuhi syarat untuk salah satu paket dalam aplikasi pengujian. Setiap class kasus pengujian yang menggunakan nama paket ini dieksekusi. Perhatikan bahwa ini bukan nama paket Android; paket pengujian memiliki satu nama paket Android, tetapi mungkin memiliki beberapa paket Java di dalamnya.
class <class_name> Nama class Java yang sepenuhnya memenuhi syarat untuk salah satu class kasus pengujian. Hanya class kasus pengujian ini yang dijalankan.
<class_name>#method name Nama class kasus pengujian yang sepenuhnya memenuhi syarat, dan salah satu metodenya. Hanya metode ini yang dieksekusi. Perhatikan tanda pagar (#) di antara nama class dan nama metode.
func true Menjalankan semua class pengujian yang memperpanjang InstrumentationTestCase.
unit true Menjalankan semua class pengujian yang tidak memperpanjang InstrumentationTestCase atau PerformanceTestCase.
size [small | medium | large] Menjalankan metode pengujian yang dianotasi berdasarkan ukuran. Anotasi tersebut adalah @SmallTest, @MediumTest, dan @LargeTest.
perf true Menjalankan semua class pengujian yang menerapkan PerformanceTestCase. Saat Anda menggunakan opsi ini, tentukan juga flag -r untuk am instrument, sehingga output disimpan dalam format raw dan tidak diformat ulang sebagai hasil pengujian.
debug true Menjalankan pengujian dalam mode debug.
log true Memuat dan mencatat semua pengujian yang ditentukan, tetapi tidak menjalankannya. Informasi pengujian muncul di STDOUT. Gunakan kode ini untuk memverifikasi kombinasi spesifikasi filter dan pengujian lainnya.
emma true Menjalankan analisis cakupan kode EMMA dan menulis output ke /data/<app_package>/coverage.ec di perangkat. Untuk mengganti lokasi file, gunakan kunci coverageFile yang dijelaskan dalam entri berikut.

Catatan: Opsi ini memerlukan build aplikasi pengujian berinstrumen EMMA, yang dapat Anda buat dengan target coverage.

coverageFile <filename> Mengganti lokasi default file cakupan EMMA pada perangkat. Tentukan nilai ini sebagai jalur dan nama file dalam format UNIX. Nama file default dijelaskan dalam entri untuk kunci emma.
-e Catatan Penggunaan Flag
  • am instrument memanggil onCreate(Bundle) dengan Bundle yang berisi pasangan nilai kunci.
  • Kunci package lebih diutamakan daripada kunci class. Jika Anda menentukan paket lalu menentukan class dalam paket tersebut secara terpisah, Android akan menjalankan semua pengujian dalam paket dan mengabaikan kunci class.
  • Kunci func dan kunci unit tidak dapat terjadi bersamaan.

Contoh penggunaan

Bagian berikut memberikan contoh penggunaan am instrument untuk menjalankan pengujian. Pengujian didasarkan pada struktur berikut:

  • Paket pengujian memiliki nama paket Android com.android.demo.app.tests
  • Dua class pengujian berinstrumen:
    • Foo1 yang berisi metode pengujian bar1, serta
    • Foo2 yang berisi metode pengujian bar2 dan bar3
  • Test runner-nya adalah AndroidJUnitRunner.

Menjalankan semua paket pengujian

Untuk menjalankan semua class pengujian dalam paket pengujian, masukkan:

$ adb shell am instrument -w com.android.demo.app.tests/android.support.test.runner.AndroidJUnitRunner

Menjalankan semua pengujian dalam class kasus pengujian

Untuk menjalankan semua pengujian di class UnitTests, masukkan:

$ adb shell am instrument -w  \
> -e class com.android.demo.app.tests.Foo \
> com.android.demo.app.tests/android.support.test.runner.AndroidJUnitRunner

am instrument mendapatkan nilai dari flag -e, mendeteksi kata kunci class, dan menjalankan semua metode di class UnitTests.

Memilih subset pengujian

Untuk menjalankan semua pengujian di Foo1, dan metode bar3 di Foo2, masukkan:

$ adb shell am instrument -w \
> -e class com.android.demo.app.tests.Foo1,com.android.demo.app.tests.Foo2#bar3 \
> com.android.demo.app.tests/android.support.test.runner.AndroidJUnitRunner