Шаблоны и включения в XML-конфигурации Tradefed

Создавать один монолитный XML-файл конфигурации для определения теста не всегда удобно. Если вы хотите повторно использовать часть настроек для запуска аналогичных тестов, вам придется скопировать и поддерживать два гигантских XML-файла.

В этом случае вам помогут теги template и include в определении XML-конфигурации Tradefed. Они позволяют задавать в некоторых конфигурациях XML плейсхолдеры, чтобы добавлять часть другой конфигурации XML.

Пример определения для шаблонов

<configuration description="Common base configuration for local runs with minimum overhead">
    <build_provider class="com.android.tradefed.build.BootstrapBuildProvider" />

    <template-include name="preparers" default="empty" />

    <template-include name="test" default="empty" />

    <template-include name="reporters" default="empty" />
</configuration>

Шаблоны – это плейсхолдеры с полем name, которое используется для ссылки на них, и необязательным полем default. Поле default определяет XML-код замены по умолчанию, который следует использовать.

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

--template:map <name of template>=<replacement XML config path>

--template:map preparers=empty

Пример:

<template-include name="preparers" default="empty" />

Ссылка empty в этом случае относится к конфигурации empty.xml, которая ничего не содержит. Мы используем ее как ссылку, чтобы заменить на ничего.

Путь к XML-файлам конфигурации может быть абсолютным или относительным по отношению к папке res/config в ресурсах JAR-файла Tradefed. Вот некоторые из них:

  • tools/tradefederation/core/res/config
  • tools/tradefederation/core/tests/res/config
  • tools/tradedeferation/contrib/res/config

Пример определения includes

<configuration description="Common base configuration for local runs with minimum overhead">
    <build_provider class="com.android.tradefed.build.BootstrapBuildProvider" />

    <include name="empty"/>
</configuration>

Включения проще шаблонов, поскольку не требуют аргументов командной строки. Они напрямую разворачивают XML, на который ссылается тег name. Как и в случае с шаблонами, путь к конфигурации может быть абсолютным или относительным. Однако для includes мы рекомендуем использовать только относительные пути, поскольку они более переносимы в Tradefed. Абсолютные пути будут недействительны, если Tradefed перенести на другой компьютер.

Неправильная конфигурация

Если конфигурация задана неправильно, например не удается найти XML-файл для замены, Tradefed выдаст ошибку ConfigurationException с описанием того, что отсутствует или настроено неправильно.