Настройка люксов

Под пакетом в Tradefed понимается установка, в которой несколько тестов выполняются под управлением общего средства запуска тестов, которое управляет общим выполнением.

В Tradefed пакеты управляются через класс ITestSuite , который позволяет добавлять и удалять тесты независимо от того, как они выполняются.

Определения

  • Пакет: набор тестовых модулей , настроенных для работы в аналогичной настройке верхнего уровня и сообщающих о своих результатах при одном вызове.
  • Настройка верхнего уровня: настройка применяется к устройствам перед запуском любого из тестовых модулей.
  • Основная конфигурация: XML-конфигурация Tradefed на уровне пакета, которая описывает, какие модули следует запускать и какие настройки верхнего уровня следует использовать.
  • Настройка на уровне модуля: настройка применяется к устройствам непосредственно перед запуском модуля. Они также известны как настройки для конкретного модуля .
  • Конфигурация модуля: относится к XML-конфигурации AndroidTest.xml Tradefed, в которой описаны модули и какая настройка на уровне модуля должна быть выполнена.
  • Модуль: тестовый блок, состоящий из этапа настройки ( настройка на уровне модуля ), этапа выполнения теста и этапа демонтажа.
  • Повторная попытка внутри модуля: автоматическая повторная попытка, выполняемая жгутом внутри модуля.
  • Повторная попытка пакета: полный повтор ранее неудачных тестов пакета.

Структура ITestSuite

ITestSuite в Tradefed относится к общему базовому классу, управляющему выполнением пакета. Он используется всеми основными наборами тестов, в частности набором тестов совместимости Android (CTS) и набором тестов Android Vendor Test Suite (VTS) , и обеспечивает единообразие выполнения во всех наборах.

Иногда мы называем ITestSuite средством запуска пакета .

При выполнении программа запуска пакета выполняет следующие шаги:

  1. Загрузите конфигурацию модуля и определите, какой набор должен работать.
  2. Запустите каждый модуль:

    1. Запустите настройку на уровне модуля.
    2. Запустите тесты модулей.
    3. Запустите демонтаж на уровне модуля.
  3. Сообщите о результатах.

Настройка верхнего уровня

С точки зрения Tradefed, ITestSuite — это просто еще один тест. Это сложный тест, но это всего лишь тест, как и любой другой IRemoteTest . Таким образом, при указании запуска пакета в конфигурации Tradefed Tradefed следует обычному шаблону конфигурации: запускает build_provider , target_preparer , test (в данном случае наш пакет) и target_cleaner .

Эта последовательность в конфигурации Tradefed, содержащей ITestSuite является настройкой верхнего уровня.

Пример:

<configuration description="Common config for Compatibility suites">

    <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
    <!-- Setup applied before the suite: so everything running in the suite will
    have this setup beforehand -->
    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put global package_verifier_enable 0" />
        <option name="teardown-command" value="settings put global package_verifier_enable 1"/>
    </target_preparer>

    <!-- Our ITestSuite implementation -->
    <test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />

    <result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>

Метаданные модуля

Мы называем метаданными модуля дополнительную информацию, указанную в тестовом модуле AndroidTest.xml . Эти метаданные позволяют указать дополнительную информацию о модуле, а модули можно фильтровать с помощью метаданных.

Пример метаданных:

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

Пример фильтра по метаданным:

--module-metadata-include-filter component=framework

Вышеупомянутое будет запускать все модули с инфраструктурой в качестве метаданных компонента .

Полный пример AndroidTest.xml :

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <!-- Metadata -->
    <option name="config-descriptor:metadata" key="component" value="framework" />
    <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
    <!-- End: metadata -->
    <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>

Параметризованный модуль

Особым типом метаданных является parameter .

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

Эти метаданные указывают, что модуль необходимо выполнить в другом режиме , например, как мгновенное приложение, а не в стандартном режиме приложения.

Все возможные режимы или параметры описываются ModuleParameters и имеют связанный обработчик в ModuleParametersHelper , который позволяет изменить настройку модуля для выполнения в определенном режиме.

Например, в режиме мгновенного приложения установка APK осуществляется в мгновенном режиме.

Чтобы параметризация произошла, в командной строке необходимо включить ее с помощью:

--enable-parameterized-modules

Также возможно запустить один данный режим с помощью:

--enable-parameterized-modules --module-parameter <Mode>

--enable-parameterized-modules --module-parameter INSTANT_APP

При запуске параметризованной версии модуля она сообщает о своих результатах под именем параметризованного модуля, например CtsGestureTestCases[instant] вместо базового CtsGestureTestCases .