Как настроить наборы

Набор в Tradefed – это конфигурация, в которой несколько тестов выполняются в общей программе запуска, управляющей всем процессом.

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

Определения

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

Структура ITestSuite

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

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

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

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

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

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

С точки зрения Tradefed, ITestSuite – это просто ещё один тест. Это сложный тест, но он ничем не отличается от других IRemoteTest. Поэтому при указании средства запуска набора в конфигурации Tradefed Tradefed следует обычному шаблону конфигурации: запуск build_provider, target_preparer, тест (в данном случае наш набор) и 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

В этом случае все модули будут запущены с метаданными framework в качестве component.

Полный пример 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.