Tradefed 中的「套件」是指在驅動整體執行作業的通用測試執行程式下執行多個測試的設定。
在 Tradefed 中,套件會透過 ITestSuite
類別驅動,讓您可以新增及移除測試,而無須考量測試的執行方式。
定義
- 套件:設定為在類似的頂層設定下執行的一組「測試模組」,可在單次叫用下回報結果。
- 頂層設定:在執行任何測試模組之前,套用至裝置的設定。
- 主設定:套件層級的交易 XML 設定,描述應執行哪些模組,以及應使用哪些頂層設定。
- 模組層級設定:在執行模組前,將設定套用至裝置。這些也稱為模組專屬設定。
- 模組設定:指的是
AndroidTest.xml
Tradefed XML 設定,用於說明模組,以及應執行哪些模組層級設定。 - 模組:由設定步驟 (模組層級設定)、測試執行步驟和解除安裝步驟組成的測試單元。
- 模組內重試:由模組內的測試套件自動重試。
- 套件重試:重新執行套件先前失敗的測試。
ITestSuite 結構
Tradefed 中的 ITestSuite
是指執行套件的通用基礎類別。這個版本由所有主要測試套件共用 (特別是 Android Compatibility Test Suite (CTS) 和 Android 供應商測試套件 (VTS)),可確保所有套件都能提供一致的執行體驗。
我們有時將 ITestSuite 稱為套件執行器。
套件執行器執行時會遵循下列步驟:
- 載入模組的設定並決定要執行哪個組合。
執行每個模組:
- 執行模組層級設定。
- 執行模組測試。
- 執行模組層級的拆除作業。
回報結果。
頂層設定
從 Tradefed 的角度來看,ITestSuite
只是另一項測試。這項測試雖然複雜,但仍與其他 IRemoteTest
一樣,只是測試而已。因此,在 Tradefed 設定中指定套裝組合執行程式時,Tradefed 會遵循設定的一般模式:執行 build_provider
、target_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]
與 base CtsGestureTestCases
。