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
.
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ụngadb 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
, stderrs
và return_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')