Phân đoạn kiểm thử

Khi kho ngữ liệu kiểm thử lớn hoặc thời gian thực thi trở nên dài, chúng tôi cung cấp khả năng chia các bài kiểm thử trên nhiều thiết bị: phân đoạn.

Tính năng phân đoạn có các điều kiện tiên quyết để trình chạy kiểm thử hỗ trợ tính năng phân đoạn.

Phần lớn các trình chạy kiểm thử chính đã hỗ trợ tính năng phân đoạn nên bạn không cần làm gì thêm. Các trình chạy này đã hỗ trợ tính năng phân đoạn: bài kiểm thử đo lường, bài kiểm thử do máy chủ lưu trữ điều khiển, GTest.

Có 2 loại phân đoạn mà chúng tôi hỗ trợ trong Tradefed: cục bộ và phân tán. Chúng có một số điểm tương đồng, vì vậy, trang này mô tả các thuộc tính chung và sau đó là thông số kỹ thuật của từng loại.

Thuộc tính chung

Cả hai hình thức phân đoạn đều giả định các thuộc tính giống nhau từ trình chạy kiểm thử: Các phân đoạn cần phải độc lậptất định. Bước đầu tiên của cả hai hình thức phân đoạn là tạo danh sách đầy đủ và có thứ tự của các bài kiểm thử, sau đó chia chúng thành các nhóm/phân đoạn khác nhau.

Điểm khác biệt chính của các hình thức phân đoạn là cách chúng thực thi các bài kiểm thử. Xem thêm thông tin chi tiết trong các phần bên dưới.

Phân đoạn cục bộ

Phân đoạn cục bộ nghĩa là tất cả các thiết bị liên quan đến việc thực thi lệnh gọi được phân đoạn đều được kết nối với cùng một máy chủ lưu trữ thực tế.

Thực thi

Tính năng phân đoạn cục bộ tận dụng tất cả các thiết bị được kết nối với cùng một máy chủ lưu trữ bằng cách tạo một nhóm các bài kiểm thử cần được thực thi và yêu cầu mỗi thiết bị thăm dò các bài kiểm thử khi thiết bị đó rảnh (tức là đã hoàn thành bài kiểm thử trước đó). Nhờ vậy, việc sử dụng thiết bị được tối ưu hoá. Chúng tôi cũng gọi đây là phân đoạn linh động.

Tùy chọn

--shard-count XX

Phân đoạn phân tán

Phân đoạn phân tán nghĩa là tất cả các thiết bị liên quan đến việc thực thi lời gọi được phân đoạn đều có thể ở bất cứ đâu và được kết nối với các máy chủ vật lý khác nhau.

Thực thi

Tính năng phân đoạn phân tán xảy ra khi tạo danh sách các bài kiểm thử và nội dung của mỗi phân đoạn chỉ thực thi phân đoạn được yêu cầu hiện tại. Vì vậy, tất cả các phân đoạn phân tán đều tạo cùng một danh sách trước tiên, sau đó thực thi một tập hợp con loại trừ lẫn nhau của danh sách đó, dẫn đến việc tất cả các bài kiểm thử đều được thực thi.

Thuộc tính chính của hình thức này là các phân đoạn hoàn toàn không biết đến nhau và có thể không thành công một cách độc lập.

Nhược điểm chính là độ dài của phân đoạn không nhất thiết phải cân bằng chỉ vì chúng ta không thể dự đoán trước thời gian chạy của từng bài kiểm thử trong mỗi phân đoạn. Việc phân phối được thực hiện để có số lượng trường hợp kiểm thử gần bằng nhau trong mỗi phân đoạn.

Tùy chọn

--shard-count XX --shard-index XX

Phân đoạn mã thông báo

Bạn chỉ có thể sử dụng tính năng phân đoạn mã thông báo với tính năng phân đoạn cục bộ. Cờ này không hoạt động trong các trường hợp sử dụng phân đoạn không cục bộ. Đôi khi, một trong các thiết bị liên quan đến việc phân đoạn giữ các tài nguyên đặc biệt mà các thiết bị khác không có, chẳng hạn như thẻ SIM. Một số bài kiểm thử có thể chỉ hoạt động khi có tài nguyên đặc biệt đó và sẽ không thành công nếu không có.

Phân đoạn mã thông báo là giải pháp của chúng tôi cho các trường hợp sử dụng như vậy. Các mô-đun kiểm thử có thể khai báo tài nguyên đặc biệt mà chúng cần trong AndroidTest.xml và Tradefed sẽ định tuyến các bài kiểm thử đến một thiết bị có tài nguyên đó.

Cấu hình XML

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

value của mã thông báo khớp với Tradefed's TokenProperty và được liên kết với một trình xử lý trong TokenProviderHelper.

Điều này cho phép chạy các mô-đun kiểm thử trên các thiết bị có thể thực thi đúng cách các bài kiểm thử.

Điều gì sẽ xảy ra nếu không có thiết bị nào có thể chạy bài kiểm thử?

Nếu không có thiết bị nào có tài nguyên khớp với mô-đun kiểm thử, thì mô-đun kiểm thử sẽ không thành công và bị bỏ qua vì không thể thực thi đúng cách.

Ví dụ: nếu một mô-đun kiểm thử yêu cầu thẻ SIM để chạy nhưng không có thiết bị nào có thẻ SIM, thì mô-đun kiểm thử sẽ không thành công.

Triển khai

Truyền cờ tính năng này vào dòng lệnh Tradefed chính:

--enable-token-sharding