Phát hiện thiết bị trong Tradefed

Việc kết nối thiết bị mới sẽ kích hoạt một loạt sự kiện không đồng bộ mà bạn nên tìm hiểu.

Kết nối vật lý

Tradefed sử dụng thư viện ddmlib (thư viện adb Java) để cung cấp tương tác cơ bản với adb và thiết bị. Một phần của giải pháp này là giao diện IDeviceChangeListener cho phép nhận các sự kiện thiết bị mới, chẳng hạn như:

  • deviceConnected: Khi adb phát hiện thấy một thiết bị mới
  • deviceDisconnected: Khi một thiết bị không còn báo cáo cho adb nữa
  • deviceChanged: Khi một trạng thái chính của thiết bị xảy ra (chẳng hạn như thiết bị ngoại tuyến hoặc thiết bị trực tuyến)

Các sự kiện này đủ ở cấp adb để quyết định xem một thiết bị có được kết nối, trực tuyến hay ngoại tuyến hay không. Tuy nhiên, đối với bộ kiểm thử, chúng ta cần một trạng thái mạnh hơn trạng thái này để đảm bảo thiết bị thông minh thực sự sẵn sàng bắt đầu chạy kiểm thử; thiết bị không được bị ảnh hưởng bởi tình trạng không ổn định tiềm ẩn có thể xảy ra với một thiết bị thông minh mới kết nối.

Đây là trình tự các sự kiện trong Tradefed:

  1. Thiết bị được nhận dạng là deviceConnected và mở cho các sự kiện thông thường từ adb
  2. Một sự kiện Tradefed nội bộ được tạo ra sẽ:

    • Kiểm tra xem thiết bị đã được biết đến hay chưa; Tradefed giữ tham chiếu nội bộ đến một số thiết bị (đặc biệt là thiết bị hiện được phân bổ và đang chạy kiểm thử) để tránh TF ngẫu nhiên mất dấu các thiết bị đó.
    • Kiểm tra xem thiết bị có ở trạng thái ONLINE hay OFFLINE hay không.
  3. Nếu thiết bị ở trạng thái:

    • OFFLINE: Thiết bị sẽ được chuyển sang trạng thái CONNECTED_OFFLINE của Tradefed, trạng thái này chưa cho phép thiết bị chạy kiểm thử. Nếu thiết bị trực tuyến sau đó, thiết bị sẽ chuyển qua chu trình ONLINE. Nếu chúng tôi nhận được sự kiện deviceDisconnect, thiết bị sẽ chỉ bị xoá khỏi danh sách.

    • ONLINE (như adb thấy): Thiết bị sẽ được đặt ở trạng thái CONNECTED_ONLINE và sẽ được kiểm tra tính khả dụng để phân bổ kiểm thử: checking_availability.

  4. Nếu quá trình kiểm tra availability thành công, thiết bị sẽ được đánh dấu là có sẵn để phân bổ kiểm thử; thiết bị sẽ có thể chạy kiểm thử. Nếu không, thiết bị sẽ được đánh dấu là unavailable để phân bổ và không thể nhận bất kỳ kiểm thử nào.

Tất cả các trạng thái này đều được phản ánh trong bảng điều khiển Tradefed khi liệt kê các thiết bị thông qua: tf> list devices

Bạn cần lưu ý rằng khi thiết bị hiện được phân bổ cho một kiểm thử, hầu hết các trạng thái nêu trên sẽ không xảy ra và Tradefed sẽ xác định trạng thái thiết bị ở nội bộ. Vì vậy, có thể một thiết bị biến mất khỏi adb devices trong khi vẫn được Tradefed liệt kê. Điều đó có thể xảy ra khi một kiểm thử đang khởi động lại thiết bị, chẳng hạn như.

Thiết bị ảo được kết nối bằng adb connect

Khi một thiết bị ảo từ xa được tạo, Tradefed sẽ kết nối với thiết bị đó bằng adb connect. Điều này thường sẽ kích hoạt thiết bị hiển thị trong adb devices dưới dạng <some ip>:<port number> và sẽ tuân theo cùng một trình tự như các thiết bị được kết nối vật lý.

Theo dõi thiết bị khi sự kiện deviceConnected xảy ra

Khi deviceConnected xảy ra, ddmlib sẽ tạo một IDevice tham chiếu mới để theo dõi thiết bị thông minh mới kết nối.

Tradefed sử dụng tham chiếu đó và gói tham chiếu đó trong quá trình triển khai giao diện thiết bị interface ITestDevice của riêng mình để cung cấp dịch vụ nâng cao hơn. Tuy nhiên, IDevice cơ bản luôn là IDevice đến từ ddmlib.

Điều này có nghĩa là nếu một thiết bị mới được kết nối, một ITestDevice mới sẽ được tạo và liên kết với IDevice. Khi điều này xảy ra trong quá trình gọi và ITestDevice đang được sử dụng, IDevice cơ bản vẫn được thay thế để quá trình kiểm thử có thể tiếp tục trên tham chiếu thích hợp. Quá trình này được thực hiện liền mạch mỗi khi một thiết bị bị ngắt kết nối/kết nối lại (ví dụ: trong quá trình khởi động lại).