เอกสารนี้ให้คำแนะนำทีละขั้นตอนเกี่ยวกับวิธีสร้างโมดูลหลายอุปกรณ์และแจ้งข้อจำกัดปัจจุบันเมื่อทราบ
ตัวอย่าง
มีโมดูลหลายอุปกรณ์ที่รับรู้ wifi ของ CTS ไว้ให้ โดยจะส่งข้อความจากอุปกรณ์เครื่องหนึ่งผ่าน wifi และยืนยันว่าอุปกรณ์อีกเครื่องได้รับข้อความนั้น
แหล่งที่มาของโมดูลอยู่ที่ 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 หรือในการดำเนินการต่อเนื่อง
Mobly Bundled Snippets มีอยู่ใน Android ที่ external/mobly-bundled-snippets/
ไม่บังคับ: สร้างตัวอย่างข้อมูลที่กำหนดเอง
โมดูลหลายอุปกรณ์บางโมดูลอาจต้องใช้ข้อมูลโค้ด Mobly แบบกำหนดเอง การทดสอบตัวอย่างประกอบด้วยตัวอย่างข้อมูล wifi-aware ที่ packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java ซึ่งสร้างด้วย Mobly Snippet Lib ซึ่งมีอยู่ใน Android ที่: ภายนอก /mobly-snippet-lib/ .
ข้อมูลโค้ดควรถูกกำหนดด้วยกฎ android_test ใน Android.bp เช่นเดียวกับเครื่องมือมาตรฐาน:
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 -
mobly-par-file-name
สำหรับMoblyBinaryHostTest
จะต้องตรงกับชื่อโมดูลเช่นเดียวกับใน Android.bp - ระบุ
mobly-test-timeout
สำหรับการทดสอบ โดยมีหน่วยเป็นมิลลิวินาทีและใช้กับการดำเนินการไบนารีของ Python ที่สมบูรณ์ (กรณีทดสอบทั้งหมดรวมกัน) สิ่งนี้จำเป็นเพื่อหลีกเลี่ยงกรณีทดสอบที่ค้างถาวรในกรณีที่เกิดปัญหาบางอย่าง - แท็ก
device
แต่ละรายการสามารถมีการตั้งค่าที่แตกต่างกันในแต่ละอุปกรณ์ การกำหนดค่า Mobly จะได้รับการตั้งค่าเหล่านั้นในลำดับเดียวกันกับที่ระบุใน XML
เกี่ยวข้องกับการติดตั้ง apk ตัวอย่าง:
- POC เริ่มต้นได้รับการอัปเดตเพื่อติดตั้ง Snippet APK ผ่าน target_preparer เนื่องจากการสนทนากับทีม Coverage: เพื่อให้แน่ใจว่าการวัดความครอบคลุมจะไม่ถูกลบเร็วเกินไป การถอนการติดตั้งโดย Harness แทนที่จะใช้โค้ดทดสอบในไบนารีของ Python ให้การรับประกันที่ดีกว่าในแง่ของระยะเวลา
ขั้นตอนที่ 5: รันการทดสอบในเครื่อง: atest
ปัจจุบันการทดสอบหลายอุปกรณ์ทำงานบนอุปกรณ์จริงเท่านั้น ก่อนทำการทดสอบ ให้ตรวจสอบว่าอุปกรณ์ทดสอบของคุณอยู่ในสถานะที่เหมาะสม คำสั่ง adb devices
ควรรายงานรายการอุปกรณ์ที่เชื่อมต่อของคุณ หากรายการมีอุปกรณ์ที่ไม่ได้มีไว้สำหรับการทดสอบ ให้ระบุอุปกรณ์สำหรับการทดสอบโดยใช้แฟล็ก -s
สำหรับการทดสอบ wifi ตรวจสอบให้แน่ใจว่าเปิดใช้งาน wifi สำหรับอุปกรณ์แล้ว (หลังจากรีเซ็ตเป็นค่าจากโรงงาน)
คุณสามารถรันการทดสอบในเครื่องด้วย atest:
$ atest CtsWifiAwareTestCases
คุณควรเห็นจำนวนอุปกรณ์ที่ใช้ในส่วนหัวสรุปในเอาต์พุต atest บางอย่างเช่น Test executed with 2 device(s)
การแก้ไขปัญหา
หากการทดสอบล้มเหลวเมื่อทำงานภายในเครื่องเนื่องจาก:
ข้อผิดพลาด Virtualenv
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
โปรดตรวจสอบให้แน่ใจว่า virtualenv
อยู่ใน PATH ของคุณ การเพิ่ม "~/.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: คุณสามารถใช้ sharding เพื่อทริกเกอร์มัน (ตัวอย่างเช่น: --shard-count 2) หรือ run cts-multidevces