Karmaşık Test Yapılandırması

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

  • diğer apk'leri kurun (test apk'sına ek olarak)
  • bazı dosyaları cihaza itin
  • çalıştırma komutları (örneğin adb shell pm ...)

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

CTS'den ödünç alarak, bu tür görevleri desteklemek için test modülü yapılandırması kavramını tanıttık, yukarıdaki ortak görevler listesi yalnızca birkaç satır yapılandırmayla elde edilebilir. Maksimum esneklik için, kendi hedef hazırlayıcınızı ITargetPreparer veya ITargetCleaner tarafından tanımlandığı şekilde uygulayabilir ve bunları kendi test modülü yapılandırmanızda kullanmak üzere yapılandırabilirsiniz.

Bir test modülü için bir 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 biçimini 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 atıfta bulunulan sınıf aynı zamanda ITargetCleaner'ı da uygularsa, test modülü bittikten sonra ayırma yöntemi çağrılı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ı şu şekilde yapılandırır:

  1. test modülü çağrılmadan önce, cihazda "settings put secure accessibility_enabled 1" kabuk komutunu yürütün
  2. test modülü tamamlandıktan sonra, "settings put secure accessibility_enabled 0" kabuk komutunu yürütü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ıyı ele almak gerekir. Yukarıda gösterildiği gibi, etiketin iki özelliği olabilir: ad, değer. name özniteliğ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 bir özeti:

  • sınıf adı: PushFilePreparer

    • kısa isim : push-file
    • işlev : test senaryosu klasörü altındaki keyfi dosyaları cihazdaki hedefe iter
    • notlar :
      • bu hazırlayıcı, klasörden klasöre veya dosyadan dosyaya gönderebilir; yani, cihazdaki bir klasörün altına bir dosya gönderemezsiniz: hedef dosya adını o klasör altında da belirtmelisiniz
    • seçenekler :
      • push-file: Yerel dosyayı aygıtta gönderilmesi gereken yola belirten bir push-spec. tekrarlanabilir. Birden çok dosya aynı uzak yola gönderilecek şekilde yapılandırılmışsa, en sonuncusu gönderilir.
      • push: (kullanımdan kaldırıldı) ' /path/to/srcfile.txt->/path/to/destfile.txt ' veya ' /path/to/srcfile.txt->/path/to/destdir/ şeklinde biçimlendirilmiş bir push özelliği /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 kullanmak olacaktır.
  • sınıf adı: InstallApkSetup

    • kısa isim: install-apk
    • işlev: keyfi apk dosyalarını cihazdaki hedefe iter
    • seçenekler:
      • test-file-name: cihaza kurulacak apk'nin adı.
      • install-arg: pm install komutuna iletilecek ek bağımsız değişkenler, baştaki kısa çizgi dahil, örneğin "-d". Tekrarlanabilir
  • sınıf adı: RunCommandTargetPreparer

    • kısa isim: run-command
    • 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: ayırma aşamasında çalıştırılacak adb shell komutu. tekrarlanabilir

Test sınıfı

Bir 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 paketi çalıştıran bir Test.
    • seçenekler:
      • native-test-device-path: Yerel testlerin bulunduğu cihazdaki yol.
  • sınıf adı: InstrumentationTest

    • kısa isim: enstrümantasyon
    • fonksiyon: Belirli bir cihazda enstrümantasyon test paketini çalıştıran bir Test
    • seçenekler:
      • package: Çalıştırılacak Android test uygulamasının manifest paket adı.
      • class: Çalıştırılacak test sınıfı adı.
      • method: Çalıştırılacak test yöntemi adı.
  • sınıf adı: AndroidJUnitTest

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