Chạy kiểm thử trên nhiều thiết bị

Trang này giúp bạn sử dụng Trade Federation Test Harness với nhiều thiết bị trong quá trình kiểm thử.Trước tiên, bạn nên làm quen với cách sử dụng thông thường như mô tả trong ví dụ từ đầu đến cuối.

Điểm khác biệt khi sử dụng nhiều thiết bị là gì?

Có một số điểm khác biệt khi định cấu hình và chạy các bài kiểm thử trên nhiều thiết bị trong Trade Federation, cụ thể là:

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

<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>

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 thử TF thông thường. Sau đây là cấu hình kiểm thử thông thường với 2 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>

Bạn cần lưu ý một số điểm về cấu trúc:

  • Đối với mỗi thiết bị cần thiết, bạn cần có một <device>.
  • <build_provider>, <target_preparer>, <device_recovery>, <device_requirements>, và <device_options> (nếu cần) phải được đưa vào thẻ <device>; nếu không, hệ thống sẽ gửi một ngoại lệ.
  • 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. Thuộc tính này được dùng để tham chiếu đến thiết bị cụ thể được liên kết với thuộc tính đó. Điều này cho phép bài kiểm thử của bạn nhắm đến một thiết bị cụ thể.
  • <option> có thể có phạm vi toàn cục 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 <device> thẻ.

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 áp dụng ở đây. Hã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 tuỳ chọn trên dòng lệnh TF, bạn cũng có thể chỉ định phạm vi thiết bị bằ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 tuỳ chọn sau được cho phép:

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

Bạn chỉ có thể nhắm đến 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ị, còn device1 thì không.

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

Trade Federation tìm một thiết bị khớ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 khi 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ị, thì tất cả các thiết bị sẽ được phát hành và lệnh sẽ được thử lại khi tất cả các thiết bị được khớp.

TF chuẩn bị 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 một thiết bị. 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 ở gốc của cấu hình cho phép 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 thiết bị. Bước này chạy sau bước target_preparer.

Một lựa chọn khác là <pre_multi_target_preparer> chạy trước bước target_preparer.

  • Bạn nên sử dụng <pre_multi_target_preparer> cho quá trình 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 cho quá trình thiết lập phải được thực hiện sau thiết lập thiết bị riêng lẻ.

Ví dụ:

flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)

Viết bài kiểm thử trên nhiều thiết bị

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

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

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

Sau đó, bạn có thể sử dụng các API ITestDevice thông thường mà TF đặt ở vị trí để viết bài kiểm thử.

Hiện chưa có API nào để thực hiện các thao tác 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 bắt buộc cần được hỗ trợ, hãy gửi lý do của bạn đến danh sách android-platform.

Ví dụ Hello World trên nhiều thiết bị

Chúng tôi đã thêm một cấu hình ví dụ tương tự như Hello World: multi-devices.xml Ngoài ra còn có một ví dụ về cách 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 đủ liên quan đến:

  • Phân bổ 2 thiết bị
  • Truy cập cả 2 thiết bị thông qua multi_target_preparer
  • Chạy một bài kiểm thử sử dụng 2 thiết bị

Sau khi tạo Tradefed, bạn có thể sử dụng lệnh sau trong shell TF:

run example/multi-devices

Bạn sẽ thấy một số kết quả đầu ra chứa nội dung 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 2 thiết bị để chạy lệnh trên. Bạn có thể kiểm tra điều này thông qua: adb devices

Khi quá trình gọi đang diễn ra, bạn có thể theo dõi quá trình này như các thiết bị riêng lẻ bằng 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ể thấy các thiết bị liên quan đến mỗi lời gọi, cũng như tất cả các thiết bị hiện có và trạng thái tương ứng của chúng.

Xin lưu ý rằng trong ví dụ này, chúng tôi đã gọi 2 thiết bị trong cấu hình device1device2; bạn nên đặt tên mô tả hơn nếu có thể tuỳ thuộc vào loại thiết bị mà bạn thực sự muốn thiết lập.