Struktura pliku AndroidTest.xml

Ogólna struktura konfiguracji modułu jest podobna do zwykłej konfiguracji XML Tradefed, ale z pewnymi ograniczeniami wynikającymi z tego, że moduły są uruchamiane w ramach pakietu.

Lista dozwolonych tagów

AndroidTest.xml lub szerzej konfiguracja modułu może zawierać tylko te tagi XML: target_preparer, multi_target_preparer, testmetrics_collector.

Chociaż ta lista może wyglądać na restrykcyjną, pozwala dokładnie określić wymagania dotyczące konfiguracji modułu testowego i testu do wykonania.

UWAGA: jeśli chcesz przypomnieć sobie różne tagi, zapoznaj się z konfiguracją pliku XML Tradefed.

Obiekty takie jak build_provider lub result_reporter wywołają błąd ConfigurationException, jeśli spróbujesz uruchomić je z poziomu konfiguracji modułu. Ma to na celu uniknięcie oczekiwań dotyczących tych obiektów, które faktycznie wykonują jakieś zadanie w ramach modułu.

Przykładowa konfiguracja modułu

<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>

Ta konfiguracja opisuje test, który wymaga zainstalowania CtsGestureTestCases.apk i uruchamia instrumentację dla pakietu android.gesture.cts.

Tagi uwzględnienia <include> i <template-include>

Nie zalecamy używania parametrów <include><template-include> w konfiguracjach modułów. Nie ma gwarancji, że będą działać zgodnie z oczekiwaniami.

Specjalny przypadek tagu metrics_collector

Funkcja metrics_collector jest dozwolona, ale ograniczona do klasy FilePullerLogCollector, aby określić plik lub katalog, który ma zostać pobrany i zapisany w ramach modułu. Jest to przydatne, jeśli pozostawiasz dzienniki w konkretnej lokalizacji i chcesz je automatycznie odzyskać.

Przykładowa konfiguracja:

<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>

A co z informacjami o kompilacji lub pobieraniem?

Definicja dozwolonych tagów może tworzyć mylne wrażenie, że moduł nie otrzyma żadnych informacji o kompilacji. To nieprawda.

Informacje o kompilacji są udostępniane na poziomie konfiguracji pakietu i będą udostępniane wszystkim modułom pakietu. Dzięki temu wystarczy jedno ustawienie najwyższego poziomu dla pakietu, aby uruchomić wszystkie moduły wchodzące w jego skład.

Na przykład zamiast tego, aby każdy moduł Compatibility Test Suite (CTS) osobno wysyłał zapytanie o informacje o urządzeniu, typy itp., konfiguracja CTS na poziomie zestawu (cts.xml) wykonuje to raz, a każdy moduł otrzyma te informacje, jeśli je zażąda.

Aby obiekty w module mogły otrzymywać informacje o kompilacji, muszą wykonać te same czynności co w przypadku zwykłej konfiguracji Tradefed: wdrożyć interfejs IBuildReceiver, aby odbierać IBuildInfo. Więcej informacji znajdziesz w artykule Testowanie za pomocą urządzenia.

Pola metadanych

Duża liczba modułów testowych zawiera specyfikacje metadata, z których każda ma swój cel.

Przykład:

  <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" />

Komponent

Metadane component opisują ogólny komponent Androida, który ma być testowany przez moduł. Nie ma on bezpośredniego wpływu na wykonanie testu; służy głównie do celów organizacyjnych.

Aktualna lista dozwolonych komponentów CTS jest dostępna w CtsConfigLoadingTest. Ten test nie powiedzie się przed przesłaniem, jeśli do modułu CTS zostanie dodany nieistniejący komponent.

Za pomocą parametrów module-metadata-include-filtermodule-metadata-exclude-filter możesz filtrować uruchomienie pakietu na podstawie komponentów.

Przykład:

  --module-metadata-include-filter component framework

W tym przykładzie uruchamiany jest tylko moduł testowy z adnotacją framework.

Parametr

Metadane parameter mają charakter informacyjny i wpływają na wykonanie testu. Określa, do którego trybu Androida ma zastosowanie moduł testu. W takim przypadku tryby są ograniczone do trybów Androida na wysokim poziomie, takich jak instant apps, secondary users lub different abis.

Podczas wykonywania zestawu testów, jeśli tryb ma zastosowanie do testu, tworzone są różne wersje modułu testu na podstawie tego trybu. Każda wersja testuje podobne testy, ale w różnych trybach.

  • instant_app: utwórz wariant testów, które instalują pliki APK jako aplikacje błyskawiczne.
  • multi_abi: utwórz wariant testów dla każdego interfejsu ABI obsługiwanego przez urządzenie.
  • secondary_user: utwórz wariant testów, które instalują pliki APK i uruchamiają testy jako użytkownik dodatkowy.

Zbieranie danych i ich przetwarzanie w przypadku modułów testów wydajności

W przypadku modułów testów wydajności dozwolone są tagi metrics_collectormetric_post_processor na poziomie modułu, ponieważ są one niezbędne do testów wydajności. Zbieracze i postprocesory danych na poziomie modułu mogą być specyficzne dla modułu. Nie zalecamy określania postprocesorów na poziomie najwyższym i na poziomie modułu.

Konfiguracja modułu testu wydajności musi zawierać metadane test-type o wartości performance, np.:xml <option name="config-descriptor:metadata" key="test-type" value="performance" />Jeśli konfiguracja testu zawiera metric_collector inny niż FilePullerLogCollector lub dowolny metric_post_processor, test nie przechodzi weryfikacji przed przesłaniem.

Przykładowa konfiguracja modułu testu wydajności:

<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>