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ı etiketlerle ilgili bilgilerinizi tazelemeye ihtiyacınız varsa Satın alınmış XML yapılandırması bölümüne bakın.

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 oluşturur. Bunun amacı, bu nesnelerin gerçekten modül içinden bir görevi gerçekleştirmesini beklemekten kaçınmaktır.

Ö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. Beklendiği gibi çalışmaları 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 derleme bilgisi almayacağına dair yanlış bir izlenim verebilir. Bu doğru değil.

Derleme bilgileri paket düzeyinde 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 etmek istediği 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. CTS modülüne mevcut olmayan bir bileşen eklenirse bu test, ön gönderimde 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 uygulanacağı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 test modülünün çeşitli varyasyonları oluşturulur. Her varyasyon farklı modlarda benzer testler yapar.

  • 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 gerekli olan modül düzeyindeki metrics_collector ve metric_post_processor özelliklerine 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>