Lệnh vỏ thiết bị

Trong quá trình thử nghiệm VTS, các lệnh shell được sử dụng để thực thi tệp nhị phân thử nghiệm phía mục tiêu, để lấy/đặt thuộc tính, biến môi trường và thông tin hệ thống cũng như để khởi động/dừng khung Android. Bạn có thể thực thi các lệnh shell thiết bị VTS bằng lệnh 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 vỏ 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 quá trình thử nghiệm phải sử dụng shell ADB 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 kiểm thử Python. Ví dụ:

  • Nhận đối tượng thiết bị Android:
    self.device = self.android_devices[0]
    
  • Đưa ra 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 shell VTS là một tác nhân nhị phân chạy trên thiết bị và thực thi các lệnh shell. 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ễ thấp hơn so với sử dụng lệnh adb shell .

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

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

Để thực thi lệnh shell, tập lệnh Python phía máy chủ thực hiện 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 vào một thông báo protobuf và gửi nó (thông qua kênh TCP) tới tác nhân VTS trên thiết bị Android. Sau đó, tác nhân 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 shell VTS nhận được lệnh shell, nó sẽ thực thi lệnh thông qua Nohup trên shell thiết bị để tránh bị treo. Stdout, stderr và mã trả về sau đó được lấy từ nohup và gửi lại cho đại lý VTS. Cuối cùng, tác nhân trả lời máy chủ bằng cách gói (các) kết quả lệnh vào thông báo protobuf .

Thuận lợi

Ưu điểm 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 thi các lệnh trên cài đặt mặc định. Vì các bài kiểm tra VTS chủ yếu là các bài kiểm tra HAL và kernel cấp thấp hơn, nohup đảm bảo các lệnh shell không bị treo trong khi thực thi.
  • Hiệu suất . Mặc dù lệnh adb shell lưu trữ một số kết quả (chẳng hạn như liệt kê các tệp trong một thư mục), nhưng nó có chi phí kết nối khi thực hiện các tác vụ như thực thi tệp nhị phân thử nghiệm. Trình điều khiển vỏ 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 thi lệnh với 100 lệnh gọi đến tệp nhị phân gtest trống 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 do giao tiếp shell VTS có tính năng ghi nhật ký rộng rãi.
  • Giữ nhà nước . Trình điều khiển shell VTS duy trì phiên 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à default ). Các biến môi trường được đặt trong một phiên cuối chỉ khả dụng cho các lệnh tiếp theo trong cùng một phiên.
  • Có thể mở rộng . Giao tiếp lệnh Shell giữa khung VTS và trình điều khiển thiết bị được gói trong protobuf để cho phép nén, điều khiển từ xa, 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 kết quả phía thiết bị khi chi phí liên lạc trở nên lớn hơn phân tích chuỗi kết quả.

Nhược điểm

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

  • Các nhị phân bổ sung . Các tập tin tác nhân VTS phải được đẩy vào thiết bị và 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 kiểm tra (do ngắt kết nối USB, tắt cổng, hỏng thiết bị, v.v.) do cố ý hoặc vô ý, lệnh shell 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.

Ví dụ

Ví dụ về cách sử dụng 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]
    
  • Nhận đối tượng shell cho thiết bị đã chọn:
    self.shell = self.device.shell
    
  • Đưa ra 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 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 danh sách lệnh, tập lệnh kiểm tra phải kiểm tra các chỉ mục. Ví 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ẻ. Ví dụ:

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