Thư viện SDV Test Framework

Trang này cung cấp thông tin tổng quan về thư viện Khung kiểm thử SDV và hướng dẫn bạn cách thiết lập, định cấu hình và thực thi kiểm thử. Sử dụng Khung kiểm thử SDV để kiểm thử toàn diện. Công cụ này được xây dựng trên Mobly; bạn viết các chương trình kiểm thử bằng Python.

Chọn một phương pháp thử nghiệm

Trước khi viết kiểm thử, hãy chọn trình chạy kiểm thử phù hợp với phạm vi xác minh của bạn:

Phạm vi thử nghiệm Loại mô-đun Soong Công cụ thực thi Trường hợp sử dụng
Kiểm thử đơn vị gói dịch vụ rust_test, rust_test_host hoặc cc_test atest Xác minh logic nghiệp vụ, phép biến đổi dữ liệu hoặc các thùng trợ giúp riêng biệt của Rust hoặc C++ trên máy chủ lưu trữ hoặc một máy ảo (VM) Cuttlefish.
Kiểm thử toàn diện và kiểm tra hệ thống nhiều máy ảo python_test_host (Khung kiểm thử SDV) atest hoặc CATBox Xác minh việc điều phối vòng đời của gói dịch vụ, hoạt động giao tiếp giữa các máy ảo, cầu nối SOME/IP hoặc mục tiêu phần cứng trên một đến ba máy ảo.

Thiết lập môi trường

Trang này giả định rằng bạn đã thiết lập máy trạm cho SDV. Để chạy các bài kiểm thử Khung, hãy cài đặt virtualenv.

Phần phụ thuộc Python

Bạn nên quản lý các phần phụ thuộc trong Android bằng cách đóng gói các bài kiểm thử, Python và các phần phụ thuộc của chúng dưới dạng tệp thực thi bằng cách sử dụng cấu hình bản dựng. Bạn phải làm theo phương pháp này trong kho lưu trữ kiểm thử SDV.

Thư viện Khung kiểm thử SDV cung cấp các phần phụ thuộc này theo mặc định:

  • mobly
  • absl-py Bắt buộc để sử dụng tham số hoá trong kiểm thử.
  • pexpect Bắt buộc đối với chức năng lệnh tương tác.
  • ptyprocess Bắt buộc đối với chức năng lệnh tương tác.

Nếu bạn cần các phần phụ thuộc dành riêng cho kiểm thử, hãy đưa các phần phụ thuộc đó vào tệp Android.bp của kiểm thử:

python_test_host {
    …
    libs: [
        "<DEPENDENCY1>",
        "<DEPENDENCY2>",
        …
    ],
    …
}

Các loại kiểm tra hệ thống

Bạn tạo các chương tra kiểm tra hệ thống bằng Khung kiểm thử SDV. Khung này phân biệt giữa các loại sau. Phân loại chính xác các thử nghiệm:

  • Kiểm thử mẫu: Thực thi các dịch vụ mẫu SDV và xác minh rằng kết quả khớp với kết quả dự kiến.
  • Kiểm thử hai đầu: Đừng sử dụng các dịch vụ mẫu của SDV.
  • Kiểm thử chạy trong thời gian dài: Được thiết kế cho các khoảng thời gian thực thi kéo dài.
  • Kiểm thử hiệu suất: Sử dụng thư viện perfetto.
  • Kiểm thử phần cứng: Được thiết kế để thực thi riêng trên một thiết bị thực, chứ không phải trong Cuttlefish (CF).

Tạo thử nghiệm

Tất cả các kiểm thử được viết bằng khung này phải nằm trong kho lưu trữ kiểm thử. Vị trí chính xác của chương trình kiểm thử phụ thuộc vào loại chương trình kiểm thử. Để biết đường dẫn thư mục, mẫu lớp kiểm thử Python, quy tắc Android.bp và nguyên tắc lập trình Mobly, hãy xem phần Tạo quy trình kiểm thử hệ thống SDV.

Định cấu hình thử nghiệm

Định cấu hình tất cả các chương trình kiểm thử để chạy bằng cả atest và CATBox.

Định cấu hình atest

Khung này cung cấp các mẫu cho một, hai và ba thử nghiệm máy ảo. Thêm đoạn mã sau vào tệp Android.bp:

  • Một máy ảo:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device",
    }
    
  • Hai máy ảo:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices",
    }
    
  • Ba máy ảo:

    python_test_host {
      ...
      test_config_template: ":sdv_three_devices",
    }
    

Mẫu mặc định là đủ cho hầu hết các thử nghiệm. Tránh tạo cấu hình tuỳ chỉnh trừ phi có lý do thuyết phục.

Cập nhật thời gian chờ mặc định

Thời gian chờ mặc định phải đủ để thực thi các kiểm thử cục bộ.

Nếu kiểm thử của bạn không thành công cục bộ do hết thời gian chờ, hãy cân nhắc việc chia kiểm thử đó thành các kiểm thử khác nhau. Các kiểm thử rất dài với nhiều trường hợp kiểm thử có thể gây ra điểm tắc nghẽn trong quá trình thực thi.

