Để hiểu phần này, trước tiên, hãy nghiên cứu @Option trên Tradefeed.
Các tuỳ chọn thông thường trong Tradefed cho phép các lớp kiểm thử nhận thêm thông tin từ cấu hình XML hoặc dòng lệnh. Tính năng này cho phép bạn thực hiện thêm một bước và giải quyết một số thông tin bổ sung này nếu cần.
Ví dụ về tuỳ chọn tệp
Tệp mẫu @option:
@Option(name = 'config-file')
private File mConfigFile;
Bạn có thể thiết lập thông tin trên thông qua cấu hình XML:
<option name="config-file" value="/tmp/file" />
hoặc thông qua lệnh:
--config-file /tmp/file
Mô tả
Tính năng này cho phép bạn phân giải @Options được nhập bằng tệp từ xa thành một tệp cục bộ để có thể sử dụng liền mạch từ quan điểm của người dùng.
Để tính năng này hoạt động, bạn cần chỉ định tệp bằng đường dẫn kiểu từ xa. Ví dụ:
--config-file gs://bucket/tmp/file
Đường dẫn này trỏ đến một tệp trong bộ chứa Google Cloud Storage (GCS) nơi tệp đó được lưu trữ. Tradefed khi thấy đường dẫn từ xa đó, sẽ cố gắng tải tệp xuống cục bộ và gán tệp đó cho @Option. Điều này dẫn đến việc biến mConfigFile
hiện trỏ đến phiên bản cục bộ của tệp mà kiểm thử có thể sử dụng.
Nếu không thể tải tệp từ xa xuống vì bất cứ lý do gì, Tradefeed sẽ gửi một ConfigurationException
khiến quá trình kiểm thử không chạy được. Chúng tôi coi việc thiếu các tệp đó là một lỗi nghiêm trọng vì một số cấu phần phần mềm kiểm thử cũng sẽ bị thiếu.
Sử dụng tham số truy vấn
Bạn có thể thêm tham số truy vấn vào URL bằng ?
. Ví dụ: gs://bucket/path?unzip=true
. Khoá/giá trị unzip=true
sẽ có trong quá trình triển khai giao diện IRemoteFileResolver.
Có hai hành vi tích hợp sẵn:
- unzip: Nếu bạn đặt thành
true
và tệp đã tải xuống là tệp zip, thì tệp đó sẽ tự động được giải nén vào một vị trí tạm thời. Ví dụ:?unzip=true
- không bắt buộc: Mặc định là
false
. Nếu bạn đặt thànhtrue
và không thể phân giải, thì phương thức này sẽ không gửi ngoại lệ mà chỉ đơn giản là không thay thế tệp. Ví dụ:?optional=true
Bạn cũng có thể truyền các đối số truy vấn chung qua --dynamic-download-args key=value
. Các đối số này sẽ chuyển khoá/giá trị đến tất cả các tệp tải xuống động đã cố gắng thực hiện trong lệnh gọi.
Giao thức được hỗ trợ
Các giao thức được hỗ trợ chính thức và định dạng tương ứng của chúng là:
- Google Cloud Storage, giao thức:
gs
, định dạng:gs://<bucket name>/path
- Tệp trên máy, giao thức:
file
, định dạng:file:/local/path
- Đường liên kết http, giao thức:
http
, định dạng:http://url
- đường liên kết https, giao thức:
https
, định dạng:https://url
Các điểm hạn chế
Độ phân giải động của @Option hiện chỉ hỗ trợ một số giao thức và vị trí tải xuống. Độ phân giải của @Option hiện chỉ được bật cho cấu hình XML Tradefeed chính.
Nếu chạy dưới dạng bộ, các mô-đun hiện tại (AndroidTest.xml
) sẽ không phân giải các tệp theo mặc định.
Điều này nhằm ngăn các mô-đun tạo một số phần phụ thuộc không xác định. Bạn có thể thoát khỏi mã này bằng cách sử dụng --enable-module-dynamic-download
ở cấp bộ, nhưng các bộ chính như Bộ kiểm thử tính tương thích (CTS) và Bộ kiểm thử nhà cung cấp (VTS) sẽ không bật mã này.
Triển khai giao thức mới
Các giao thức được hỗ trợ có cách triển khai trong Tradefed của giao diện IRemoteFileResolver. Giao diện này xác định thẻ ngắn của giao thức sẽ được so khớp trong đường dẫn tệp thông qua getSupportedProtocol
. Ví dụ: gs
được dùng cho giao thức Google Cloud Storage. Giao diện đề xuất để triển khai là #resolveRemoteFiles(RemoteFileResolverArgs)
. Đây sẽ là giao diện được duy trì lâu dài.
Bạn có thể thêm các giao thức đã triển khai vào tệp các dịch vụ META-INF của dây buộc để chính thức bật tính năng hỗ trợ.