Android 開放原始碼計畫提供非主機端 Python 的測試模組測試範本 VTS 執行器 BaseTest 的子類別
開發人員可以利用這些範本,省下 整合這類測試本節說明如何設定及使用測試 (在 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-source
和binary-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
。結尾為 32bit
或
64bit
會自動將測試標示為可用的 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
會執行以下動作:
- 檢查裝置連線能力。
- 決定絕對來源檔案路徑。
- 使用
adb push
指令推送檔案。 - 測試完成後刪除檔案。
或者,您也可以使用主機端 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。
使用非批次模式的優點包括:
- 測試案例隔離。單一測試案例發生當機或停止運作 不會影響其他測試案例。
- 精細程度:更容易取得每個測試案例的剖析/涵蓋率 測量、Systrace、bugreport、logcat 等。測試結果和記錄都為 且每次測試案例完成後都會立即擷取。
使用非批次模式的缺點包括:
- 多餘的載入。每次呼叫 GTest 二進位檔時 並載入相關程式庫並執行初始類別設定
- 通訊負擔。測試完成後,主機 和目標裝置通訊,以便剖析結果及後續指令 一些可進行最佳化的最佳化步驟)。
批次模式
在 GTest 批次模式下,系統只會透過長時間測試呼叫一次測試二進位檔 篩選值,包含按照主機端設定篩選的所有測試案例 (此 可避免非批次模式發生多餘的載入問題)。您可以剖析測試 產生 GTest 的結果。
使用 output.xml (預設) 時:
如同非批次模式,請透過 GTest 輸出 XML 剖析測試結果 檔案。不過,因為系統會在所有測試後產生輸出 XML 測試案例導致二進位或裝置當機,但沒有結果 XML 檔案 。
使用終端機輸出時:
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-type
為 host_binary_test
。風格類似
BinaryTest 範本,
預設值。
擴充現有範本
您可以直接在測試設定中使用範本來納入非 Python 測試 或在子類別中擴充這些元件,即可處理特定的測試需求範本位置 以下為 VTS 存放區的擴充功能:
我們建議開發人員擴充任何現有範本, 測試需求擴充範本的常見原因包括:
- 特殊測試設定程序,例如準備特別測試的裝置 指令
- 產生不同的測試案例和測試名稱。
- 讀取指令輸出或使用其他條件來剖析結果。
為了方便您擴充現有範本,範本中包含方法 每個功能都有特殊用途如果您改善了現有產品的設計 範本,建議您參與 VTS 程式碼集。