Pertama, baca Menguji aplikasi di developer.android.com. Perhatikan bahwa ada beberapa perbedaan dalam cara uji instrumentasi digunakan dalam pengujian platform.
Singkatnya, uji instrumentasi menyediakan lingkungan eksekusi
pengujian khusus seperti yang diluncurkan melalui perintah am instrument, tempat proses aplikasi
yang ditargetkan dimulai ulang dan diinisialisasi dengan konteks aplikasi dasar,
dan thread instrumentasi dimulai di dalam VM proses aplikasi. Kode
pengujian Anda 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 tag
<instrumentation>yang disusun bertingkat di bawah tag<manifest>manifes paket aplikasi. - manifes paket aplikasi secara teknis dapat berisi beberapa
tag
<instrumentation>, meskipun biasanya tidak digunakan dengan cara ini. - setiap
<instrumentation>harus berisi:- atribut
android:name: harus berupa nama subclassInstrumentationyang disertakan dalam aplikasi pengujian, yang biasanya merupakan runner pengujian yang sedang digunakan, misalnya:android.support.test.runner.AndroidJUnitRunner - atribut
android:targetPackageharus ditentukan. Nilainya harus ditetapkan ke paket aplikasi yang sedang diuji.
- atribut
Ringkasan langkah
Berikut adalah tujuan umum untuk pengujian hermetis terhadap layanan framework:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestestsJika 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.xmldanAndroid.mkdi salah satu lokasi di atasLihat frameworks/base/core/tests/coretests/ untuk mengetahui contohnya. 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@LargeTestBuild modul pengujian dengan m, misalnya:
m FrameworksCoreTestsJalankan pengujian:
Solusi yang paling sederhana adalah menggunakan Atest seperti ini:
atest FrameworksCoreTestsAtau untuk pengujian yang lebih kompleks, gunakan Harness pengujian Trade Federation:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTestsJika tidak menggunakan Tradefed, instal dan jalankan pengujian secara manual:
- Instal apk yang dihasilkan:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apkJalankan pengujian dengan berbagai opsi:
semua pengujian dalam apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnersemua pengujian dalam paket Java tertentu
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnersemua pengujian dalam class tertentu
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnermetode 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 tentang lulus atau gagal menggunakan JUnit API; selain itu, pengecualian yang tidak tertangkap juga akan menyebabkan kegagalan fungsional.
Untuk menampilkan metrik performa, kode pengujian Anda dapat memanggil
Instrumentation#sendStatus
untuk mengirim daftar key-value pair. Penting untuk diperhatikan bahwa:
- metrik dapat berupa bilangan bulat atau floating point
- nilai non-numerik apa pun akan dihapus
- APK pengujian Anda dapat berupa pengujian fungsional atau pengujian metrik, tetapi penggabungan keduanya saat ini tidak didukung