Karmaşık test yapılandırması

Bazı test modülleri, test senaryosunun kendisinde gerçekleştirilemeyen özelleştirilmiş kurulum ve sökme adımları gerektirebilir. Tipik örnekler şunları içerebilir:

  • diğer apk'leri yükleyin (test apk'sına ek olarak)
  • bazı dosyaları cihaza aktarın
  • komutları çalıştırma (örn. adb kabuk pm ...)

Geçmişte, bileşen ekipleri bu tür görevleri gerçekleştirmek için genellikle Ticaret Federasyonu donanımının anlaşılmasını gerektiren ve genellikle bir test modülünün karmaşıklığını artıran bir ana bilgisayar tarafı testi yazmaya başvuruyorlardı.

Bu tür görevleri desteklemek için CTS'den ödünç alarak test modülü yapılandırması kavramını tanıttık; yukarıdaki ortak görevler listesine yalnızca birkaç yapılandırma satırıyla ulaşılabilir. Maksimum esneklik için, ITargetPreparer veya ITargetCleaner tarafından tanımlandığı şekilde kendi hedef hazırlayıcınızı bile uygulayabilir ve bunları kendi test modülü yapılandırmanızda kullanacak şekilde yapılandırabilirsiniz.

Bir test modülü için test modülü yapılandırması, 'AndroidTest.xml' adlı üst düzey modül kaynak klasörüne eklenen gerekli bir XML dosyasıdır. XML, Ticaret Federasyonu test otomasyon donanımı tarafından kullanılan bir yapılandırma dosyasının formatını takip eder. Şu anda test modülü yapılandırmaları aracılığıyla işlenen ana etiketler "target_preparer" ve "test" etiketleridir.

Hedef hazırlayıcılar

Adından da anlaşılacağı gibi bir "target_preparer" etiketi, test modülü test için yürütülmeden önce çağrılan bir kurulum yöntemi sunan bir hedef hazırlayıcıyı (bkz. ITargetPreparer ) tanımlar; ve "target_preparer" etiketinde başvurulan sınıf aynı zamanda ITargetCleaner'ı da uyguluyorsa, test modülü bittikten sonra bunun sökme yöntemi çağrılacaktır.

Yerleşik ortak modül yapılandırmasını kullanmak için, test modülünüzün en üst düzey klasörüne yeni bir 'AndroidTest.xml' dosyası ekleyin ve onu aşağıdaki içerikle doldurun:

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

Örnek olarak aşağıdaki seçenek etiketlerini ekleyebiliriz (yukarıdaki “insert” yorumuna):

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

Seçenekler test donanımını aşağıdaki şekilde yapılandıracaktır:

  1. test modülü çağrılmadan önce, cihazda "settings put secureaccessibility_enabled 1" kabuk komutunu yürütün
  2. test modülü bittikten sonra, “settings put secureaccessibility_enabled 0” kabuk komutunu çalıştırın

Bu özel örnekte, erişilebilirlik sırasıyla test modülünün yürütülmesinden önce/sonra etkinleştirilir/devre dışı bırakılır. Gösterilen basit bir örnekle “option” etiketinin nasıl kullanıldığına dair daha fazla ayrıntıya girmek gerekiyor. Yukarıda gösterildiği gibi etiketin iki özelliği olabilir: ad, değer. Name özelliği, hazırlayıcı tarafından sunulan seçeneklerden birine atıfta bulunmalıdır.

Değer alanının tam amacı, hazırlayıcının seçeneği nasıl tanımladığına bağlıdır: bir dize, bir sayı, bir boole ve hatta bir dosya yolu olabilir. İşte üç ortak hedef hazırlayıcının özeti:

  • sınıf adı: PushFilePreparer

    • kısa isim : push dosyası
    • işlev : test senaryosu klasörü altındaki rastgele dosyaları cihazdaki hedefe aktarır
    • notlar :
      • bu hazırlayıcı klasörden klasöre veya dosyadan dosyaya aktarım yapabilir; yani, cihazdaki bir klasörün altındaki bir dosyayı gönderemezsiniz: o klasörün altındaki hedef dosya adını da belirtmeniz gerekir.
    • seçenekler :
      • push-file: Yerel dosyayı aygıtta iletilmesi gereken yola belirten bir push-spec. Tekrarlanabilir. Birden fazla dosya aynı uzak yola gönderilecek şekilde yapılandırılmışsa en sonuncusu aktarılacaktır.
      • push: (kullanımdan kaldırıldı) ' /path/to/srcfile.txt->/path/to/destfile.txt ' veya ' /path/to/srcfile.txt->/path/to/destdir/ olarak biçimlendirilmiş bir push-spec /path/to/srcfile.txt->/path/to/destdir/ '. Tekrarlanabilir. Bu yol, test modülü dizinine veya çıkış dizininin kendisine göre olabilir.
      • post-push: Tüm push'lar denendikten sonra cihazda çalıştırılacak bir komut (` adb shell <your command> ` ile). Tipik kullanım durumu izinler için chmod kullanılmasıdır
  • sınıf adı: InstallApkSetup

    • Kısa isim: install-apk
    • işlev: isteğe bağlı apk dosyalarını cihazdaki hedefe iter
    • seçenekler:
      • test-dosya-adı: cihaza yüklenecek apk'nin adı.
      • install-arg: PM install komutuna iletilecek ek argümanlar, baştaki tire dahil, örneğin "-d". Tekrarlanabilir
  • sınıf adı: RunCommandTargetPreparer

    • Kısa isim: run-komut
    • işlev: test modülünün yürütülmesinden önce veya sonra isteğe bağlı kabuk komutlarını yürütür
    • seçenekler:
      • run-command: çalıştırılacak adb kabuk komutu. Tekrarlanabilir
      • teardown-command: sökme aşamasında çalıştırılacak adb kabuk komutu. Tekrarlanabilir

Test sınıfı

Test sınıfı, testi yürütmek için kullanılacak Ticaret Federasyonu sınıfıdır.

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

İşte üç yaygın test sınıfı:

  • sınıf adı: GTest

    • Kısa isim: gtest
    • işlev: Belirli bir cihazda yerel bir test paketini çalıştıran bir Test.
    • seçenekler:
      • native-test-device-path: Yerel testlerin bulunduğu cihaz üzerindeki yol.
  • sınıf adı: InstrumentationTest

    • Kısa isim: enstrümantasyon
    • işlev: Belirli bir cihazda enstrümantasyon test paketini çalıştıran bir Test
    • seçenekler:
      • paket: Çalıştırılacak Android test uygulamasının bildirim paketi adı.
      • class: Çalıştırılacak test sınıfının adı.
      • yöntem: Çalıştırılacak test yönteminin adı.
  • sınıf adı: AndroidJUnitTest

    • işlev: Android.support.test.runner.AndroidJUnitRunner'ı kullanarak belirli bir cihazda enstrümantasyon test paketini çalıştıran bir Test Bu, bir enstrümantasyon testi yürütmenin ana yoludur.