Набор в Tradefed – это конфигурация, в которой несколько тестов выполняются в общей программе запуска, управляющей всем процессом.
В Tradefed наборы тестов управляются с помощью класса ITestSuite, который позволяет добавлять и удалять тесты независимо от того, как они выполняются.
Определения
- Набор тестовых модулей, настроенных для выполнения в рамках настройки верхнего уровня и предоставления результатов в рамках одного вызова.
- Настройка верхнего уровня: настройка, применяемая к устройствам до запуска любого из тестовых модулей.
- Основная конфигурация – это XML-конфигурация Tradefed на уровне набора, в которой указано, какие модули должны быть запущены и какая настройка верхнего уровня должна использоваться.
- Настройка на уровне модуля: применяется к устройствам непосредственно перед запуском модуля. (также называются настройками для отдельных модулей).
- Конфигурация модуля – это XML-конфигурация Tradefed
AndroidTest.xml, в которой описаны модули и указано, какую настройку на уровне модуля следует выполнить. - Модуль – тестовый блок, состоящий из этапа настройки (настройка на уровне модуля), этапа выполнения теста и этапа завершения.
- Повторная попытка внутри модуля. Автоматическая повторная попытка, выполняемая тестовым набором внутри модуля.
- Повторный запуск набора: повторный запуск всех тестов из набора, которые не прошли в предыдущий раз.
Структура ITestSuite
ITestSuite в Tradefed относится к общему базовому классу, управляющему выполнением набора. Он используется во всех основных наборах тестов, в частности в Android Compatibility Test Suite (CTS) и Android Vendor Test Suite (VTS), и обеспечивает единообразное выполнение всех наборов.
Иногда мы называем ITestSuite запускателем набора тестов.
При выполнении набора тестов программа запуска действует следующим образом:
- Загрузить конфигурацию модуля и определить, какой набор должен быть запущен.
Запустите каждый модуль:
- Выполните настройку на уровне модуля.
- Запустите тесты модуля.
- Выполните разборку на уровне модуля.
Сообщите о результатах.
Настройка верхнего уровня
С точки зрения 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.