โมดูลสำหรับหลายอุปกรณ์

เอกสารนี้แสดงวิธีการสร้างอุปกรณ์หลายอุปกรณ์แบบทีละขั้นตอน และเรียกข้อจำกัดปัจจุบันเมื่อทราบ

ตัวอย่าง

มีโมดูลอุปกรณ์หลายเครื่องที่รับรู้ Wi-Fi ของ CTS ส่งข้อความจาก อุปกรณ์ผ่าน Wi-Fi และยืนยันว่าอุปกรณ์อื่นๆ ได้รับอุปกรณ์

แหล่งที่มาของโมดูลนี้อยู่ที่ แพ็กเกจ/โมดูล/Wi-Fi/การทดสอบ/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 มีให้บริการใน 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>

โปรดทราบว่า:

  • การทดสอบตัวอย่างนี้มีทรัพยากร Dependency ของ Mobly ระบุทรัพยากร Dependency ได้ สำหรับ PythonVirtualenvPreparer และจะติดตั้งด้วย PIP
  • mobly-par-file-nameสำหรับ MoblyBinaryHostTest ต้องตรงกับโมดูล ดังเช่นใน Android.bp
  • โปรดระบุ mobly-test-timeout สำหรับการทดสอบ โดยใช้หน่วยเป็นมิลลิวินาทีและ ใช้กับการดำเนินการไบนารี Python ที่สมบูรณ์ (กรอบการทดสอบทั้งหมดรวมกัน) วิธีนี้จำเป็นต่อการหลีกเลี่ยงกรอบการทดสอบที่ค้างอยู่ตลอดไปในกรณีที่เกิดปัญหาบางอย่าง
  • แท็ก device แต่ละแท็กมีการตั้งค่าที่แตกต่างกันในอุปกรณ์แต่ละเครื่อง ซึ่งก็คือ The Mobly จะได้รับการกำหนดค่าในลำดับเดียวกับที่ระบุไว้ใน XML

เกี่ยวข้องกับ APK ของตัวอย่างข้อมูล การติดตั้ง ให้ทำดังนี้

  • POC เริ่มต้นได้รับการอัปเดตเพื่อติดตั้ง 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 อยู่ใน PATH ของคุณ กำลังเพิ่ม "~/.local/bin" ถึง PATH ควร แก้ไข หากไม่ได้ติดตั้ง Virtualenv ให้ติดตาม: https://virtualenv.pypa.io/th/latest/installation.html

ต้องได้รับออบเจ็กต์ตัวควบคุมอย่างน้อย 2 รายการ ได้ 1 รายการ

โมดูลทดสอบอาจเป็นแบบหลายอุปกรณ์หรืออุปกรณ์เดียว ไม่มี โมดูลที่ผสมกัน หากคุณพยายามเรียกใช้โมดูลหลายอุปกรณ์โดยไม่มีอุปกรณ์หลายเครื่อง อุปกรณ์จะแสดงข้อผิดพลาดนี้

Expected to get at least 2 controller objects, got 1

การดำเนินการโมดูลในโหมดหลายอุปกรณ์จะช่วยแก้ปัญหาได้

สำหรับ CTS: คุณสามารถใช้การชาร์ดเพื่อทริกเกอร์ได้ (เช่น --shard-count 2) หรือ run cts-multidevces