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