設定套件

Tradefed 的套件是指在一項設定下,執行多項測試 促進整體執行作業的常見測試執行器。

在 Tradefed 中,套件會透過 ITestSuite 類別驅動,讓您可以新增及移除測試,而無須考量測試的執行方式。

定義

  • 套件:一組測試模組,已設定為在類似的頂層設定下執行,以便在單一叫用中回報結果。
  • 頂層設定:在執行下列任一操作前,先在裝置上套用設定 測試模組。
  • 主要設定:一種套件等級的 Tradefed XML 設定, 說明瞭應執行哪些模組,以及應該採用哪些頂層設定
  • 模組層級設定:在執行 後續課程我們將逐一介紹 預先訓練的 API、AutoML 和自訂訓練這也稱為模組專屬設定
  • 模組設定:指的是 AndroidTest.xml Tradefed XML 設定,用於說明模組,以及應執行哪些模組層級設定
  • 模組:包含設定步驟 (「模組層級設定」) 的測試單元 執行步驟和一個移除步驟
  • 模組內重試:由模組內的測試套件自動重試。
  • 套件重試:重新執行套件先前失敗的測試。

ITestSuite 結構

Tradefed 中的 ITestSuite 是指執行套件的通用基礎類別。所有主要測試套件都會共用此檔案,特別是 Android 相容性測試套件 (CTS)Android 供應商測試套件 (VTS),以確保所有套件都能提供一致的執行體驗。

我們有時將 ITestSuite 稱為套件執行器

套件執行器在執行時,會遵循下列步驟:

  1. 載入模組的設定並決定要執行哪個組合。
  2. 執行每個模組:

    1. 執行模組層級設定。
    2. 執行模組測試。
    3. 執行模組層級拆解作業。
  3. 回報測試結果。

頂層設定

從 Tradefed 的角度來看,ITestSuite 只是另一項測試。這項測試雖然複雜,但仍與其他 IRemoteTest 一樣,只是測試而已。在指定時 在 Tradefed 配置中的套件執行者 Tradefed 會遵循 設定的模式:執行 build_providertarget_preparer、測試 (在此例中為我們的套件) 和 target_cleaner

在 Tradefed 設定中,含有 ITestSuite 的這個序列是頂層設定。

例子:

<configuration description="Common config for Compatibility suites">

    <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
    <!-- Setup applied before the suite: so everything running in the suite will
    have this setup beforehand -->
    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put global package_verifier_enable 0" />
        <option name="teardown-command" value="settings put global package_verifier_enable 1"/>
    </target_preparer>

    <!-- Our ITestSuite implementation -->
    <test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />

    <result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>

模組中繼資料

我們稱測試模組 AndroidTest.xml 中指定的額外資訊為「模組中繼資料」。這個中繼資料可讓您指定 模組,並以中繼資料篩選模組。

中繼資料範例:

<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

中繼資料篩選器範例:

--module-metadata-include-filter component=framework

上述指令會以「元件」中繼資料的形式執行所有具有「架構」的模組。

完整的 AndroidTest.xml 範例:

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <!-- Metadata -->
    <option name="config-descriptor:metadata" key="component" value="framework" />
    <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
    <!-- End: metadata -->
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsGestureTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.gesture.cts" />
        <option name="runtime-hint" value="10m50s" />
    </test>
</configuration>

參數化模組

特殊的中繼資料類型為 parameter

<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

這項中繼資料指定模組需要以不同的模式執行,例如以即時應用程式模式執行,而非標準應用程式模式。

所有可能的模式或參數皆由 ModuleParameters 說明,並在 ModuleParametersHelper 中提供相關聯的處理常式,讓您變更模組設定,以便在特定模式下執行。

舉例來說,即時應用程式模式會強制以即時模式安裝 APK。

為了執行參數化,指令列需要加以啟用 取代為:

--enable-parameterized-modules

您也可以使用下列方式執行單一模式:

--enable-parameterized-modules --module-parameter <Mode>

--enable-parameterized-modules --module-parameter INSTANT_APP

模組執行參數化版本時,會在以下位置回報其結果: 參數化模組名稱,例如 CtsGestureTestCases[instant] 和 基本費率 CtsGestureTestCases