測試範本

Android 開放原始碼計畫提供非主機端 Python 的測試模組測試範本 VTS 執行器 BaseTest 的子類別

圖 1. 測試範本架構。

開發人員可以利用這些範本,省下 整合這類測試本節說明如何設定及使用測試 (在 VTS 中) 測試案例/範本 目錄),並提供常用範本的範例。

BinaryTest 範本

使用 二進位測試 範本,整合在 VTS 目標裝置上執行的測試。 目標端測試包括:

  • 編譯以 C++ 為基礎的測試並推送至裝置
  • 編譯為二進位檔的目標端 Python 測試
  • 裝置上可執行的殼層指令碼

這些測試可整合至 VTS 或不使用 BinaryTest 範本。

整合目標端測試與 BinaryTest 範本

BinaryTest 範本旨在協助開發人員輕鬆整合 目標端的測試在多數情況下,您可以在 AndroidTest.xml 中的設定。設定範例 VtsDeviceTreeEarlyMountTest

<configuration description="Config for VTS VtsDeviceTreeEarlyMountTest.">
  ...
<test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
<option name="test-module-name" value="VtsDeviceTreeEarlyMountTest"/>
<option name="binary-test-source" value="_32bit::DATA/nativetest/dt_early_mount_test/dt_early_mount_test" />
<option name="binary-test-source" value="_64bit::DATA/nativetest64/dt_early_mount_test/dt_early_mount_test" />
<option name="test-timeout" value="5m"/>
</test>
</configuration>

在這個設定中:

  • binary-test-sourcebinary-test-type 是 特定範本
  • 指定測試二進位檔來源的相對主機路徑即可啟用範本 處理準備、檔案推送、測試執行、結果剖析和 以及清除所用資源
  • 這個範本包含測試案例建立相關方法,可供子類別 。
  • 這個範本假設每個測試二進位檔模組有一個測試案例,而二進位檔是 來源檔案名稱預設為測試案例名稱。

設定選項

BinaryTest 範本支援下列設定選項:

選項名稱 值類型 說明
二進位測試原始碼 字串 相對於 vts 測試案例目錄的二進位檔測試來源路徑 主機。
範例:DATA/nativetest/test
二進位測試工作目錄 字串 工作目錄 (裝置端路徑)。
範例:/data/local/tmp/testing/
binary-test-envp 字串 二進位檔的環境變數。
範例:PATH=/new:$PATH
二進位測試引數 字串 測試引數或旗標。
範例:--gtest_filter=test1
二進位-test-ld-library-path 字串 LD_LIBRARY_PATH 環境變數。
範例:/data/local/tmp/lib
binary-test-disable-framework 布林值 執行 adb stop 即可在測試前關閉 Android 架構。 範例:true
二進位測試停止原生伺服器 布林值 在測試期間,停止所有正確設定的原生伺服器。範例: true
二進位測試類型 string 範本類型。其他範本類型超越這個範本 無須為這個範本指定這個選項 指定的是 binary-test-source

如為值類型為 strings 的選項,您可以新增多個值 重複設定中的各個選項舉例來說 binary-test-source 兩次 (如 VtsDeviceTreeEarlyMountTest 範例)。

測試代碼

如要新增測試標記,請在選項前面加上 strings 值,並使用 :: 做為分隔符號。尤其是測試代碼 適合包含名稱相同但名稱不同的二進位來源 位元或父項目錄舉例來說,為了避免檔案推送或結果名稱 名稱相同但來源目錄的不同時發生衝突 您也能為這些來源指定不同的標記

VtsDeviceTreeEarlyMountTest 範例中所示, 兩個 dt_early_mount_test 來源,測試代碼 _32bit::_64bit:: 前置字串: binary-test-source。結尾為 32bit64bit 會自動將測試標示為可用的 ABI 位元; 亦即,不是在 64 位元 ABI 上執行含有 _32bit 標記的測試。非 指定標記就等於使用含空白字串的代碼。