Nếu bạn phải đặt thời gian chờ cao hơn thời gian chờ mặc định, hãy đọc tiếp.

Ghi đè thời gian chờ mặc định

Khung này không hỗ trợ việc mở rộng mẫu để thực thi atest. Do đó, hãy sử dụng các mẫu được cung cấp có thời gian chờ kéo dài.

  • Một bài kiểm thử dài trên máy ảo:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • Thử nghiệm dài trên hai máy ảo:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices_long_test",
    }
    

Thêm nhận xét nêu rõ mục đích sử dụng mẫu này và giải thích lý do cần kéo dài thời gian (ví dụ: nếu kiểm thử yêu cầu tải một cấu phần phần mềm xuống và việc này mất một khoảng thời gian cụ thể).

Đẩy tệp vào thiết bị

Các bước sau đây mô tả cách đẩy tệp vào thiết bị cho cấu hình atest.

Đẩy tệp sang thiết bị

Khung này không hỗ trợ việc mở rộng mẫu để thực thi atest. Do đó, bạn phải tạo một tệp AndroidTest.xml thay thế hoàn toàn mẫu mặc định và bao gồm các tuỳ chọn target_preparer tương ứng cho thiết bị.

  1. Sao chép nội dung của mẫu:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Cập nhật {MODULE} bằng tên mô-đun của kiểm thử.

  3. Thêm com.android.tradefed.targetprep.PushFilePreparer vào từng thiết bị.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

Định cấu hình CATBox

Để chạy kiểm thử dưới dạng một bộ kiểm thử, bạn cần có cấu hình CATBox.

  1. Tạo một tệp cấu hình mới trong libraries/sdv/sdv_catbox/res/config/ và tuân theo các quy ước đặt tên sau:

    • Kiểm thử mẫu: sdv-sample-<NAME>-test.xml
    • Kiểm thử hai đầu: sdv-e2e-<NAME>-test.xml
    • Kiểm thử chạy trong thời gian dài: sdv-long-running-<NAME>-test.xml
    • Kiểm tra hiệu suất: sdv-performance-<NAME>-test.xml
    • Kiểm tra phần cứng: sdv-hw-<NAME>-test.xml
  2. Thêm thông tin tương ứng dựa trên loại thử nghiệm:

  • Một cấu hình kiểm thử máy ảo:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/one-device" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Cấu hình kiểm thử hai máy ảo:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/two-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Cấu hình kiểm thử 3 máy ảo:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/three-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    

Mẫu mặc định là đủ cho hầu hết các thử nghiệm. Tránh tạo cấu hình tuỳ chỉnh trừ phi có lý do thuyết phục.

Cập nhật thời gian chờ mặc định

Nếu thời gian chờ mặc định không đủ cho thử nghiệm, bạn có thể ghi đè thời gian chờ đó.

Ghi đè thời gian chờ mặc định

Để ghi đè thời gian chờ mặc định, hãy thêm nội dung sau vào cuối tệp cấu hình. Các bài kiểm thử dài phải có thời gian chờ tối đa là 10 phút.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

Đẩy tệp vào thiết bị

Phần sau đây mô tả cách đẩy tệp vào thiết bị khi định cấu hình CATBox.

Đẩy tệp vào thiết bị

Để đẩy tệp vào thiết bị tương ứng, hãy thêm cấu hình sau đây sau tuỳ chọn plan:

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

Nếu bạn cần các tệp trên mỗi thiết bị, hãy thêm cấu hình cho từng thiết bị (ví dụ: name=device1, name=device2).

Phiên chạy thử nghiệm

Hướng dẫn này giả định rằng bạn đã hoàn tất việc thiết lập một môi trường SDV đang hoạt động.

Thiết lập môi trường

Khung này không khởi động các phiên bản Thiết bị ảo trên đám mây (CVD), vì vậy, bạn phải khởi động các phiên bản đó trước khi chạy kiểm thử.

  1. Thiết lập môi trường và chạy mục tiêu SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Khởi động phiên bản CVD đầu tiên:

    cvd create --config=sdv_core_instance1
    
  3. Bắt đầu phiên bản CVD thứ hai (để kiểm thử nhiều máy ảo):

    cvd create --config=sdv_core_instance2
    
  4. Khởi động phiên bản CVD thứ ba (để kiểm thử nhiều máy ảo):

    cvd create --config=sdv_core_instance3
    

Chạy atest

atest <TestModuleName>

Chạy CATBox

Các lệnh này giả định rằng bạn đang ở trong thư mục gốc của kho lưu trữ.

  1. Tạo CATBox: m catbox
  2. (Không bắt buộc) Xem tất cả các kế hoạch kiểm thử SDV hiện có trong CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Chạy thử nghiệm:

  • Chạy một kiểm thử máy ảo:

    NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
    
  • Chạy thử nghiệm hai máy ảo:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
    
  • Chạy thử nghiệm ba máy ảo:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522