Tải giao thức bằng cấu hình chung

Để hiểu rõ phần này, trước tiên, hãy nghiên cứu Tradefed @Option.

Các lựa 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 nữa và giải quyết một số thông tin bổ sung này nếu cần.

Ví dụ về lựa chọn tệp

Ví dụ về tệp @option:

@Option(name = 'config-file')
private File mConfigFile;

Bạn có thể thiết lập những 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ó kiểu Tệp từ xa thành một tệp cục bộ để có sẵn một cách liền mạch theo quan điểm của người dùng.

Để hoạt động, bạn cần chỉ định tệp bằng một đườ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ữ. Khi thấy đường dẫn từ xa đó, Tradefed sẽ cố gắng tải tệp xuống cục bộ và chỉ định 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à chương trình kiểm thử có thể dùng.

Nếu không tải được tệp từ xa vì bất kỳ lý do nào, Tradefed 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 cách sử dụ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ó 2 hành vi tích hợp:

  • 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 giải nén vào một vị trí tạm thời. Ví dụ: ?unzip=true
  • không bắt buộc: Giá trị mặc định là false. Nếu được đặt thành true và độ phân giải không thành công, thì phương thức này sẽ không tạo ra một ngoại lệ và sẽ chỉ 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 thông qua --dynamic-download-args key=value. Đối số này sẽ truyền khoá/giá trị đến tất cả các lượt tải động được thực hiện trong lệnh gọi.

Các 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 là:

  • Google Cloud Storage, giao thức: gs, định dạng: gs://<bucket name>/path
  • Tệp cục bộ, 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í giới hạn để tải xuống. Độ phân giải của @Option hiện chỉ được bật cho cấu hình Tradefed XML chính.

Nếu chạy dưới dạng một 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 ra một số phần phụ thuộc không xác định. Bạn có thể bỏ qua điều 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 tra tính tương thích (CTS)Bộ kiểm thử của nhà cung cấp (VTS) sẽ không bật tính năng này.

Triển khai một giao thức mới

Các giao thức được hỗ trợ có một cách triển khai trong Tradefed của giao diện IRemoteFileResolver, 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 được đề 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 META-INF services của harness để chính thức bật tính năng hỗ trợ.