Khi tập hợp 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 kiểm thử trên nhiều thiết bị: phân đoạn.
Phân đoạn có các điều kiện tiên quyết để trình chạy kiểm thử hỗ trợ phân đoạn.
Đa số trình chạy kiểm thử chính đã hỗ trợ phân đoạn nên bạn không cần làm gì thêm. Những kiểm thử này đã hỗ trợ tính năng phân đoạn: kiểm thử đo lường, kiểm thử dựa trên phía máy chủ lưu trữ, 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 tin cụ thể của từng thuộc tính.
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ừ các trình chạy kiểm thử: Các phân đoạn cần phải độc lập và xác định. Bước đầu tiên của cả hai phương pháp phân đoạn là tạo danh sách đầy đủ và có thứ tự của các kiểm thử, sau đó chia các 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 chúng thực thi các 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ả 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.
Thực thi
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 quy trình kiểm thử cần được thực thi và để mỗi thiết bị thăm dò các quy trình kiểm thử khi thiết bị đó rảnh (tức là đã hoàn thành quy trình kiểm thử trước đó). Nhờ đó, thiết bị sẽ được sử dụng một cách tối ưu. Chúng tôi cũng gọi đây là phân đoạn động.
Tùy chọn
--shard-count XX
Phân đoạn phân tán
Phân đoạn phân tán có 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 có thể nằm ở bất kỳ đâu và được kết nối với các máy chủ vật lý khác nhau.
Thực thi
Phân đoạn phân tán xảy ra khi tạo danh sách các 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, ban đầu, tất cả các mảnh phân tán đều tạo cùng một danh sách, 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 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 biết đến nhau và có thể gặp lỗi độ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 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ể 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 phải cục bộ. Đôi khi, một trong các thiết bị tham gia phân chia giữ các tài nguyên đặc biệt mà những 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ẽ thất bại 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 những thiết bị có thể thực thi các kiểm thử một cách thích hợp.
Điều gì sẽ xảy ra nếu không có thiết bị nào chạy được 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