複雜的測試配置

一些測試模塊可能需要定制的設置和拆卸步驟,這些步驟無法在測試用例本身中執行。典型的例子可能包括:

  • 安裝其他apk(除了測試apk)
  • 將一些文件推送到設備
  • 運行命令(例如 adb shell pm ...)

過去,組件團隊通常求助於編寫主機端測試來執行此類任務,這需要了解 Trade Federation 工具,並且通常會增加測試模塊的複雜性。

借用 CTS,我們引入了 test module config 的概念來支持此類任務,上面的常見任務列表只需幾行 config 即可實現。為了獲得最大的靈活性,您甚至可以實現自己的目標準備器,由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 secure accessibility_enabled 1”
  2. 測試模塊完成後,執行shell命令“settings put secure accessibility_enabled 0”

在這個特定示例中,可訪問性分別在測試模塊執行之前/之後啟用/禁用。通過一個簡單的示例演示,有必要詳細介紹如何使用“選項”標籤。如上圖,標籤可以有兩個屬性:name、value。 name 屬性表示選項的名稱,並進一步分為由冒號分隔的兩部分:preparer 的短名稱和 preparer 提供的實際選項名稱。

value 字段的確切用途取決於準備者如何定義選項:它可以是字符串、數字、布爾值,甚至是文件路徑等。在上面的示例中,名稱“run-command:run-command”表示我們正在為由短名稱“run-command”的目標準備者定義的選項“run-command”設置值;並且名稱“run-command:teardown-command”意味著我們正在為選項“teardown-command”設置值,該選項也由短名稱“run-command”的同一目標準備者定義。以下是三個常見的目標準備者的摘要:

  • 類名: PushFilePreparer

    • 簡稱:推送文件
    • 功能:將測試用例文件夾下的任意文件推送到設備上的目標位置
    • 筆記
      • 這個preparer可以從一個文件夾推到另一個文件夾,或者從一個文件推到另一個文件;也就是說,您不能在設備上的文件夾下推送文件:您還必須在該文件夾下指定目標文件名
    • 選項
      • push-file:一個 push-spec,將本地文件指定到應該在設備上推送的路徑。可能會重複。如果將多個文件配置為推送到同一個遠程路徑,則將推送最新的一個。
      • push:(已棄用)一個 push-spec,格式為 ' /path/to/srcfile.txt->/path/to/destfile.txt ' 或 ' /path/to/srcfile.txt->/path/to/destdir/ '。可能會重複。此路徑可能與測試模塊目錄或 out 目錄本身相關。
      • post-push:嘗試所有推送後在設備上運行的命令(使用` adb shell <your command> `)。典型用例是使用 chmod 獲取權限
  • 類名: InstallApkSetup

    • 簡稱:安裝-apk
    • 功能:將任意apk文件推送到設備上的目的地
    • 選項:
      • test-file-name:要安裝到設備上的 apk 的名稱。
      • install-arg:要傳遞給 pm install 命令的附加參數,包括前導破折號,例如“-d”。可以重複
  • 類名: RunCommandTargetPreparer

    • 簡短名稱:運行命令
    • 功能:在測試模塊執行之前或之後執行任意shell命令
    • 選項:
      • 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
    • 功能:在給定設備上運行本機測試包的測試。
    • 選項:
      • native-test-device-path:本機測試所在設備上的路徑。
  • 類名: InstrumentationTest

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

    • 功能:使用 android.support.test.runner.AndroidJUnitRunner 在給定設備上運行儀器測試包的測試 這是執行儀器測試的主要方法。