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 对象
在其自己的标记中定义,例如:build_provider
、target_preparer
、test
等。它们的各自用途在架构部分进行了更详细的描述。
每个对象都有与其关联的 Java 类,该类在 class=
中定义,并在运行时解析;因此,只要包含该类的 JAR 文件在运行时位于 Tradefed Java 类路径中,就可以找到并解析它。
Tradefed 对象的顺序
不同标记的顺序无关紧要。例如,先指定 build_provider
还是后指定 target_preparer
没有区别。测试调用的流程由 harness 本身强制执行,因此它始终会按正确的顺序调用它们。
具有相同标记的对象的顺序很重要。例如,定义的两个 target_preparer
对象将按照它们在 XML 中的定义顺序被调用。理解这一点很重要,因为它可能会改变设备设置的最终状态。例如,先刷机再安装 apk 与先安装 apk 再刷机 是不同的,因为刷机会擦除设备。