Enstrümantasyon Testleri

İlk olarak, Developer.android.com adresindeki Uygulamanızı test edin bölümünü okuyun. Enstrümantasyon testlerinin platform testinde nasıl kullanıldığı konusunda bazı farklılıklar olduğunu unutmayın.

Özet olarak, bir enstrümantasyon testi, hedeflenen uygulama sürecinin yeniden başlatıldığı ve temel uygulama bağlamı ile başlatıldığı ve uygulama süreci VM'sinin içinde bir enstrümantasyon iş parçacığının başlatıldığı, am instrument komutu aracılığıyla başlatılan özel bir test yürütme ortamı sağlar. Test kodunuz, bu enstrümantasyon iş parçacığında yürütmeye başlar ve test edilen uygulama sürecini manipüle etmek için uygulama içeriğine ve API'lere erişim sağlayan bir Instrumentation örneği ile sağlanır.

Anahtar kavramlar

  • bir enstrümantasyon, uygulama paketi bildiriminin <manifest> etiketinin altına yerleştirilmiş bir <instrumentation> etiketi ile bir uygulama paketinde bildirilmelidir.
  • bir uygulama paketi bildirimi teknik olarak birden fazla <instrumentation> etiketi içerebilir, ancak bu şekilde yaygın olarak kullanılmaz.
  • her <instrumentation> şunları içermelidir:
    • bir android:name özniteliği: test uygulamasında yer alan ve genellikle kullanılan test çalıştırıcı olan bir Instrumentation alt sınıfının adı olmalıdır, ör. android.support.test.runner.AndroidJUnitRunner
    • bir android:targetPackage özniteliği tanımlanmalıdır. Değeri, test edilen uygulama paketine ayarlanmalıdır.

Adımların özeti

  1. Aşağıda, çerçeve hizmetlerine karşı hermetik testler için ortak hedefler bulunmaktadır:

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

    Bileşeniniz için yepyeni bir enstrümantasyon modülü ekliyorsanız, bkz.

  2. Yukarıdaki konumlardan birine testler ekliyorsanız, mevcut kuralın ardından. Yeni bir test modülü kuruyorsanız, lütfen yukarıdaki konumlardan birinde AndroidManifest.xml ve Android.mk kurulumunu izleyin.

  3. Örnek için çerçeveler/temel/çekirdek/testler/koretestler/ bölümüne bakın. Bu satırların ekstra uygulamalar yüklediğini unutmayın:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Testinizi @SmallTest , @MediumTest veya @LargeTest olarak işaretlemeyi unutmayın.

  5. Test modülünü m ile oluşturun, örneğin:

    m FrameworksCoreTests
    
  6. Testleri çalıştırın:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Tradefed kullanmıyorsanız, testleri manuel olarak kurun ve çalıştırın:

    1. Oluşturulan apk'yı yükleyin:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Testleri çeşitli seçeneklerle çalıştırın:

      1. apk'deki tüm testler

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. belirli bir Java paketi altındaki tüm testler

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. belirli bir sınıf altındaki tüm testler

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. belirli bir test yöntemi

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

Testiniz, JUnit API'lerini kullanarak başarılı veya başarısız olduğunda açık bir iddiada bulunabilir; ayrıca, yakalanmamış herhangi bir özel durum da işlevsel bir arızaya neden olur.

Performans metriklerini yaymak için test kodunuz, anahtar/değer çiftlerinin bir listesini göndermek üzere Instrumentation#sendStatus çağırabilir. Şuna dikkat etmek önemlidir:

  1. metrikler tamsayı veya kayan nokta olabilir
  2. sayısal olmayan tüm değerler atılacaktır
  3. test apk'niz işlevsel testler veya ölçüm testleri olabilir, ancak ikisinin karıştırılması şu anda desteklenmemektedir