Các lệnh shell thiết bị

Trong quá trình kiểm thử VTS, các lệnh shell được dùng để thực thi kiểm thử phía mục tiêu nhị phân, để nhận/thiết lập thuộc tính, biến môi trường và thông tin hệ thống, và bắt đầu/dừng khung Android. Bạn có thể thực thi VTS shell thiết bị các lệnh bằng lệnh adb shell hoặc trình điều khiển shell VTS chạy trên thiết bị này (nên chọn).

Sử dụng ADB shell

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

  • Tải đối tượng thiết bị Android:
    self.device = self.android_devices[0]
    
  • Tạo một lệnh shell:
    result = self.device.adb.shell(‘ls')
    

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

Trình điều khiển shell VTS là một tệp nhị phân của tác nhân chạy trên thiết bị và thực thi 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 thức này có độ trễ ít 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ợ kiểm thử nhiều thiết bị, trong đó mỗi thiết bị Android được biểu thị dưới dạng đối tượng AndroidDevice trong trình chạy cơ sở. Theo mặc định, VTS khung sẽ đẩy tác nhân VTS và tệp nhị phân trình điều khiển shell VTS vào từng thiết bị Android và thiết lập các kết nối TCP đến 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ủ sẽ tạo một hàm gọi đối tượng ShellMirror bên trong đối tượng AndroidDevice. ShellMirror gói văn bản lệnh shell vào một protobuf và gửi (qua kênh TCP) đến tác nhân VTS trên Android thiết bị. Tác nhân chạy trên thiết bị sẽ chuyển tiếp lệnh shell đến VTS shell trình điều khiển thông qua cổng Unix.

Khi trình điều khiển shell VTS nhận được một lệnh shell, trình điều khiển này sẽ thực thi lệnh đó qua nohup trên vỏ thiết bị để tránh bị treo. Stdout, stderr và mã trả về sau đó là truy xuất từ nohup rồi gửi lại cho tác nhân VTS. Cuối cùng, nhân viên hỗ trợ trả lời máy chủ bằng cách gói(các) kết quả của lệnh vào một protobuf tin nhắn.

Ưu điểm

Sau đây là những ưu điểm của việc sử dụng trình điều khiển shell VTS thay vì adb shell:

  • Độ tin cậy. Trình điều khiển shell VTS sử dụng nohup để thực thi các lệnh theo chế độ cài đặt mặc định. Vì xét nghiệm VTS chủ yếu là kiểm thử HAL và kernel ở cấp thấp hơn, nohup đảm bảo shell các lệnh không bị treo trong quá trình thực thi.
  • Hiệu suất. Trong khi lệnh adb shell sẽ lưu một số kết quả vào bộ nhớ đệm (chẳng hạn như liệt kê các tệp trong một thư mục) nó có kết nối khi thực hiện các tác vụ như thực thi tệp nhị phân kiểm thử. Trình điều khiển vỏ VTS duy trì kết nối đang hoạt động trong suốt quá trình kiểm thử, vì vậy, chỉ có hao tổn duy nhất là USB giao tiếp. Trong kiểm thử, chúng tôi sử dụng trình điều khiển shell VTS để thực thi lệnh có 100 lệnh gọi đến một 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 vì VTS shell thông tin liên lạc có ghi nhật ký rộng rãi.
  • Lưu giữ trạng thái. Trình điều khiển vỏ VTS duy trì một thiết bị đầu cuối phiên 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 hoạt động đầu cuối là chỉ dùng được 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 các VTS khung và trình điều khiển thiết bị được gói trong protobuf để kích hoạt tiềm năng nén, từ xa, mã hoá, v.v. trong tương lai. Các khả năng khác cho Cải thiện hiệu suất cũng có sẵn, bao gồm cả phân tích cú pháp kết quả phía thiết bị khi mức hao tổn giao tiếp trở nên lớn hơn quá trình phân tích cú pháp chuỗi kết quả.

Nhược điểm

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:

  • Tệp nhị phân bổ sung. Tệp tác nhân VTS phải được đẩy tới thiết bị và dọn dẹp sau khi chạy thử nghiệm.
  • Cần có kết nối đang hoạt động. Nếu kết nối TCP giữa máy chủ lưu trữ và tác nhân bị mất trong quá trình kiểm thử (do ngắt kết nối USB, tắt cổng, sự cố thiết bị, v.v.) dù vô tình hay cố ý, một lệnh shell Không thể 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 là không thể xác định.

Ví dụ

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

  • Tải đối tượng thiết bị Android:
    self.device = self.android_devices[0]
    
  • Lấy đối tượng shell cho thiết bị đã chọn:
    self.shell = self.device.shell
    
  • Tạo một lệnh shell:
    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ừ quá trình thực thi lệnh shell là một từ điển chứa khoá stdouts, stderrsreturn_codes. Bất kể lệnh shell được cung cấp dưới dạng chuỗi đơn hay danh sách 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 thử phải kiểm tra 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')