這份文件會逐步說明如何建立多部裝置 並指出目前的限制 (如果已知)。
範例
提供了 CTS 可偵測 Wi-Fi 的多裝置模組。應用程式會從 ,驗證其他裝置收到的裝置。
模組來源位於 packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/。
我們在範例中加註了所有覺得實用的註解,
步驟 1:建立模組資料夾
建議你在套件中為多裝置模組建立資料夾 所屬的專案例如:cts/hostsidetests/multidevices/。 建議您採取這項做法,確保所有多裝置模組共用至少 以便更輕鬆地發掘範例
此模組的所有檔案應存放在各自的模組資料夾中。適用對象
範例:wifi_aware
。
步驟 2:建立測試
您可以在這裡實作測試邏輯。這很取決於 以及要如何接受測試
建立 Mobly 測試來源,例如: wifi_aware_test.py。
步驟 3:建立建構檔案:Android.bp
新增類似下方的 Android.bp 檔案 packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp。 定義 python_test_host 模組,如下所示:
python_test_host {
name: "CtsWifiAwareTestCases",
main: "wifi_aware_test.py",
srcs: ["wifi_aware_test.py"],
test_suites: [
"cts",
"general-tests",
],
test_options: {
unit_test: false,
},
data: [
// Package the snippet with the mobly test
":wifi_aware_snippet",
],
}
使用資料欄位指定要與測試一併封裝的資料欄位,指定測試的程式碼片段 並可在測試中安裝與安裝 ATest 或 持續執行。
您可以在 Android 中取得 Mobly 套裝組合程式碼片段: external/mobly-bundled-snippets/。
選用:建立自訂程式碼片段
部分多裝置模組可能需要自訂 Mobly 程式碼片段。範例測試 這個位置是在以下位置加入 Wi-Fi 感知程式碼片段 packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java, 這款產品採用 Mobly Snippet Lib 打造而成,可在 Android 裝置上使用: external/mobly-snippet-lib/。
程式碼片段應使用 Android.bp 中的 android_test 規則定義,例如: 標準檢測:
android_test {
name: "wifi_aware_snippet",
sdk_version: "current",
srcs: [
"CallbackUtils.java",
"WifiAwareSnippet.java",
],
manifest: "AndroidManifest.xml",
static_libs: [
"androidx.test.runner",
"guava",
"mobly-snippet-lib",
],
}
步驟 4:建立模組設定:AndroidTest.xml
新增 AndroidTest.xml 檔案,例如 packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml。 在此測試設定中,需要指定兩部裝置進行測試, 類似:
<configuration description="Config for CTS Wifi Aware test cases">
<option name="test-suite-tag" value="cts" />
<option name="config-descriptor:metadata" key="component" value="wifi" />
<option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
<option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
<option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />
<device name="device1">
<!-- For coverage to work, the APK should not be uninstalled until after coverage is pulled.
So it's a lot easier to install APKs outside the python code.
-->
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PythonVirtualenvPreparer">
<!-- Any python dependencies can be specified and will be installed with pip -->
<option name="dep-module" value="mobly" />
</target_preparer>
</device>
<device name="device2">
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
</device>
<test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
<!-- The mobly-par-file-name should match the module name -->
<option name="mobly-par-file-name" value="CtsWifiAwareTestCases" />
<!-- Timeout limit in milliseconds for all test cases of the python binary -->
<option name="mobly-test-timeout" value="60000" />
</test>
</configuration>
請注意:
- 這項範例測試對 Mobly 具有依附元件。可指定任何依附元件
PythonVirtualenvPreparer
,將會透過 pip 安裝。 MoblyBinaryHostTest
的mobly-par-file-name
必須與模組相符 例如 Android.bp- 為測試指定
mobly-test-timeout
。在幾毫秒內完成 適用於完整的 Python 二進位檔執行作業 (所有測試案例合併)。 請務必這麼做,以免測試案例在發生問題時永久停止運作。 - 每個
device
標記在每部裝置上都可以有不同的設定:The Mobly config 將按照 XML 中的指定順序接收這些資料。
與程式碼片段 APK 相關 安裝:
- 初始聯絡窗口已更新為透過以下方式安裝程式碼片段 APK: target_preparer 考量到與涵蓋率團隊的對話內容:為了確保 涵蓋率測量結果不會太早刪除,因此由 Harness 解除安裝 而不是 Python 二進位檔中的測試程式碼 時間。
步驟 5:在本機執行測試:測試
目前,多裝置測試只能在實體裝置上執行。執行
測試,確認測試裝置處於正確狀態。adb
devices
指令應會回報已連結的裝置清單。如果清單包含
用於測試用途的裝置,請使用 -s 指定測試裝置
旗標。
若是 Wi-Fi 測試,請確認裝置已啟用 Wi-Fi (恢復原廠設定後)。
您可以使用測試在本機執行測試:
$ atest CtsWifiAwareTestCases
您應該會在測試的摘要標題中看到使用的裝置數量
輸出,例如 Test executed with 2 device(s)
疑難排解
如果在本機執行測試失敗的可能原因如下:
Virtualenv 錯誤
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
請確保 virtualenv
位於路徑中。新增「~/.local/bin」遷移至 PATH 後
修復問題。
如果未安裝 virtualenv,請遵循以下指示:https://virtualenv.pypa.io/en/latest/installation.html
應至少取得 2 個控制器物件,獲得了 1 個
測試模組分為多裝置或單一裝置,沒有任何 混合模組如果您嘗試執行沒有 裝置會顯示以下錯誤訊息:
Expected to get at least 2 controller objects, got 1
在多裝置模式下執行這個模組就能解決這個問題。
CTS:您可以使用資料分割來觸發這項作業 (例如:--shard-count 2)
或 run cts-multidevces
。