Pertama-tama, baca Menguji aplikasi di developer.android.com. Perhatikan bahwa ada beberapa perbedaan bagaimana uji instrumentasi digunakan dalam pengujian platform.
Singkatnya, uji instrumentasi menyediakan
eksekusi uji khusus
seperti yang diluncurkan melalui perintah am instrument
. Dalam hal ini,
proses aplikasi dimulai ulang dan diinisialisasi dengan konteks aplikasi dasar,
dan thread instrumentasi dimulai di dalam VM proses aplikasi. Nama
kode pengujian memulai eksekusi pada thread instrumentasi ini dan dilengkapi dengan
instance Instrumentation
yang memberikan akses ke konteks aplikasi
dan API untuk memanipulasi proses aplikasi yang sedang diuji.
Konsep utama
- instrumentasi harus dideklarasikan dalam paket aplikasi, dengan elemen
<instrumentation>
yang disarangkan dalam tag<manifest>
di manifes paket aplikasi. - manifes paket aplikasi secara teknis
berisi beberapa
<instrumentation>
, meskipun tidak umum digunakan dengan cara ini. - setiap
<instrumentation>
harus berisi:- atribut
android:name
: atribut ini harus berupa nama subclass dariInstrumentation
yang disertakan dalam aplikasi pengujian, yang biasanya merupakan pengujian runner yang sedang digunakan, misalnya:android.support.test.runner.AndroidJUnitRunner
- atribut
android:targetPackage
harus ditentukan. Nilainya harus ditetapkan ke paket aplikasi yang sedang diuji.
- atribut
Ringkasan langkah-langkah
Berikut adalah tujuan umum untuk pengujian hermetic terhadap layanan framework:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Jika Anda menambahkan modul instrumentasi baru untuk komponen, lihat
Dengan mengikuti konvensi yang ada, jika Anda menambahkan pengujian ke salah satu lokasi di atas. Jika Anda menyiapkan modul pengujian baru, ikuti penyiapan
AndroidManifest.xml
danAndroid.mk
di salah satu lokasi atasLihat frameworks/base/core/tests/coretests/ sebagai contoh. Perhatikan bahwa baris ini menginstal aplikasi tambahan:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Jangan lupa untuk menandai pengujian Anda sebagai
@SmallTest
,@MediumTest
, atau@LargeTest
Build modul pengujian dengan m, misalnya:
m FrameworksCoreTests
Jalankan pengujian:
Solusi yang paling sederhana adalah dengan menggunakan Atest seperti berikut:
atest FrameworksCoreTests
Atau untuk pengujian yang lebih kompleks, gunakan Batas Uji Coba Federasi Perdagangan:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Jika tidak menggunakan Tradefed, instal dan jalankan pengujian secara manual:
- Instal apk yang dihasilkan:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Jalankan pengujian dengan berbagai opsi:
semua pengujian pada apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
semua pengujian dalam paket Java tertentu
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
semua pengujian dalam class tertentu
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
metode pengujian tertentu
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Pengujian Anda dapat membuat pernyataan eksplisit saat berhasil atau gagal menggunakan JUnit
API; inci
tambahan, setiap pengecualian yang tidak tertangkap juga akan menyebabkan kegagalan fungsional.
Untuk menampilkan metrik performa, kode pengujian Anda dapat memanggil
Instrumentation#sendStatus
untuk mengirimkan daftar
pasangan nilai kunci. Penting untuk diperhatikan bahwa:
- metrik dapat berupa bilangan bulat atau floating point
- nilai non-numerik apa pun akan dihapus
- apk pengujian dapat berupa pengujian fungsional atau pengujian metrik, namun saat ini pencampuran keduanya tidak didukung