Incluye plantillas y elementos incluidos en la configuración XML de Tradefed

No siempre es práctico crear una configuración XML monolítica para definir una prueba. Si quieres volver a usar parte de la configuración para ejecutar pruebas similares, deberás copiar y mantener dos archivos en formato XML gigantes.

Aquí es donde las etiquetas template y include en la definición de configuración XML de Tradefed resultan útiles. Te permiten establecer marcadores de posición en alguna configuración XML para agregar parte de otra configuración XML.

Ejemplo de definición para plantillas

<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>

Las plantillas son marcadores de posición con un name para hacer referencia a ellos y un campo default opcional. El campo predeterminado define el XML de reemplazo predeterminado que se debe usar.

Para reemplazar una plantilla por una configuración determinada, se debe agregar el siguiente parámetro de comando a la línea de comandos:

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

--template:map preparers=empty

Por ejemplo:

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

La referencia empty en este caso hace referencia a la configuración de empty.xml que no contiene nada. La usamos como referencia para reemplazar por nada.

La ruta de acceso de las configuraciones XML puede ser absoluta o relativa a la carpeta res/config dentro de los recursos JAR de Tradefed. Estas son algunas de sus ubicaciones:

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

Ejemplo de definición de incluye

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

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

Las inclusiones son más simples que las plantillas, ya que no requieren argumentos de línea de comandos. Expanden directamente el XML al que se hace referencia en la etiqueta name. Al igual que con las plantillas, la ruta de acceso a la configuración puede ser absoluta o relativa. Sin embargo, para includes, recomendamos usar solo rutas de acceso relativas, ya que son más portátiles en Tradefed. Las rutas de acceso absolutas no serían válidas si Tradefed se mueve a otra máquina.

Configuración incorrecta

En caso de que la configuración sea incorrecta, por ejemplo, cuando no se puede encontrar el XML de reemplazo, Tradefed arrojará un ConfigurationException con la descripción de lo que parece faltar o está mal configurado.