複雜的測試設定

部分測試模組可能需要自訂設定,並拆解無法執行的步驟 必須在測試案例內執行常見的例子包括:

  • 安裝其他 APK (除了測試 APK 外)
  • 將一些檔案推送至裝置
  • 執行指令 (例如 adb shell pm ...)

過去,元件團隊通常會撰寫主機端測試來執行這類工作,這需要瞭解 Trade Federation 束縛裝置,而且通常會增加測試模組的複雜度。

我們借助 CTS 的概念,引入測試模組設定,以便支援這類工作。只要幾行設定,就能完成上述常見的工作。為了盡可能提高彈性,您甚至可以實作自己的目標準備工具,如 ITargetPreparerITargetCleaner 所定義,並將其設為在您自己的測試模組設定中使用。

測試模組的測試模組設定是指新增至頂層模組來源資料夾的必要 XML 檔案,其名稱為「AndroidTest.xml」。該 XML 檔案會遵循 Trade Federation 測試自動化輔助程式所使用的設定檔格式。目前透過測試模組設定處理的主要代碼為「target_preparer」和「test」代碼。

指定準備者

顧名思義,「target_preparer」標記可定義目標準備工具。 (請參閱 ITargetPreparer)。 提供設定方法;系統會在執行測試模組之前呼叫該方法 用於測試;如果「target_preparer」標記中參照的類別 implements ITargetCleaner、 測試模組完成後,系統就會叫用 Teardown 方法。

如要使用內建的通用模組設定,請在下列位置新增「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>

舉例來說,我們可以新增下列選項標記 (位於「insert」註解中) 以上):

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

這些選項會將測試控管工具設為:

  1. 在叫用測試模組前,請在裝置上執行 shell 指令「settings put secure accessibility_enabled 1」
  2. 測試模組完成後,請執行「settings put security」殼層指令 Accessibility_enabled 0」

在這個特定範例中,無障礙功能會分別在測試模組執行前/後啟用/停用。在簡單的範例中,我們需要進一步說明如何使用「option」標記。如上所示 此標記可能包含兩個屬性:名稱、值name 屬性必須提及 準備人員提供的其中一個選項

值欄位的確切用途取決於準備者如何定義選項:可以是字串、數字、布林值,甚至是檔案路徑。以下是三種常見的目標準備工具摘要:

  • 類別名稱:PushFilePreparer

    • 短名稱:push-file
    • function:將測試案例資料夾內的任意檔案推送至 裝置上的目的地
    • 附註
      • 可從資料夾或檔案推送至檔案並 是, 無法在裝置的資料夾中推送檔案: 您必須 請一併指定該資料夾下的目的地檔案名稱
    • 選項
      • 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

    • short name:install-apk
    • 函式:將任意 apk 檔案推送至目的地 裝置
    • options:
      • test-file-name:要安裝的 APK 名稱 裝置。
      • install-arg:要傳遞至 pm install 指令的其他引數,包括開頭的破折號,例如「-d」。可重複
  • 類別名稱:RunCommandTargetPreparer

    • 簡稱:run-command
    • function:在執行測試模組前或後執行任意 Shell 指令
    • 選項:
      • run-command:adb shell 指令。可重複出現
      • 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
    • 函式:在指定裝置上執行原生測試套件的測試。
    • options:
      • native-test-device-path:原生測試裝置上的路徑。
  • 類別名稱:InstrumentationTest

    • 簡稱:檢測
    • function:在指定裝置上執行檢測設備測試套件的測試
    • options:
      • package:要執行的 Android 測試應用程式的資訊清單套件名稱。
      • class:要執行的測試類別名稱。
      • method:要執行的測試方法名稱。
  • 類別名稱:AndroidJUnitTest

    • 函式:這項測試會在指定 裝置使用 android.support.test.runner.AndroidJUnitRunner 這是執行檢測設備測試的主要方式。