Uji instrumentasi

Pertama, baca Menguji aplikasi Anda di developer.android.com. Perhatikan bahwa ada beberapa perbedaan dalam cara penggunaan pengujian instrumentasi dalam pengujian platform.

Singkatnya, pengujian instrumentasi menyediakan lingkungan eksekusi pengujian khusus yang diluncurkan melalui perintah am instrument, tempat proses aplikasi target dimulai ulang dan diinisialisasi dengan konteks aplikasi dasar, dan thread instrumentasi dimulai di dalam VM proses aplikasi. Kode pengujian Anda memulai eksekusi di thread instrumentasi ini dan diberi 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 berada di bawah tag <manifest> dari manifes paket aplikasi.
  • Manifes paket aplikasi secara teknis dapat berisi beberapa tag <instrumentation>, meskipun tidak umum digunakan dengan cara ini.
  • Setiap <instrumentation> harus berisi:
    • atribut android:name: atribut ini harus berupa nama subclass dari Instrumentation yang disertakan dalam aplikasi pengujian, yang biasanya merupakan test runner yang sedang digunakan, misalnya: android.support.test.runner.AndroidJUnitRunner
    • Atribut android:targetPackage harus ditentukan. Nilainya harus ditetapkan ke paket aplikasi yang sedang diuji.

Ringkasan langkah

  1. Berikut adalah tujuan umum untuk pengujian hermetik terhadap layanan framework:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Jika Anda menambahkan modul instrumentasi baru untuk komponen, lihat

  2. Mengikuti konvensi yang ada jika Anda menambahkan pengujian ke salah satu lokasi di atas. Jika Anda menyiapkan modul pengujian baru, ikuti penyiapan AndroidManifest.xml dan Android.mk di salah satu lokasi di atas

  3. Lihat frameworks/base/core/tests/coretests/ untuk melihat contoh. Perhatikan bahwa baris ini menginstal aplikasi tambahan:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Jangan lupa menandai pengujian Anda sebagai @SmallTest, @MediumTest, atau @LargeTest

  5. Bangun modul pengujian dengan m, misalnya:

    m FrameworksCoreTests
    
  6. Jalankan pengujian:

    • Solusi paling sederhana adalah menggunakan Atest seperti ini:

      atest FrameworksCoreTests
      
    • Atau untuk pengujian yang lebih kompleks, gunakan Trade Federation Test Harness:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Jika tidak menggunakan Tradefed, instal dan jalankan pengujian secara manual:

    1. Instal APK yang dihasilkan:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Jalankan pengujian dengan berbagai opsi:

      1. semua pengujian di APK

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. semua pengujian dalam paket Java tertentu

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. semua pengujian dalam class tertentu

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. 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 tentang lulus atau gagal menggunakan API JUnit; selain itu, pengecualian yang tidak tertangkap juga akan menyebabkan kegagalan fungsional.

Untuk memancarkan metrik performa, kode pengujian Anda dapat memanggil Instrumentation#sendStatus untuk mengirimkan daftar key-value pair. Penting untuk diperhatikan bahwa:

  1. metrik dapat berupa bilangan bulat atau floating point
  2. nilai non-numerik akan dihapus
  3. APK pengujian Anda dapat berupa pengujian fungsional atau pengujian metrik, tetapi saat ini tidak didukung jika keduanya digabungkan