複雜的測試設定

部分測試模組可能需要自訂設定和清除步驟,但這些步驟無法在測試案例本身執行。常見的例子包括:

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

過去,元件團隊通常會編寫主機端測試來執行這類工作,但這需要瞭解 Trade Federation 測試架構,且通常會增加測試模組的複雜度。

我們從 CTS 借用概念,導入測試模組設定的概念,以支援這類工作。只要幾行設定,即可完成上述常見工作清單中的工作。如要獲得最大彈性,您甚至可以實作自己的目標準備工具,如 ITargetPreparerITargetCleaner 所定義,並設定這些工具,以便在自己的測試模組設定中使用。

測試模組的測試模組設定是必要的 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>

舉例來說,我們可以在「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. 在叫用測試模組前,請在裝置上執行殼層指令「settings put secure accessibility_enabled 1」
  2. 測試模組完成後,執行殼層指令「settings put secure accessibility_enabled 0」

在這個特定範例中,無障礙功能會在測試模組執行前後分別啟用/停用。我們已透過簡單的範例進行說明,現在有必要進一步瞭解「option」標記的使用方式。如上所示,標記可以有兩個屬性:名稱和值。名稱屬性必須參照準備者提供的其中一個選項。

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

  • 類別名稱:PushFilePreparer

    • 簡短名稱:push-file
    • function:將測試案例資料夾下的任意檔案推送至裝置上的目的地
    • 注意事項
      • 這個準備工具可以從資料夾推送到資料夾,或從檔案推送到檔案;也就是說,您無法推送裝置上資料夾中的檔案,必須一併指定該資料夾下的目的地檔案名稱
    • options
      • push-file:推送規格,指定要推送至裝置上路徑的本機檔案。可以重複。如果設定要將多個檔案推送至相同的遠端路徑,系統會推送最新的檔案。
      • push: (已淘汰) 推送規格,格式為「/path/to/srcfile.txt->/path/to/destfile.txt」或「/path/to/srcfile.txt->/path/to/destdir/」。可重複。這個路徑可能是相對於測試模組目錄或輸出目錄本身的路徑。
      • 推送後:在嘗試推送所有內容後,要在裝置上執行的指令 (使用 `adb shell <your command>`)。一般用途是使用 chmod 設定權限
  • 類別名稱:InstallApkSetup

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

    • 簡稱:run-command
    • 函式:在測試模組執行前後執行任意殼層指令
    • options:
      • run-command:要執行的 adb shell 指令。可能會重複
      • teardown-command:在拆除階段執行的 adb shell 指令。可能會重複

測試類別

測試類別是 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

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

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