Bazı test modülleri, test durumu içinde gerçekleştirilemeyen özelleştirilmiş kurulum ve yıkım adımları gerektirebilir. Tipik örnekler arasında şunlar yer alabilir:
- test APK'sına ek olarak başka APK'lar yükleme
- bazı dosyaları cihaza aktarma
- komut çalıştırma (ör. adb shell pm ...)
Geçmişte, bileşen ekipleri genellikle bu tür görevleri gerçekleştirmek için ana makine tarafı testi yazmaya başvuruyordu. Bu da Trade Federation harness'in anlaşılmasını gerektiriyordu ve genellikle bir 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ırması kavramını kullanmaya başladık. Yukarıdaki ortak görevler listesi yalnızca birkaç satırlık yapılandırmayla gerçekleştirilebilir. Maksimum esneklik için ITargetPreparer veya ITargetCleaner tarafından tanımlanan kendi hedef hazırlayıcınızı bile uygulayabilir ve bunları kendi test modülü yapılandırmanızda kullanılacak şekilde yapılandırabilirsiniz.
Bir test modülü için test modülü yapılandırması, üst düzey modül kaynak klasörüne eklenen ve "AndroidTest.xml" olarak adlandırılan zorunlu bir XML dosyasıdır. XML, Trade Federation test otomasyonu donanımı tarafından kullanılan bir 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ırlayanlar
Adından da anlaşılacağı gibi "target_preparer" etiketi, bir hedef hazırlayıcıyı tanımlar (bkz. ITargetPreparer) ve test modülü yürütülmeden önce çağrılan bir kurulum yöntemi sunar ve test için "target_preparer" etiketinde referans verilen sınıf da ITargetCleaner'ı uygularsa kaldırma yöntemi, test modülü tamamlandıktan sonra ç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 "AndroidTest.xml" adlı yeni bir dosya ekleyin ve bu 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, yukarıdaki "insert" yorumuna aşağıdaki seçenek etiketlerini ekleyebiliriz:
<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 düzeneğini şu şekilde yapılandırır:
- Test modülü çağrılmadan önce cihazda "settings put secure accessibility_enabled 1" kabuk komutunu yürütün.
- Test modülü tamamlandıktan sonra "settings put secure accessibility_enabled 0" kabuk komutunu yürütün.
Bu örnekte, erişilebilirlik sırasıyla test modülü yürütülmeden önce/sonra etkinleştirilir/devre dışı bırakılır. Basit bir örnekle gösterildiği gibi, "option" etiketinin nasıl kullanıldığıyla ilgili daha fazla ayrıntı verilmesi gerekir. Yukarıda gösterildiği gibi, etiketin iki özelliği olabilir: ad ve değer. Ad özelliği, hazırlayan tarafından sunulan seçeneklerden birini ifade etmelidir.
Değer alanının tam amacı, hazırlayanın seçeneği nasıl tanımladığına bağlıdır: Dize, sayı, Boole veya hatta dosya yolu olabilir. En yaygın üç hedef hazırlayıcının özetini aşağıda bulabilirsiniz:
sınıf adı: PushFilePreparer
- short name: push-file
- function: Test senaryosu klasöründeki rastgele dosyaları cihazdaki hedefe gönderir.
- notlar:
- Bu hazırlayan, klasörden klasöre veya dosyadan dosyaya aktarım yapabilir. Yani cihazdaki bir klasörün altındaki dosyayı aktaramazsınız. Hedef dosya adını da bu klasörün altında belirtmeniz gerekir.
- options:
- push-file: Yerel dosyanın cihaza gönderilmesi gereken yolu belirten bir push-spec. Tekrarlanabilir. Aynı uzak yola gönderilecek şekilde birden fazla dosya yapılandırılırsa en son dosya gönderilir.
- 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. Tekrarlanabilir. Bu yol, test modülü dizinine veya out dizinine göreceli olabilir. - post-push: Tüm gönderme işlemleri denendikten sonra cihazda çalıştırılacak komut (
adb shell <your command>
ile). Tipik kullanım durumu, izinler için chmod'u kullanmaktır.
sınıf adı: InstallApkSetup
- Kısa ad:install-apk
- function: Cihazdaki hedef klasöre rastgele APK dosyaları gönderir.
- options:
- test-file-name: Cihaza yüklenecek APK'nın adı.
- install-arg: Baştaki tire dahil olmak üzere pm install komutuna iletilecek ek bağımsız değişkenler (ör. "-d"). Tekrarlanabilir
sınıf adı: RunCommandTargetPreparer
- Kısa ad: run-command
- function: Test modülü yürütülmeden önce veya yürütüldükten sonra rastgele kabuk komutlarını yürütür.
- options:
- 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>
Sık kullanılan üç test sınıfı şunlardır:
sınıf adı: GTest
- short name: gtest
- function: Belirli bir cihazda yerel test paketi çalıştıran bir testtir.
- options:
- native-test-device-path: Cihazda yerel testlerin bulunduğu yol.
sınıf adı: InstrumentationTest
- kısa ad: instrumentation
- function: Belirli bir cihazda 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şlev: android.support.test.runner.AndroidJUnitRunner kullanılarak belirli bir cihazda bir enstrümantasyon testi paketi çalıştıran bir testtir. Bu, bir enstrümantasyon testini yürütmenin temel yoludur.