Chạy thử nghiệm với nhiều thiết bị

Trang này giúp bạn sử dụng Bộ khai thác thử nghiệm của Liên đoàn Thương mại với nhiều thiết bị trong quá trình thử nghiệm. Trước tiên, bạn nên làm quen với cách sử dụng thông thường như được mô tả trong ví dụ toàn diện .

Điều gì khác biệt với nhiều thiết bị?

Một số điểm khác biệt khi định cấu hình và chạy thử nghiệm đa thiết bị trong Liên đoàn Thương mại, cụ thể là:

Mọi cấu hình một thiết bị hiện có đều hợp lệ cho chế độ nhiều thiết bị.

<! -- VIỆC CẦN LÀM: Làm rõ câu ngay bên trên bằng cách thêm ví dụ về trường hợp sử dụng một thiết bị vì nó liên quan đến chế độ nhiều thiết bị trong câu thứ hai. -->>

Cấu hình nhiều thiết bị

Tài liệu này giả định rằng bạn đã quen thuộc với cấu hình kiểm tra TF điển hình. Đây là cấu hình thử nghiệm điển hình với hai thiết bị:

<configuration description="A simple multi-devices example in Tradefed">

    <device name="device1">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <option name="log-level" value="verbose" />
    <test class="com.android.tradefed.HelloWorldMultiDevices" />

    <logger class="com.android.tradefed.log.FileLogger" />
    <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

</configuration>

Một số điều cần được đề cập về cấu trúc:

  • Đối với mỗi thiết bị cần thiết, sẽ có một <device> .
  • <build_provider> , <target_preparer> , <device_recovery> , <device_requirements><device_options> nếu cần phải được bao gồm trong thẻ <device> ; một ngoại lệ sẽ được ném ra nếu không.
  • thuộc tính name cho <device> là bắt buộc và phải là duy nhất trong số tất cả các thiết bị có trong cấu hình. Nó được sử dụng để tham chiếu đến thiết bị cụ thể được liên kết với nó. Điều này cho phép thử nghiệm của bạn nhắm mục tiêu một thiết bị cụ thể.
  • <option> có thể có phạm vi toàn cầu khi ở gốc của cấu hình hoặc bị giới hạn ở phạm vi thiết bị khi được chỉ định bên trong thẻ <device> .

Tất cả các quy tắc khác áp dụng cho cấu hình một thiết bị vẫn được áp dụng ở đây. Xem ví dụ Hello World bên dưới để biết thêm chi tiết.

Cập nhật dòng lệnh

Khi chỉ định các tùy chọn trên dòng lệnh TF, cũng có thể chỉ định phạm vi thiết bị bằng cách sử dụng {<device name>} trong đó <device name> là tên được chỉ định trong cấu hình XML.

Trong ví dụ trên, các tùy chọn sau được cho phép:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

Bạn chỉ có thể nhắm mục tiêu một trong các đối tượng build_provider của thiết bị bằng tên thiết bị, như sau:

--{device2}device-setup:disable

Trong ví dụ này, device2 bỏ qua quá trình thiết lập thiết bị trong khi device1 thì không.

TF chọn thiết bị như thế nào?

Liên đoàn Thương mại tìm kiếm một thiết bị phù hợp với device_requirements (thường là hương vị thiết bị, sản phẩm, v.v.) theo thứ tự xuất hiện của thiết bị trong cấu hình. Mỗi lần một thiết bị được phân bổ, TF sẽ cố gắng phân bổ thiết bị tiếp theo. Nếu không thể phân bổ tất cả các thiết bị, tất cả chúng sẽ được giải phóng và lệnh sẽ được thử lại khi tất cả các thiết bị đã khớp.

TF chuẩn bị các thiết bị như thế nào?

Bước chuẩn bị cho nhiều thiết bị hầu hết giống như đối với các thiết bị đơn lẻ. Mỗi thiết bị được chuẩn bị bằng cách gọi <target_preparer> theo thứ tự xuất hiện bên trong <device> .

Bạn cũng có thể sử dụng <multi_target_preparer> được chỉ định ở phần gốc của cấu hình để kích hoạt các bước chuẩn bị yêu cầu nhiều thiết bị, chẳng hạn như ghép nối các thiết bị. Nó chạy sau bước target_preparer .

Một giải pháp thay thế là <pre_multi_target_preparer> chạy trước bước target_preparer .

  • Nên sử dụng <pre_multi_target_preparer> cho việc thiết lập phải được thực hiện trước khi thiết lập thiết bị riêng lẻ.
  • <multi_target_preparer> nên được sử dụng để thiết lập phải được thực hiện sau khi thiết lập thiết bị riêng lẻ.

Ví dụ:

thiết bị flash 1 (target_preparer) thiết bị flash 2 (target_preparer) bluetooth kết nối cả hai thiết bị (multi_target_preparer)

Viết bài kiểm tra đa thiết bị

Khi viết bài kiểm tra một thiết bị thông thường, bạn triển khai giao diện IDeviceTest .

Để các bài kiểm tra nhận được thiết bị đang được kiểm tra, bạn có thể triển khai IMultiDeviceTest hoặc IInvocationContextReceiver .

IMultiDeviceTest cung cấp cho bạn bản đồ trực tiếp của thiết bị tới IBuildInfo trong khi IInvocationContextReceiver sau đó cung cấp cho bạn bối cảnh hoàn chỉnh (thiết bị, IBuildInfo & siêu dữ liệu).

Sau đó, bạn sẽ có thể sử dụng các API ITestDevice thông thường mà TF sử dụng để viết bài kiểm tra.

Chưa có API nào tồn tại để thực hiện các hoạt động từ thiết bị này sang thiết bị khác, chẳng hạn như device1.sync(device2) . Nếu bạn cho rằng mình có một trường hợp sử dụng hấp dẫn cần được hỗ trợ, hãy gửi lý do của bạn đến danh sách nền tảng Android .

Ví dụ về nhiều thiết bị xin chào thế giới

Chúng tôi đã thêm cấu hình ví dụ giống Hello World: multi-device.xml Ngoài ra còn có một ví dụ về triển khai multi_target_preparer HelloWorldMultiTargetPreparer cho biết cách nhận danh sách thiết bị và bản dựng của chúng.

Đây là một ví dụ đầy đủ bao gồm:

  • Phân bổ hai thiết bị
  • Truy cập cả hai thiết bị thông qua multi_target_preparer
  • Chạy thử nghiệm sử dụng hai thiết bị

Khi bạn đã xây dựng Tradefed, bạn có thể sử dụng lệnh sau trong TF shell:

run example/multi-devices

Bạn sẽ thấy một số đầu ra có chứa thông tin sau:

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'

Bạn cần kết nối hai thiết bị để chạy các thiết bị trên. Điều này có thể được kiểm tra thông qua: adb devices

Khi quá trình gọi đang diễn ra, bạn có thể giám sát nó như các thiết bị đơn lẻ có list ilist d :

tf >list i
Command Id  Exec Time  Device                          State
1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
tf >list d
Serial            State      Product   Variant   Build   Battery
00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
LP5A390056        Allocated  shamu     shamu     NRD90I  100

Bạn sẽ có thể xem các thiết bị liên quan đến mỗi lần gọi, cũng như tất cả các thiết bị có sẵn và trạng thái tương ứng của chúng.

Lưu ý rằng trong ví dụ này, chúng tôi đã gọi hai thiết bị trong cấu hình device1device2 ; bạn nên đặt tên mô tả nhiều hơn nếu có thể tùy thuộc vào loại thiết bị mà bạn thực sự mong đợi được đặt.