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等。它們各自的用途在架構部分中有更詳細的描述。

每個物件都有與class=中定義的物件關聯的 Java 類,該類別在運行時解析;因此,只要包含該類別的 JAR 檔案在運行時位於 Tradefed Java 類別路徑上,它就會被找到並解析。

Tradefed 物件的順序

不同標籤的順序並不重要。例如,如果在target_preparer之後指定build_provider沒有什麼差別。測試呼叫流程由工具本身強制執行,因此它始終會以正確的順序呼叫它們。

具有相同標籤的物件的順序很重要。例如,定義的兩個target_preparer物件將按照它們在 XML 中的定義順序被呼叫。了解這一點很重要,因為它可以改變設備設定的最終狀態。例如,閃爍然後安裝 apk 與安裝apk 並閃爍不同,因為閃爍會擦除裝置。