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ụ toàn diện.
Điểm khác biệt khi dùng nhiều thiết bị là gì?
Một số điểm khác biệt khi định cấu hình và chạy 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ó cho 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ử điển hình 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>
Có một số điều cần đề cập về cấu trúc này:
- Bạn cần có một
<device>cho mỗi thiết bị. <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, một trường hợp ngoại lệ sẽ xảy ra.- thuộc tính
namecho<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. Mã này được dùng để tham chiếu đến thiết bị cụ thể được liên kết với mã đó. Nhờ đó, bạn có thể nhắm đến một thiết bị cụ thể cho kiểm 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 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 áp dụng ở đây. Hãy xem ví dụ Hello World bên dưới để biết thêm thông tin chi tiết.
Cập nhật dòng lệnh
Khi chỉ định các lựa 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 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 lựa 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 bước thiết lập thiết bị, còn device1 thì không.
TF chọn thiết bị như thế nào?
Liên minh 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ị, sản phẩm, v.v. của thiết bị) 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 với bước chuẩn bị cho 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ị. Thao tá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 phải sử dụng
<pre_multi_target_preparer>để thiết lập bắt buộc trước khi thiết lập từng thiết bị. <multi_target_preparer>phải được dùng cho chế độ thiết lập cần được thực hiện sau khi thiết lập từng thiết bị.
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 thử trên nhiều thiết bị
Khi viết một quy trình 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 kiểm thử nhận được các thiết bị đang được kiểm thử, bạn có thể triển khai IMultiDeviceTest hoặc IInvocationContextReceiver.
IMultiDeviceTest cung cấp cho bạn bản đồ trực tiếp từ 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 và siêu dữ liệu).
Sau đó, bạn sẽ có thể sử dụng các API ITestDevice thông thường mà TF cung cấp để viết 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 thuyết phục cần được hỗ trợ, hãy gửi lý do của bạn đến danh sách android-platform.
Ví dụ về chương trình 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ề việc 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ổ hai thiết bị
- Truy cập vào cả hai thiết bị thông qua
multi_target_preparer - Chạy một 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ả 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 các bước trên. Bạn có thể kiểm tra thông tin này qua: adb devices
Khi lệnh gọi đang diễn ra, bạn có thể theo dõi lệnh gọi đó như các thiết bị riêng lẻ bằng list i và list 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 từng lệnh 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 ta đã gọi 2 thiết bị trong cấu hình device1 và device2; 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 đặt.