Tradefed XML 配置的高级结构

Tradefed 的配置遵循 XML 结构来描述要运行的测试以及要完成的准备/设置步骤。

从理论上讲,可以在 XML 中定义一个命令的所有内容。但在实践中,更实用的做法是拥有基本模板 XML 文件,并使用额外的命令行参数对其进行自定义。

结构

<configuration description="<description of the configuration>">
    <!-- A build provider that takes local device information -->
    <build_provider class="com.android.tradefed.build.BootstrapBuildProvider" />

    <!-- Some target preparation, disabled by default -->
    <target_preparer class="com.android.tradefed.targetprep.PreloadedClassesPreparer">
        <option name="disable" value="true" />
    </target_preparer>

    <!-- One test running some unit tests -->
    <test class="com.android.tradefed.testtype.HostTest">
        <option name="class" value="com.android.tradefed.build.BuildInfoTest" />
    </test>

    <!-- [OPTIONAL] -->
    <logger class="com.android.tradefed.log.FileLogger">
        <option name="log-level" value="VERBOSE" />
        <option name="log-level-display" value="VERBOSE" />
    </logger>

    <!-- [OPTIONAL] -->
    <log_saver class="com.android.tradefed.result.FileSystemLogSaver" />

    <!-- As many reporters as we want -->
    <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />
    <result_reporter class="com.android.tradefed.result.suite.SuiteResultReporter" />
    <result_reporter class="com.android.tradefed.result.MetricsXMLResultReporter"/>
</configuration>

整个 Tradefed XML 由 <configuration> 标记分隔。Tradefed objects 在其各自的标记中进行定义,例如 build_providertarget_preparertest 等。架构部分更详细地介绍了其各自的用途。

每个对象都有与其关联的 Java 类,该对象在 class= 中进行定义,并在运行时解析;因此,只要包含该类的 JAR 文件在运行时位于 Tradefed Java 类路径上,就会被找到并解析。

Tradefed 对象的顺序

如果对象具有不同的标记,它们的顺序无关紧要。例如,如果在 target_preparer 之后指定了 build_provider,则不会有任何区别。测试调用的流程由自动化测试框架本身强制执行,因此它将始终按照正确的顺序调用这些对象。

如果对象具有相同的标记,它们的顺序很重要。例如,定义的两个 target_preparer 对象将按照 XML 中的定义顺序进行调用。理解这一点很重要,因为它可以改变设备设置的结束状态。例如,“先刷写再安装 APK”与“先安装 APK 再刷写”不同,因为刷写操作会擦除设备。