設置套件

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

在 Tradefed 中,套件是通過ITestSuite類驅動的,它允許獨立於測試的運行方式添加和刪除測試。

定義

  • Suite:一組測試模塊,配置為在類似的頂級設置下運行,以在一次調用下報告其結果。
  • 頂級設置:在運行任何測試模塊之前應用於設備的設置。
  • 主要配置:套件級 Tradefed XML 配置,描述應運行哪些模塊以及應使用哪些頂級設置
  • 模塊級設置:在運行模塊之前應用到設備的設置。這些也稱為特定於模塊的設置
  • 模塊配置:指的是AndroidTest.xml Tradefed XML 配置,它描述了模塊以及應該進行哪些模塊級設置
  • 模塊:由設置步驟(模塊級設置)、測試執行步驟和拆卸步驟組成的測試單元。

  • 模塊內重試:由模塊內的線束自動重試。

  • 套件重試:完全重新運行套件之前失敗的測試。

ITestSuite 結構

Tradefed中的 ITestSuite 是指驅動套件執行的通用基類。它由所有主要測試套件共享,特別是Android 兼容性測試套件 (CTS)Android 供應商測試套件 (VTS) ,並確保所有套件的執行體驗一致。

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

套件運行器在執行時遵循以下步驟:

  1. 加載模塊的配置並確定應該運行哪一組。
  2. 運行每個模塊:運行模塊級設置 b.運行模塊測試 c.運行模塊級拆卸
  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中指定的Module Metadata額外信息。它們允許您指定有關模塊的附加信息,並且可以使用元數據過濾模塊。

元數據示例:

<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。