設置套房

Tradefed 中的套件是指一種設置,其中多個測試在驅動整體執行的通用測試運行器下運行。

在 Tradefed 中,套件透過ITestSuite類別驅動,該類別允許獨立於測試的運行方式新增和刪除測試。

定義

  • 套件:一組測試模組,配置為在類似的頂級設定下運行,以在單次呼叫下報告其結果。
  • 頂層設定:在運行任何測試模組之前應用於設備的設定。
  • 主要配置:套件級 Tradefed XML 配置,描述應執行哪些模組以及應使用哪些頂級設定
  • 模組級設定:在運行模組之前應用於設備的設定。這些也稱為特定於模組的設定
  • 模組配置:指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 、 test (本例中為我們的套件)和target_cleaner

包含ITestSuite的 Tradefed 配置中的此序列為頂級設定。

例子:

<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