含有相同代碼的選項會分成一組,並與其他代碼分開。適用對象 例如,包含 _32bit 標記的 binary-test-args 為 只套用至使用相同代碼且執行的「binary-test-source」 加入 binary-test-working-directory 中的相同標記。 binary-test-working-directory 是二進位檔測試的選用選項, 可讓你為標記指定單一工作目錄。當 未指定「binary-test-working-directory」選項 (預設值 個別代碼

在結果報表中,代碼名稱會直接附加在測試案例名稱中。 例如含有 _32bit 標記的測試案例 testcase1 在結果報表中顯示為 testcase1_32bit

整合目標端測試而不需要 BinaryTest 範本

在 VTS 中,預設的測試格式是將主機端 Python 測試 VTS 執行器中的 BaseTest。如要整合目標端測試,您必須先推送 測試檔案至裝置,使用殼層指令執行測試,然後剖析 產生結果

推送測試二進位檔

建議您使用 VtsFilePusher 目標準備工具推送檔案。 例子:

<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
        <option name="push" value="DATA/test->/data/local/tmp/test"/>
    </target_preparer>

VtsFilePusher 會執行以下動作:

  1. 檢查裝置連線能力。
  2. 決定絕對來源檔案路徑。
  3. 使用 adb push 指令推送檔案。
  4. 測試完成後刪除檔案。

或者,您也可以使用主機端 Python 測試來手動推送檔案 遵循類似程序的指令碼

執行測試

將檔案推送至裝置後,請在 主機端 Python 測試指令碼例子:

device = self.android_devices[0]
res = device.shell.Execute(["chmod a+x /data/local/tmp/test", "/data/local/tmp/test"])
asserts.AssertFalse(any(res[return_codes]))

GtestBinaryTest 範本

GtestBinaryTest Template 可代管 GTest 測試二進位檔,每個二進位檔通常含有 多個測試案例這個範本透過覆寫的方式擴充 BinaryTest 範本 設定、測試案例建立,以及結果剖析方法,所以所有 BinaryTest 都會沿用設定

GtestBinaryTest 新增了 gtest-batch-mode 選項:

選項名稱 值類型 說明
二進位測試類型 string 範本類型。使用 gtest 值。
gtest-batch-模式 布林值 以批次模式執行 Gtest 二進位檔。範例:true

一般而言,將 gtest-batch-mode 設為 true 提升效能,同時稍微降低可靠性。符合 VTS 法規 測試時,許多模組會使用批次模式來改善效能。可靠性考量 但如果未指定模式,就會預設為非批次。

非批次模式

非批次模式會針對每個測試案例個別呼叫 GTest 二進位檔。適用對象 例如,如果 GTest 二進位檔中有 10 個測試案例 (在依主機篩選後) 二進位檔),每次在裝置殼層上稱為 10 次 搭配不同的測試篩選器每個測試案例都有專屬的 GTest 結果 範本會產生並剖析 XML。

圖 2.非批次模式。

使用非批次模式的優點包括:

  • 測試案例隔離。單一測試案例發生當機或停止運作 不會影響其他測試案例。
  • 精細程度:更容易取得每個測試案例的剖析/涵蓋率 測量、Systrace、bugreport、logcat 等。測試結果和記錄都為 且每次測試案例完成後都會立即擷取。

使用非批次模式的缺點包括:

  • 多餘的載入。每次呼叫 GTest 二進位檔時 並載入相關程式庫並執行初始類別設定
  • 通訊負擔。測試完成後,主機 和目標裝置通訊,以便剖析結果及後續指令 一些可進行最佳化的最佳化步驟)。

批次模式

在 GTest 批次模式下,系統只會透過長時間測試呼叫一次測試二進位檔 篩選值,包含按照主機端設定篩選的所有測試案例 (此 可避免非批次模式發生多餘的載入問題)。您可以剖析測試 產生 GTest 的結果。

使用 output.xml (預設) 時:

圖 3.批次模式、output.xml。

如同非批次模式,請透過 GTest 輸出 XML 剖析測試結果 檔案。不過,因為系統會在所有測試後產生輸出 XML 測試案例導致二進位或裝置當機,但沒有結果 XML 檔案 。

使用終端機輸出時:

圖 4.批次模式、終端機輸出。

GTest 執行期間,會將測試記錄和進度輸出至終端機 這個格式可剖析測試狀態、結果 。

使用批次模式的優點包括:

  • 測試案例隔離。提供相同層級的測試 如果架構重新啟動二進位檔/裝置,則將大小寫隔離為非批次模式 使用較低的測試篩選條件 (排除已完成和當機後的測試除外) 之後發生當機的情況 案件)。
  • 精細程度:提供的測試案例精細程度與 非批次模式

使用批次模式的缺點包括:

  • 維護費用。如果 GTest 記錄格式有所變更 所有測試都會中斷
  • 混淆。測試案例可以輸出類似 GTest 因此可能會混淆廣告格式

基於這些缺點,我們暫時移除了使用 指令列輸出內容我們日後會回頭討論這個選項 保持這個函式的可靠性

HostBinaryTest 範本

HostBinaryTest 範本包含不存在的主機端執行檔 其他目錄或 Python 指令碼中這些測試包括:

  • 在主機上執行編譯的測試二進位檔執行檔
  • 可使用殼層、Python 或其他程式語言的指令碼

其中一個例子是 VTS 安全性 SELinux 政策主機端測試

<configuration description="Config for VTS  Security SELinux policy host-side test cases">
    ...
    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
        <option name="test-module-name" value="VtsSecuritySelinuxPolicyHost"/>
        <option name="binary-test-source" value="out/host/linux-x86/bin/VtsSecuritySelinuxPolicyHostTest" />
        <option name="binary-test-type" value="host_binary_test"/>
    </test>
</configuration>

HostBinaryTest 不會擴充 BinaryTest 範本,但使用類似 測試設定在上述範例中,binary-test-source 選項會指定測試執行檔的主機端相對路徑,以及 binary-test-typehost_binary_test。風格類似 BinaryTest 範本, 預設值。

擴充現有範本

您可以直接在測試設定中使用範本來納入非 Python 測試 或在子類別中擴充這些元件,即可處理特定的測試需求範本位置 以下為 VTS 存放區的擴充功能:

圖 5.擴充 VTS 中現有的範本 。

我們建議開發人員擴充任何現有範本, 測試需求擴充範本的常見原因包括:

  • 特殊測試設定程序,例如準備特別測試的裝置 指令
  • 產生不同的測試案例和測試名稱。
  • 讀取指令輸出或使用其他條件來剖析結果。

為了方便您擴充現有範本,範本中包含方法 每個功能都有特殊用途如果您改善了現有產品的設計 範本,建議您參與 VTS 程式碼集。