เอกสารนี้แสดงวิธีการสร้างอุปกรณ์หลายอุปกรณ์แบบทีละขั้นตอน และจะแสดงข้อจำกัดปัจจุบันเมื่อทราบ
ตัวอย่าง
มีโมดูลหลายอุปกรณ์ที่รองรับ Wi-Fi ของ 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 หรือในการดําเนินการแบบต่อเนื่อง
ข้อมูลโค้ดที่รวมกลุ่มของ Mobly มีให้บริการใน Android ที่ 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_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 ในการกำหนดค่าการทดสอบนี้ คุณต้องระบุอุปกรณ์ 2 เครื่องสำหรับการทดสอบ คล้ายกับตัวอย่างต่อไปนี้
<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
แต่ละแท็กอาจมีการตั้งค่าที่แตกต่างกันในอุปกรณ์แต่ละเครื่อง โดย Moblyconfig จะได้รับแท็กเหล่านั้นตามลําดับเดียวกับที่ระบุไว้ใน XML
เกี่ยวข้องกับการติดตั้ง apk ของข้อมูลโค้ด
- POC เริ่มต้นได้รับการอัปเดตเพื่อติดตั้ง APK ของข้อมูลโค้ดผ่าน target_preparer จากการสนทนากับทีมการครอบคลุม: เพื่อให้มั่นใจได้ว่า การวัดการครอบคลุมไม่ถูกลบเร็วเกินไป การถอนการติดตั้งโดย Harness แทนที่จะใช้โค้ดทดสอบในไบนารีของ Python จะให้การรับประกันที่ดีกว่าในแง่ที่ ในช่วงเวลาที่เหมาะสม
ขั้นตอนที่ 5: เรียกใช้การทดสอบในเครื่อง: atest
ปัจจุบันการทดสอบหลายอุปกรณ์จะทำงานบนอุปกรณ์จริงเท่านั้น ก่อนเรียกใช้ส่วนเสริม
ตรวจสอบว่าอุปกรณ์ทดสอบอยู่ในสถานะที่ถูกต้อง คำสั่ง 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
อยู่ใน 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: คุณสามารถใช้การแยกข้อมูลเพื่อเรียกใช้ (เช่น --shard-count 2) หรือ run cts-multidevces