Tes instrumentasi

Bacaan pertama Uji aplikasi Anda di developer.android.com. Perhatikan bahwa ada beberapa perbedaan dalam cara pengujian instrumentasi digunakan dalam pengujian platform.

Singkatnya, pengujian instrumentasi menyediakan lingkungan eksekusi pengujian khusus 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 mesin virtual proses aplikasi. Kode pengujian Anda memulai eksekusi pada thread instrumentasi ini dan dilengkapi dengan instans Instrumentation yang menyediakan akses ke konteks aplikasi dan API untuk memanipulasi proses aplikasi yang sedang diuji.

Konsep-konsep kunci

  • instrumentasi harus dideklarasikan dalam paket aplikasi, dengan tag <instrumentation> yang ditempatkan di bawah tag <manifest> pada manifes paket aplikasi.
  • manifes paket aplikasi secara teknis mungkin berisi beberapa tag <instrumentation> , meskipun tidak umum digunakan dengan cara ini.
  • setiap <instrumentation> harus berisi:
    • atribut android:name : harus berupa nama subkelas Instrumentation yang disertakan dalam aplikasi pengujian, yang biasanya merupakan runner pengujian yang digunakan, misalnya: android.support.test.runner.AndroidJUnitRunner
    • atribut android:targetPackage harus ditentukan. Nilainya harus ditetapkan ke paket aplikasi yang diuji.

Ringkasan langkah-langkah

  1. Di bawah ini adalah tujuan umum untuk uji kedap udara terhadap layanan kerangka:

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

    Jika Anda menambahkan modul instrumentasi baru untuk komponen Anda, lihat

  2. Mengikuti konvensi yang ada jika Anda menambahkan tes 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/ sebagai contoh. Perhatikan baris ini menginstal aplikasi tambahan:

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

  5. Bangun modul pengujian dengan m, misalnya:

    m FrameworksCoreTests
    
  6. Jalankan tes:

    • Solusi paling sederhana adalah dengan menggunakan Atest seperti:

      atest FrameworksCoreTests
      
    • Atau untuk tes yang lebih kompleks, gunakan tes Federasi Dagang Harness :

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

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

      1. semua tes di apk

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

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. semua tes di bawah kelas 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 JUnit API; selain itu, pengecualian apa pun yang tidak tertangkap juga akan menyebabkan kegagalan fungsional.

Untuk mengeluarkan metrik performa, kode pengujian Anda dapat memanggil Instrumentation#sendStatus untuk mengirimkan daftar pasangan nilai kunci. Penting untuk diperhatikan bahwa:

  1. metrik dapat berupa integer atau floating point
  2. nilai non-numerik apa pun akan dibuang
  3. apk pengujian Anda dapat berupa pengujian fungsional atau pengujian metrik, namun pencampuran keduanya saat ini tidak didukung