Viết một trình chạy kiểm thử Tradefeed

Trang này mô tả cách viết trình chạy kiểm thử mới trong Tradefed.

Thông tin khái quát

Nếu bạn muốn tìm hiểu về vị trí của trình chạy kiểm thử trong cấu trúc Tradefed, hãy xem phần Cấu trúc của trình chạy kiểm thử.

Đây không phải là điều kiện tiên quyết để viết trình chạy kiểm thử mới; bạn có thể viết trình chạy kiểm thử một cách độc lập.

Tối thiểu: Triển khai giao diện

Để đủ điều kiện trở thành một trình chạy kiểm thử Tradefeed, bạn phải triển khai giao diện IRemoteTest và cụ thể hơn là phương thức run(TestInformation testInfo, ITestInvocationListener listener).

Phương thức này là phương thức được phần khai thác gọi khi sử dụng trình chạy kiểm thử, tương tự như Java Runnable.

Mỗi phần của phương thức đó đều được coi là một phần của quá trình thực thi trình chạy kiểm thử.

Báo cáo kết quả từ trình chạy kiểm thử

Phương thức run trong giao diện cơ sở cấp quyền truy cập vào đối tượng trình nghe thuộc loại ITestInvocationListener. Đối tượng này là chìa khoá để báo cáo kết quả có cấu trúc từ trình chạy kiểm thử đến bộ điều khiển.

Bằng cách báo cáo kết quả có cấu trúc, trình chạy kiểm thử có các thuộc tính sau:

  • Báo cáo danh sách thích hợp tất cả các kiểm thử đã chạy, thời lượng kiểm thử và liệu các kiểm thử có vượt qua hay không, không đạt hoặc một số trạng thái khác.
  • Báo cáo các chỉ số liên kết với các thử nghiệm (nếu có), ví dụ: các chỉ số về thời gian cài đặt.
  • Phù hợp với hầu hết các công cụ cơ sở hạ tầng, ví dụ: hiển thị kết quả và các chỉ số, v.v.
  • Thường dễ gỡ lỗi hơn vì có dấu vết chi tiết hơn về quá trình thực thi.

Tuy nhiên, việc báo cáo kết quả có cấu trúc là không bắt buộc; trình chạy kiểm thử có thể chỉ muốn đánh giá trạng thái của toàn bộ quá trình chạy là ĐẠT hoặc KHÔNG ĐẠT mà không cần bất kỳ thông tin chi tiết nào về quá trình thực thi thực tế.

Bạn có thể gọi các sự kiện sau trên trình nghe để thông báo cho harness về tiến trình thực thi hiện tại:

  • testRunStarted: Thông báo về việc bắt đầu một nhóm các trường hợp kiểm thử liên quan với nhau.
    • testStarted: Thông báo về việc bắt đầu một trường hợp kiểm thử.
    • testFailed/testIgnored: Thông báo về sự thay đổi trạng thái của trường hợp kiểm thử đang diễn ra. Một trường hợp kiểm thử không có bất kỳ thay đổi nào về trạng thái sẽ được coi là vượt qua.
    • testEnded: Thông báo kết thúc trường hợp kiểm thử.
  • testRunFailed: Thông báo rằng trạng thái tổng thể của nhóm các trường hợp kiểm thử đang chạy là không thành công. Một lần chạy kiểm thử có thể là đạt hoặc không đạt bất kể kết quả của các trường hợp kiểm thử tuỳ thuộc vào kết quả thực thi dự kiến. Ví dụ: một tệp nhị phân chạy một số trường hợp kiểm thử có thể báo cáo tất cả trường hợp kiểm thử đạt nhưng có mã thoát lỗi (vì bất kỳ lý do nào: tệp bị rò rỉ, v.v.).
  • testRunEnded: Thông báo kết thúc nhóm các trường hợp kiểm thử.

Việc duy trì và đảm bảo thứ tự thích hợp của các lệnh gọi lại là trách nhiệm của người triển khai trình chạy kiểm thử, ví dụ: đảm bảo rằng testRunEnded được gọi trong trường hợp ngoại lệ bằng cách sử dụng mệnh đề finally.

Không bắt buộc phải gọi lại các trường hợp kiểm thử (testStarted, testEnded, v.v.). Một lần chạy kiểm thử có thể xảy ra mà không có trường hợp kiểm thử nào.

Bạn có thể nhận thấy rằng cấu trúc sự kiện này được lấy cảm hứng từ cấu trúc JUnit thông thường. Điều này là có chủ ý để giữ mọi thứ gần với những kiến thức cơ bản mà nhà phát triển thường có.

