Mô-đun nhiều thiết bị

Tài liệu này cung cấp hướng dẫn từng bước về cách tạo ứng dụng trên nhiều thiết bị các mô-đun và gọi ra các giới hạn hiện tại khi đã biết.

Mẫu

Một mô-đun nhiều thiết bị nhận biết Wi-Fi CTS được cung cấp. Trợ lý sẽ gửi tin nhắn từ một thiết bị qua Wi-Fi và xác minh thiết bị kia nhận được.

Nguồn của mô-đun là tại packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/.

Chúng tôi đã chú thích vào ví dụ này với nhiều nhận xét mà chúng tôi thấy hữu ích.

Bước 1: Tạo thư mục mô-đun

Bạn nên tạo một thư mục cho mô-đun nhiều thiết bị trong bộ sản phẩm này dự án thuộc loại đó. Ví dụ: cts/hostsidetests/multidevices/. Bạn nên làm như vậy để tất cả các mô-đun nhiều thiết bị vẫn được sắp xếp ít nhất trước tiên để giúp khám phá các ví dụ dễ dàng hơn.

Tất cả các tệp cho mô-đun này phải được đặt trong thư mục mô-đun riêng. Cho ví dụ: wifi_aware.

Bước 2: Tạo bài kiểm thử

Đây là nơi bạn triển khai logic kiểm thử. Điều này phụ thuộc nhiều vào yếu tố đang được kiểm tra.

Tạo nguồn kiểm thử Di động, như: wifi_aware_test.py.

Bước 3: Tạo tệp bản dựng: Android.bp

Thêm một tệp Android.bp như packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp. Xác định mô-đun python_test_host, tương tự như sau:

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",
    ],
}

Chỉ định đoạn mã cho kiểm thử với trường dữ liệu, trường này sẽ được đóng gói tệp nhị phân và có thể được định vị và cài đặt trong kiểm thử bằng ATest hoặc trong Thực thi liên tục.

Đoạn mã theo gói AdMob có trong Android tại external/mobly-bundled-snippets/.

Không bắt buộc: Tạo đoạn mã tuỳ chỉnh

Một số mô-đun nhiều thiết bị có thể yêu cầu đoạn mã AdMob tuỳ chỉnh. Kiểm thử mẫu thêm một đoạn mã nhận biết Wi-Fi tại packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java, được xây dựng bằng Mobly Snippet Lib, có trong Android tại: external/mobly-snippet-lib/.

Đoạn mã nên được xác định bằng quy tắc android_test trong Android.bp như khả năng đo lường chuẩn:

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",
    ],
}

Bước 4: Tạo cấu hình mô-đun: AndroidTest.xml

Thêm tệp AndroidTest.xml như packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml. Trong cấu hình kiểm thử này, bạn cần chỉ định hai thiết bị để kiểm thử, tương tự như:

<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>

Lưu ý:

  • Kiểm thử mẫu này có phần phụ thuộc vào AdMob. Có thể chỉ định bất kỳ phần phụ thuộc nào cho PythonVirtualenvPreparer và sẽ được cài đặt bằng pip.
  • mobly-par-file-name cho MoblyBinaryHostTest phải khớp với mô-đun như trong Android.bp.
  • Hãy chỉ định một mobly-test-timeout cho chương trình kiểm thử. Thời gian tính bằng mili giây và áp dụng cho quá trình thực thi nhị phân python hoàn chỉnh (tất cả các trường hợp kiểm thử cùng nhau). Điều này là cần thiết để tránh các trường hợp kiểm thử bị treo vĩnh viễn trong trường hợp xảy ra một số vấn đề.
  • Mỗi thẻ device có thể chứa một chế độ thiết lập riêng trên từng thiết bị (Mobly) config sẽ nhận chúng theo cùng thứ tự như được chỉ định trong XML.

Liên quan đến tệp APK đoạn mã cài đặt:

  • POC ban đầu đã được cập nhật để cài đặt các APK đoạn mã thông qua target_preparer do trao đổi với nhóm Mức độ phù hợp: Để đảm bảo các phép đo mức độ phù hợp không bị xoá quá sớm, gỡ cài đặt bằng Khai thác thay vì bằng mã kiểm thử trong tệp nhị phân Python cung cấp đảm bảo tốt hơn về mặt thời gian.

Bước 5: Chạy kiểm thử cục bộ: atest

Hiện tại, thử nghiệm nhiều thiết bị chỉ chạy trên thiết bị thực. Trước khi chạy kiểm thử, xác minh rằng thiết bị thử nghiệm của bạn ở trạng thái thích hợp. Lệnh adb devices sẽ báo cáo danh sách các thiết bị bạn đã kết nối. Nếu danh sách chứa thiết bị không dành cho mục đích thử nghiệm, chỉ định thiết bị cho thử nghiệm bằng ký tự -s cờ.

Để kiểm tra Wi-Fi, hãy đảm bảo bạn đã bật Wi-Fi cho các thiết bị (sau khi đặt lại về trạng thái ban đầu).

Bạn có thể chạy kiểm thử cục bộ bằng atest:

$ atest CtsWifiAwareTestCases

Bạn sẽ thấy số lượng thiết bị được sử dụng trong tiêu đề tóm tắt trong thử nghiệm đầu ra, chẳng hạn như Test executed with 2 device(s).

Khắc phục sự cố

Nếu chương trình kiểm thử không thành công khi chạy trên máy do:

Lỗi Virtualenv

java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory

Vui lòng đảm bảo virtualenv có trong PATH của bạn. Đang thêm "~/.local/bin" vào PATH sẽ khắc phục vấn đề. nếu Virtualenv chưa được cài đặt, hãy làm theo: https://virtualenv.pypa.io/vi/Latest/installation.html

Dự kiến sẽ có ít nhất 2 đối tượng tay điều khiển và sẽ có 1 đối tượng

Mô-đun kiểm thử là mô-đun nhiều thiết bị hoặc một thiết bị, không có mô-đun hỗn hợp. Nếu bạn cố chạy mô-đun nhiều thiết bị mà không có nhiều thiết bị trên thiết bị bạn sẽ thấy lỗi này:

Expected to get at least 2 controller objects, got 1

Việc thực thi mô-đun ở chế độ nhiều thiết bị sẽ giải quyết được vấn đề này.

Đối với CTS: Bạn có thể dùng tính năng phân đoạn để kích hoạt bộ lọc (Ví dụ: --shard-count 2) hoặc run cts-multidevces.