部分測試模組可能需要自訂設定和拆解步驟,而這些步驟無法在測試案例中執行。常見範例包括:
- 安裝其他 APK (除了測試 APK 外)
- 將部分檔案推送至裝置
- 執行指令 (例如 adb shell pm ...)
過去,元件團隊通常會撰寫主機端測試來執行這類工作,但這需要瞭解 Trade Federation 束縛裝置,而且通常會增加測試模組的複雜度。
我們借助 CTS 的概念,引入測試模組設定,以便支援這類工作。只要幾行設定,就能完成上述常見工作。為了盡可能提高彈性,您甚至可以實作自己的目標準備工具 (如 ITargetPreparer 或 ITargetCleaner 所定義),並將其設為在您自己的測試模組設定中使用。
測試模組的測試模組設定是指新增至頂層模組來源資料夾的必要 XML 檔案,其名稱為「AndroidTest.xml」。該 XML 檔案會遵循 Trade Federation 測試自動化輔助程式所使用的設定檔格式。目前透過測試模組設定處理的主要代碼為「target_preparer」和「test」代碼。
目標準備者
如同名稱所示,「target_preparer」標記會定義目標準備工具 (請參閱 ITargetPreparer),提供設定方法,該方法會在執行測試模組前呼叫;如果「target_preparer」標記中參照的類別也實作 ITargetCleaner,則在測試模組完成後,系統會叫用該類別的解構方法。
如要使用內建的常用模組設定,請在測試模組的頂層資料夾中新增檔案「AndroidTest.xml」,並填入以下內容:
<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>
舉例來說,我們可以新增下列選項標記 (在上述「插入」註解中):
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="settings put secure accessibility_enabled 1" />
<option name="teardown-command" value="settings put secure accessibility_enabled 0" />
</target_preparer>
這些選項會將測試裝載組件設為:
- 在叫用測試模組前,請在裝置上執行 shell 指令「settings put secure accessibility_enabled 1」
- 測試模組完成後,請執行 shell 指令「settings put secure accessibility_enabled 0」
在這個特定範例中,無障礙功能會分別在測試模組執行前/後啟用/停用。在簡單的示例中,我們需要進一步說明如何使用「option」標記。如上所示,標記可包含兩個屬性:名稱和值。name 屬性必須參照準備者提供的其中一個選項。
值欄位的確切用途取決於準備者如何定義選項:可以是字串、數字、布林值,甚至是檔案路徑。以下是三種常見的目標準備工具摘要:
類別名稱:PushFilePreparer
- 短名稱:push-file
- 函式:將測試案例資料夾中的任意檔案推送至裝置上的目的地
- 附註:
- 這個準備工具可以從一個資料夾推送到另一個資料夾,或從一個檔案推送到另一個檔案;也就是說,您無法在裝置上推送資料夾底下的檔案:您必須一併指定該資料夾底下的目標檔案名稱
- 選項:
- push-file:一種推送規格,用於指定本機檔案到應將該檔案推送至裝置上的路徑。可重複使用。如果將多個檔案設為推送至同一個遠端路徑,系統將會推送最新版本。
- push: (已淘汰) 推送規格,格式為 '
/path/to/srcfile.txt->/path/to/destfile.txt
' 或 '/path/to/srcfile.txt->/path/to/destdir/
'。可重複使用。這個路徑可能會相對於測試模組目錄或 out 目錄本身。 - post-push:在嘗試所有推送後,在裝置上執行的指令 (使用 `
adb shell <your command>
`)。一般用途是使用 chmod 設定權限
類別名稱:InstallApkSetup
- 簡稱:install-apk
- function:將任意 APK 檔案推送至裝置上的目的地
- options:
- test-file-name:要安裝在裝置上的 APK 名稱。
- install-arg:要傳遞至 pm install 指令的其他引數,包括開頭的破折號,例如「-d」。可重複執行
-
- 簡稱:run-command
- function:在執行測試模組前或後執行任意 Shell 指令
- options:
- run-command:要執行的 ADB 殼層指令。可重複出現
- teardown-command:在解構階段執行的 ADB 殼層指令。可重複出現
測試類別
測試類別是用於執行測試的 Trade Federation 類別。
<test class="com.android.tradefed.testtype.AndroidJUnitTest">
<option name="package" value="android.test.example.helloworld"/>
<option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>
以下是三種常見的測試類別:
類別名稱:GTest
- 簡稱:gtest
- function:在指定裝置上執行原生測試套件的測試。
- 選項:
- native-test-device-path:裝置上原生測試所在的路徑。
類別名稱:InstrumentationTest
- 簡稱:檢測
- function:在指定裝置上執行檢測設備測試套件的測試
- options:
- package:要執行的 Android 測試應用程式資訊清單套件名稱。
- class:要執行的測試類別名稱。
- method:要執行的測試方法名稱。
類別名稱:AndroidJUnitTest
- 功能:使用 android.support.test.runner.AndroidJUnitRunner 在特定裝置上執行檢測設備測試套件的測試。這是執行檢測設備測試的主要方式。