AndroidTest.xml yapısı

Modül yapılandırmasının genel yapısı, normal Tradefed XML yapılandırmasına benzer bir kalıba sahiptir ancak bir paketin parçası olarak çalıştıkları için bazı kısıtlamalar vardır.

İzin verilen etiketlerin listesi

AndroidTest.xml veya daha geniş bir şekilde modül yapılandırması yalnızca şu XML etiketlerini içerebilir: target_preparer, multi_target_preparer, test ve metrics_collector.

Bu liste kısıtlayıcı görünse de test modülü kurulum ihtiyaçlarını ve çalıştırılacak testi tam olarak tanımlamanıza olanak tanır.

NOT: Farklı etiketler hakkında bilgi edinmek istiyorsanız Tradefed XML yapılandırması başlıklı makaleyi inceleyin.

build_provider veya result_reporter gibi nesneler, bir modül yapılandırmasının içinden çalıştırılmaya çalışılırsa ConfigurationException hatası oluşturur. Bunun amacı, bu nesnelerin bir modülden gerçekten bir görev gerçekleştirmesini beklememektir.

Örnek modül yapılandırması

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsGestureTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.gesture.cts" />
        <option name="runtime-hint" value="10m50s" />
    </test>
</configuration>

Bu yapılandırma, CtsGestureTestCases.apk'ün yüklenmesi gereken ve android.gesture.cts paketine karşı bir enstrümantasyon çalıştıracak bir testi açıklar.

Dahil etme etiketleri <include> ve <template-include>

Modül yapılandırmalarında <include> ve <template-include> kullanılması önerilmez. Bu bağlantı noktalarının beklendiği gibi çalışacağı garanti edilmez.

metrics_collector etiketi için özel durum

metrics_collector izni verilir ancak modül için çekilecek ve günlüğe kaydedilecek belirli bir dosyayı veya dizini belirtmek amacıyla FilePullerLogCollector sınıfıyla sınırlıdır. Bu özellik, günlükleri belirli bir konumda bırakıyor ve otomatik olarak kurtarmak istiyorsanız kullanışlıdır.

Örnek yapılandırma:

<configuration description="Config for CTS UI Rendering test cases">
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsUiRenderingTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.uirendering.cts" />
        <option name="runtime-hint" value="11m55s" />
        <option name="runner" value="android.uirendering.cts.runner.UiRenderingRunner" />
        <option name="isolated-storage" value="false" />
    </test>

    <!-- Collect the files in the dump directory for debugging -->
    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
        <option name="directory-keys" value="/sdcard/UiRenderingCaptures" />
        <option name="collect-on-run-ended-only" value="true" />
    </metrics_collector>
</configuration>

Derleme bilgileri veya indirmeler ne olacak?

İzin verilen etiketlerin tanımı, bir modülün herhangi bir derleme bilgisi almayacağı yanlış izlenimi verebilir. Bu doğru değil.

Derleme bilgileri paket düzeyindeki kurulumdan sağlanır ve paketin tüm modülleri tarafından paylaşılır. Bu sayede, paketin tüm modüllerinin çalıştırılması için paket için tek bir üst düzey kurulum yapılabilir.

Örneğin, her Compatibility Test Suite (CTS) modülünün cihaz bilgilerini, türlerini vb. ayrı ayrı sorgulamasının yerine CTS paket düzeyinde kurulum (cts.xml) bunu bir kez yapar ve her modül isterse bu bilgileri alır.

Bir modüldeki nesnelerin derleme bilgilerini alabilmesi için normal Tradefed yapılandırmasında olduğu gibi aynı işlemi yapması gerekir: IBuildInfo almak için IBuildReceiver arayüzünü uygulayın. Daha fazla bilgi için cihazla test yapma başlıklı makaleyi inceleyin.

Meta veri alanları

Çok sayıda test modülü, her biri benzersiz bir hedefe sahip olan bazı metadata spesifikasyonları içerir.

Örnek:

  <option name="config-descriptor:metadata" key="component" value="framework" />
  <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
  <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
  <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />

Bileşen

component meta verileri, modülün test etmeyi amaçladığı genel Android bileşenini tanımlar. Test yürütme üzerinde doğrudan bir etkisi yoktur ve temel olarak kuruluş amaçları için kullanılır.

CTS için izin verilen bileşenlerin güncel listesini CtsConfigLoadingTest'te bulabilirsiniz. Bir CTS modülüne var olmayan bir bileşen eklenirse bu test göndermeden önce başarısız olur.

module-metadata-include-filter ve module-metadata-exclude-filter kullanarak bir paket çalıştırmasını bileşenlere göre filtreleyebilirsiniz.

Örnek:

  --module-metadata-include-filter component framework

Bu örnekte yalnızca framework bileşeniyle ek açıklama eklenmiş test modülü çalıştırılır.

Parametre

parameter üst verileri bilgilendirme amaçlıdır ve test yürütmeyi etkiler. Test modülünün hangi Android moduna uygulandığını belirtir. Bu durumda modlar, instant apps, secondary users veya different abis gibi üst düzey Android modlarıyla sınırlıdır.

Paket çalıştırma sırasında, mod test için geçerliyse modu temel alan birkaç test modülü varyasyonu oluşturulur. Her varyasyonda benzer testler farklı modlarda çalıştırılır.

  • instant_app: APK'ları hazır uygulama olarak yükleyen testlerin bir varyantını oluşturun.
  • multi_abi: Cihaz tarafından desteklenen her ABI için testlerin bir varyantını oluşturun.
  • secondary_user: APK'ları yükleyen ve ikincil kullanıcı olarak testleri çalıştıran testlerin bir varyantını oluşturun.

Performans testi modülleri için metrik toplama ve son işleme

Performans testi modülleri için performans testleri açısından gerekli olduklarından modül düzeyinde metrics_collector ve metric_post_processor'e izin verilir. Modül düzeyindeki metrik toplayıcılar ve son işlemciler modüle özel olabilir. Son işlemcileri hem üst düzey hem de modül düzeyinde belirtmeniz önerilmez.

Performans testi modülü yapılandırması, performance değeriyle test-type meta verilerini içermelidir. Örneğin: xml <option name="config-descriptor:metadata" key="test-type" value="performance" /> Bu olmadan, test yapılandırması FilePullerLogCollector dışında bir metric_collector veya herhangi bir metric_post_processor içeriyorsa test göndermeden önce başarısız olur.

Örnek performans testi modülü yapılandırması:

<configuration description="Runs sample performance test.">
    <!-- Declare as a performance test module -->
    <option name="config-descriptor:metadata" key="test-type" value="performance" />
    <option name="test-tag" value="hello-world-performance-test" />
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="class" value="android.test.example.helloworldperformance.HelloWorldPerformanceTest" />
    </test>
    <!-- Add module-level post processor MetricFilePostProcessor -->
    <metric_post_processor class="com.android.tradefed.postprocessor.MetricFilePostProcessor">
        <option name="aggregate-similar-tests" value="true" />
        <option name="enable-per-test-log" value="false" />
    </metric_post_processor>
</configuration>