Báo cáo nhật ký từ trình chạy kiểm thử

Nếu đang viết lớp kiểm thử hoặc trình chạy Tradefed của riêng mình, bạn sẽ triển khai IRemoteTest và nhận được ITestInvocationListener thông qua phương thức run(). Bạn có thể dùng trình nghe này để ghi nhật ký các tệp như sau:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

Kiểm thử bằng thiết bị

Giao diện tối thiểu ở trên cho phép chạy các chương trình kiểm thử rất đơn giản, tách biệt và không yêu cầu bất kỳ tài nguyên cụ thể nào, ví dụ: kiểm thử đơn vị Java.

Những người viết mã kiểm thử muốn chuyển sang bước tiếp theo của quy trình kiểm thử thiết bị sẽ cần có các giao diện sau:

  • IDeviceTest cho phép nhận đối tượng ITestDevice đại diện cho thiết bị đang được kiểm thử và cung cấp API để tương tác với thiết bị đó.
  • IBuildReceiver cho phép kiểm thử lấy đối tượng IBuildInfo được tạo ở bước trình cung cấp bản dựng chứa tất cả thông tin và cấu phần phần mềm liên quan đến việc thiết lập kiểm thử.

Trình chạy kiểm thử thường quan tâm đến các giao diện này để lấy các cấu phần phần mềm liên quan đến quá trình thực thi, chẳng hạn như các tệp bổ sung và lấy thiết bị đang được kiểm thử sẽ được nhắm mục tiêu trong quá trình thực thi.

Kiểm thử trên nhiều thiết bị

Tradefed hỗ trợ chạy kiểm thử trên nhiều thiết bị cùng lúc. Điều này rất hữu ích khi kiểm thử các thành phần yêu cầu tương tác bên ngoài, chẳng hạn như ghép nối điện thoại và đồng hồ.

Để viết trình chạy kiểm thử có thể sử dụng nhiều thiết bị, bạn sẽ cần triển khai IMultiDeviceTest. Trình chạy này sẽ cho phép nhận bản đồ của ITestDevice đến IBuildInfo chứa danh sách đầy đủ các bản trình bày thiết bị và thông tin bản dựng liên quan của các bản trình bày đó.

Phương thức setter qua giao diện sẽ luôn được gọi trước phương thức run. Vì vậy, có thể yên tâm khi giả định rằng cấu trúc này sẽ có sẵn khi run được gọi.

Kiểm thử nhận biết chế độ thiết lập

Một số cách triển khai trình chạy kiểm thử có thể cần thông tin về chế độ thiết lập tổng thể để hoạt động đúng cách, chẳng hạn như một số siêu dữ liệu về lệnh gọi hoặc target_preparer nào đã chạy trước đó, v.v.

Để đạt được điều này, trình chạy kiểm thử có thể truy cập vào đối tượng IConfiguration mà trình chạy kiểm thử là một phần của đối tượng đó và được thực thi trong đối tượng đó. Hãy xem phần mô tả về đối tượng cấu hình để biết thêm thông tin chi tiết.

Để triển khai trình chạy kiểm thử, bạn cần triển khai IConfigurationReceiver để nhận đối tượng IConfiguration.

Trình chạy kiểm thử linh hoạt

Trình chạy kiểm thử có thể cung cấp cách linh hoạt để chạy kiểm thử nếu có quyền kiểm soát chi tiết đối với các kiểm thử đó, ví dụ: trình chạy kiểm thử JUnit có thể chạy từng kiểm thử đơn vị riêng lẻ.

Điều này cho phép bộ điều khiển và cơ sở hạ tầng lớn hơn tận dụng khả năng kiểm soát tinh vi đó và người dùng có thể chạy một phần trình chạy kiểm thử thông qua tính năng lọc.

Hỗ trợ lọc được mô tả trong giao diện ITestFilterReceiver, cho phép nhận các bộ lọc includeexclude cho các chương trình kiểm thử nên hoặc không nên chạy.

Quy ước của chúng tôi là một kiểm thử sẽ chạy nếu và chỉ khi kiểm thử đó khớp với một hoặc nhiều bộ lọc bao gồm VÀ không khớp với bất kỳ bộ lọc loại trừ nào. Nếu không có bộ lọc bao gồm nào được cung cấp, tất cả các chương trình kiểm thử sẽ được chạy miễn là không khớp với bất kỳ bộ lọc loại trừ nào.