Khi tập hợp kiểm thử lớn hoặc thời gian thực thi trở nên dài, bạn có thể phân tách các kiểm thử trên một số 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 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 phương thức này đã hỗ trợ tính năng phân đoạn: kiểm thử đo lường, kiểm thử do phía máy chủ điều khiển, GTest.
Chúng tôi hỗ trợ hai loại phân đoạn trong Tradefed: phân đoạn cục bộ và phân đoạn phân tán. Các lớp này 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 tin cụ thể của từng lớp.
Thuộc tính phổ biến
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 độc lập và có tính xác định. Bước đầu tiên của cả hai phương thức phân đoạn là tạo danh sách đầy đủ các bài kiểm thử theo thứ tự, sau đó chia các bài kiểm thử đó thành nhiều nhóm/phân đoạn.
Điểm khác biệt chính của các biểu mẫu phân đoạn là cách thực thi chương trình 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ộ có nghĩa là tất cả thiết bị tham gia thực thi lệnh gọi phân đoạn đều được kết nối với cùng một máy chủ thực.
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ủ bằng cách tạo một nhóm các chương trình kiểm thử cần được thực thi và yêu cầu mỗi thiết bị thăm dò ý kiến về các chương trình kiểm thử khi thiết bị đó rảnh (tức là đã hoàn tất chương trình kiểm thử trước đó). Điều này giúp tối ưu hoá mức sử dụng thiết bị. Chúng tôi còn gọi đây là tính năng phân đoạn động.
Tùy chọn
--shard-count XX
Phân đoạn phân tán
Phân đoạn được phân phối có nghĩa là tất cả các thiết bị liên quan đến quá trình thực thi lệnh gọi phân đoạn đều có thể hoạt động ở bất cứ đâu và được kết nối với nhiều máy chủ thực tế.
Thực thi
Quá trình phân đoạn được phân phối diễn ra khi tạo danh sách kiểm thử và nội dung của mỗi phân đoạn chỉ thực thi phân đoạn hiện được yêu cầu. Vì vậy, tất cả các mảnh được phân phối đều tạo cùng một danh sách lúc đầu, sau đó thực thi một tập hợp con riêng biệt của danh sách đó, dẫn đến việc tất cả các chương trình kiểm thử đều được thực thi.
Thuộc tính chính của biểu mẫu này là các phân đoạn hoàn toàn không nhận biết về nhau và có thể bị lỗi một cách độc lập.
Hạn chế chính là chiều dài 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 mỗi chương trình 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 như tương đươ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ị tham gia vào quá trình phân đoạn có chứa các tài nguyên đặc biệt mà thiết bị khác không có, chẳng hạn như thẻ SIM. Một số kiểm thử có thể chỉ hoạt động khi có tài nguyên đặc biệt đó và sẽ không hoạt độ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 những 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 TokenProperty
của Tradefed 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 các kiểm thử đúng cách.
Nếu không có thiết bị nào có thể chạy kiểm thử thì sao?
Nếu không có thiết bị nào có tài nguyên phù hợ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 Tradefeed chính:
--enable-token-sharding