Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Lệnh vỏ thiết bị

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Trong quá trình kiểm tra VTS, các lệnh shell được sử dụng để thực thi nhị phân kiểm tra phía đích, để lấy / đặt thuộc tính, biến môi trường và thông tin hệ thống và khởi động / dừng Android framework. Bạn có thể thực hiện các lệnh shell thiết bị VTS bằng cách sử dụng adb shell hoặc trình điều khiển shell VTS đang chạy trên thiết bị (được khuyến nghị).

Sử dụng trình bao ADB

Các thử nghiệm yêu cầu tắt cổng USB hoặc khởi động lại thiết bị trong khi thử nghiệm phải sử dụng ADB shell vì trình điều khiển shell VTS không khả dụng nếu không có kết nối USB liên tục. Bạn có thể gọi trình bao ADB từ đối tượng AndroidDevice trong tập lệnh thử nghiệm Python. Ví dụ:

  • Nhận đối tượng thiết bị Android:
    self.device = self.android_devices[0]
    
  • Phát hành một lệnh shell duy nhất:
    result = self.device.adb.shell(‘ls')
    

Sử dụng trình điều khiển shell VTS

Trình điều khiển trình bao VTS là một tệp nhị phân tác nhân chạy trên thiết bị và thực hiện các lệnh trình bao. Theo mặc định, VTS sử dụng trình điều khiển shell nếu trình điều khiển đang chạy trên thiết bị vì phương pháp này có độ trễ ít hơn so với sử dụng adb shell .

Hình 1. Trình điều khiển shell VTS.

Khung VTS hỗ trợ kiểm tra nhiều thiết bị trong đó mỗi thiết bị Android được biểu diễn như một đối tượng AndroidDevice trong trình chạy cơ sở. Theo mặc định, khung VTS đẩy các tệp nhị phân trình điều khiển VTS và VTS shell tới mỗi thiết bị Android và thiết lập kết nối TCP tới các tác nhân VTS trên các thiết bị đó.

Để thực thi một lệnh shell, tập lệnh Python phía máy chủ thực hiện một lệnh gọi hàm tới đối tượng ShellMirror bên trong đối tượng AndroidDevice. Đối tượng ShellMirror gói các văn bản lệnh shell thành một thông báo protobuf và gửi nó (qua kênh TCP) đến tác nhân VTS trên thiết bị Android. Sau đó, tác nhân đang chạy trên thiết bị sẽ chuyển tiếp lệnh shell tới trình điều khiển shell VTS thông qua ổ cắm Unix.

Khi trình điều khiển trình bao VTS nhận được lệnh trình bao, nó sẽ thực hiện lệnh thông qua nohup trên vỏ thiết bị để tránh bị treo. Sau đó, mã stdout, stderr và return sẽ được truy xuất từ nohup và được gửi lại cho đại lý VTS. Cuối cùng, tác nhân trả lời máy chủ lưu trữ bằng cách gói (các) kết quả lệnh vào một thông báo protobuf .

Thuận lợi

Những lợi thế của việc sử dụng trình điều khiển shell VTS thay vì adb shell bao gồm:

  • Độ tin cậy. Trình điều khiển shell VTS sử dụng nohup để thực hiện các lệnh trên cài đặt mặc định. Vì các bài kiểm tra VTS hầu hết là các bài kiểm tra HAL và hạt nhân cấp thấp hơn, nohup đảm bảo các lệnh shell không bị treo trong quá trình thực thi.
  • Hiệu suất . Trong khi adb shell lưu vào bộ nhớ cache một số kết quả (chẳng hạn như liệt kê các tệp trong thư mục), nó có chi phí kết nối khi thực hiện các tác vụ như thực thi nhị phân thử nghiệm. Trình điều khiển shell VTS duy trì kết nối hoạt động trong suốt quá trình thử nghiệm nên chi phí duy nhất là giao tiếp USB. Trong thử nghiệm của chúng tôi, việc sử dụng trình điều khiển shell VTS để thực hiện một lệnh với 100 lệnh gọi đến một tệp nhị phân gtest trống sẽ nhanh hơn khoảng 20% ​​so với sử dụng adb shell ; sự khác biệt thực tế lớn hơn vì giao tiếp shell VTS có khả năng ghi nhật ký rộng rãi.
  • Bảo quản nhà nước . Trình điều khiển trình bao VTS duy trì một phiên đầu cuối cho mỗi tên thiết bị đầu cuối (tên thiết bị đầu cuối mặc định là mặc định ). Các biến môi trường được đặt trong một phiên đầu cuối chỉ có sẵn cho các lệnh tiếp theo trong cùng phiên đó.
  • Có thể mở rộng . Thông tin liên lạc lệnh Shell giữa khung VTS và trình điều khiển thiết bị được bao bọc trong protobuf để cho phép nén, xóa, mã hóa, v.v. trong tương lai. Các khả năng khác để cải thiện hiệu suất cũng có sẵn, bao gồm phân tích cú pháp kết quả phía thiết bị khi tổng chi phí giao tiếp trở nên lớn hơn phân tích cú pháp chuỗi kết quả.

Nhược điểm

Những bất lợi của việc sử dụng trình điều khiển shell VTS thay vì adb shell bao gồm:

  • Các tệp nhị phân bổ sung . Các tệp tác nhân VTS phải được đẩy vào thiết bị và được dọn dẹp sau khi thực hiện kiểm tra.
  • Yêu cầu kết nối hoạt động . Nếu kết nối TCP giữa máy chủ và tác nhân bị mất trong quá trình thử nghiệm (do ngắt kết nối USB, tắt cổng, sự cố thiết bị, v.v.) cố ý hoặc vô ý, lệnh shell sẽ không thể được truyền đến tác nhân VTS. Ngay cả khi tự động chuyển sang adb shell , kết quả và trạng thái của lệnh trước khi ngắt kết nối sẽ không xác định được.

Các ví dụ

Ví dụ về việc sử dụng các lệnh shell trong tập lệnh kiểm tra Python phía máy chủ VTS:

  • Nhận đối tượng thiết bị Android:
    self.device = self.android_devices[0]
    
  • Lấy một đối tượng shell cho thiết bị đã chọn:
    self.shell = self.device.shell
    
  • Phát hành một lệnh shell duy nhất:
    results = self.shell.Execute(‘ls')
    
  • Đưa ra danh sách các lệnh shell:
    results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
    

Đối tượng kết quả lệnh

Đối tượng trả về từ việc thực thi lệnh shell là một từ điển chứa các khóa stdouts , stderrsreturn_codes . Bất kể lệnh shell được cung cấp dưới dạng một chuỗi đơn hay một danh sách các chuỗi lệnh, mỗi giá trị của từ điển kết quả luôn là một danh sách.

Để xác minh mã trả về của một danh sách các lệnh, tập lệnh kiểm tra phải kiểm tra các chỉ số. Thí dụ:

asserts.assertFalse(any(results[‘return_codes']), ‘some command failed.')

Ngoài ra, tập lệnh có thể kiểm tra từng chỉ mục lệnh riêng lẻ. Thí dụ:

asserts.assertEqual(results[‘return_codes'][0], 0, ‘first command failed')
asserts.assertEqual(results[‘return_codes'][1], 0, ‘second command failed')