複雜的測試配置

某些測試模組可能需要自訂設定和拆卸步驟,而這些步驟無法在測試案例本身內執行。典型的例子可能包括:

  • 安裝其他 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>

例如,我們可以新增以下選項標籤(在上面的「插入」註釋中):

    <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 secureaccessibility_enabled 1”
  2. 測試模組完成後,執行shell指令“settings put secureaccessibility_enabled 0”

在此特定範例中,分別在測試模組執行之前/之後啟用/停用可訪問性。透過一個簡單的範例演示​​,有必要介紹有關如何使用「option」標籤的更多細節。如上所示,標籤可以有兩個屬性:name、value。名稱屬性必須引用準備者提供的選項之一。

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

  • 類別名稱: PushFilePreparer

    • 簡稱:推送文件
    • 功能:將測試案例資料夾下的任意檔案推送到裝置上的目的地
      • 該準備器可以從一個資料夾推送到另一個資料夾,或從一個檔案推送到另一個檔案;也就是說,您無法將檔案推送到裝置上的資料夾下:您還必須指定該資料夾下的目標檔案名
    • 選項
      • Push-file:推送規範,指定本機檔案應推送到裝置上的路徑。可能會重複。如果配置多個檔案推送到同一個遠端路徑,則推送最新的一個。
      • Push:(已棄用)推送規範,格式為「 /path/to/srcfile.txt->/path/to/destfile.txt 」或「 /path/to/srcfile.txt->/path/to/destdir//path/to/srcfile.txt->/path/to/destdir/ '。可能會重複。此路徑可能相對於測試模組目錄或輸出目錄本身。
      • post-push:嘗試所有推送後在裝置上執行的命令(使用 ` adb shell <your command> `)。典型用例是使用 chmod 來取得權限
  • 類別名稱: InstallApkSetup

    • 短名稱: install-apk
    • 功能:將任意 apk 檔案推送到裝置上的目的地
    • 選項:
      • test-file-name:要安裝到裝置上的 apk 的名稱。
      • install-arg:要傳遞給 pm install 指令的附加參數,包括前導破折號,例如「-d」。可以重複
  • 類別名稱: RunCommandTargetPreparer

    • 簡稱:運行命令
    • 功能:在測試模組執行之前或之後執行任意shell命令
    • 選項:
      • run-command:要執行的 adb shell 指令。可能會重複
      • Teadown-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
    • 功能:在給定設備上執行本機測試包的測試。
    • 選項:
      • native-test-device-path:本機測試所在裝置上的路徑。
  • 類別名稱:儀器測試

    • 簡稱:儀器儀表
    • 功能:在給定設備上運行儀器測試包的測試
    • 選項:
      • package:要運行的 Android 測試應用程式的清單包名稱。
      • class:要運行的測試類別名稱。
      • method:要執行的測試方法名稱。
  • 類別名稱: AndroidJUnitTest

    • 功能:使用 android.support.test.runner.AndroidJUnitRunner 在給定裝置上執行儀器測試套件的測試這是執行儀器測試的主要方式。