Karmaşık test yapılandırması

Bazı test modülleri, testin kendisinde yapılamayan özelleştirilmiş kurulum ve kaldırma adımları gerektirebilir. Tipik örnekler şunlardır:

  • Diğer APK'ları (test APK'sına ek olarak) yükleme
  • Bazı dosyaları cihaza aktarma
  • Komutları çalıştırma (ör. adb shell pm ...)

Geçmişte bileşen ekipleri, bu tür görevleri gerçekleştirmek için genellikle ana makine tarafı test yazmaya başvuruyordu. Bu da Trade Federation koşum takımının anlaşılmasını gerektiriyor ve genellikle test modülünün karmaşıklığını artırıyordu.

CTS'den yararlanarak bu tür görevleri desteklemek için test modülü yapılandırma kavramını kullanıma sunduk. Yukarıdaki yaygın görevler listesi, yalnızca birkaç satır yapılandırmayla elde edilebilir. Maksimum esneklik için ITargetPreparer veya ITargetCleaner tarafından tanımlandığı şekilde kendi hedef hazırlayıcınızı bile uygulayabilir ve kendi test modülü yapılandırmanızda kullanacak şekilde yapılandırabilirsiniz.

Test modülü yapılandırması, üst düzey modül kaynak klasörüne eklenen ve "AndroidTest.xml" adlı zorunlu bir XML dosyasıdır. XML, Trade Federation test otomasyon donanım kitinde kullanılan yapılandırma dosyasının biçimini izler. Ş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

"target_preparer" etiketi, adından da anlaşılacağı gibi, test modülü test için çalıştırılmadan önce çağrılan bir kurulum yöntemi sunan bir hedef hazırlayıcı (ITargetPreparer'a bakın) tanımlar. Ayrıca, "target_preparer" etiketinde referans verilen sınıf ITargetCleaner'ı da uygularsa test modülü sona erdikten sonra sınıfın teardown yöntemi çağrılır.

Yerleşik ortak modül yapılandırmasını kullanmak için test modülünüzün üst düzey klasörüne "AndroidTest.xml" adlı yeni bir dosya ekleyin ve dosyayı 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>

Örneğin, aşağıdaki seçenek etiketlerini (yukarıdaki "insert" yorumuna) ekleyebilirsiniz:

    <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 çalıştırın
  2. Test modülü tamamlandıktan sonra "settings put secure accessibility_enabled 0" kabuk komutunu çalıştırın.

Bu örnekte, erişilebilirlik sırasıyla test modülü çalıştırılmadan önce/çalıştırıldıktan sonra etkinleştirilir/devre dışı bırakılır. Basit bir örnekle gösterilen "option" etiketinin nasıl kullanıldığıyla ilgili daha fazla ayrıntıyı ele almak gerekir. Yukarıda gösterildiği gibi, etiketin iki özelliği olabilir: ad ve değer. Ad ö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: dize, sayı, boole veya hatta dosya yolu olabilir. Üç yaygın hedef hazırlayıcının özetini aşağıda bulabilirsiniz:

  • sınıf adı: PushFilePreparer

    • kısa ad: push-file
    • işlevi: Test kaydı klasörünün altındaki rastgele dosyaları cihazdaki hedefe gönderir
    • notes:
      • Bu hazırlayıcı, klasörden klasöre veya dosyadan dosyaya aktarabilir. Yani cihazdaki bir klasörün altına dosya aktaramazsınız: Hedef dosya adını da bu klasörün altına belirtmeniz gerekir.
    • options:
      • push-file: Cihazda itilmesi gereken yerel dosyanın yolunu belirten bir itme özelliği. Tekrarlanabilir. Birden fazla dosya aynı uzak yola itilecek şekilde yapılandırılmışsa en son dosya itilir.
      • push: (desteklenmiyor) "/path/to/srcfile.txt->/path/to/destfile.txt" veya "/path/to/srcfile.txt->/path/to/destdir/" olarak biçimlendirilmiş bir push özelliği. Tekrarlanabilir. Bu yol, test modülü dizine veya çıkış dizininin kendisine göre olabilir.
      • push-sonrası: Tüm yayınlama denemeleri yapıldıktan sonra cihazda çalıştırılacak bir komut ("adb shell <your command>" ile). Tipik kullanım alanı, izinler için chmod kullanmaktır.
  • sınıf adı: InstallApkSetup

    • Kısa ad:install-apk
    • işlevi: Cihazdaki hedefe rastgele APK dosyaları gönderir
    • options:
      • test-file-name: Cihaza yüklenecek APK'nın adı.
      • install-arg: Başında kısa çizgi bulunan ek bağımsız değişkenler (ör. "-d") pm install komutuna iletilir. Tekrarlanabilir
  • sınıf adı: RunCommandTargetPreparer

    • kısa ad: run-command
    • işlevi: Test modülü yürütülmeden önce veya yürütüldükten sonra rastgele kabuk komutları yürütür
    • options:
      • run-command: Çalıştırılacak adb kabuk komutu. Tekrarlanabilir
      • teardown-command: Yıkım aşamasında çalıştırılacak adb shell komutu. Tekrarlanabilir

Test sınıfı

Test sınıfı, testi yürütmek için kullanılacak Trade Federation 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>

Sık kullanılan üç test sınıfı şunlardır:

  • sınıf adı: GTest

    • short name: gtest
    • işlevi: Belirli bir cihazda yerel test paketi çalıştıran bir test.
    • options:
      • native-test-device-path: Cihazdaki yerel testlerin bulunduğu yol.
  • sınıf adı: InstrumentationTest

    • kısa ad: instrumentation
    • işlevi: Belirli bir cihazda bir araç testi paketi çalıştıran bir test
    • options:
      • 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şlevi: android.support.test.runner.AndroidJUnitRunner sınıfını kullanarak belirli bir cihazda bir araç testi paketi çalıştıran bir test. Araç testini yürütmenin ana yolu budur.