Viết một người chạy thử Tradefed

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

Lý lịch

Nếu bạn tò mò về vị trí của người chạy thử nghiệm trong kiến ​​trúc Tradefed, hãy xem Cấu trúc của người chạy thử nghiệm .

Đây không phải là điều kiện tiên quyết để viết một chương trình chạy thử mới; người chạy thử có thể được viết riêng biệt.

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

Điều kiện tối thiểu để đủ điều kiện trở thành người chạy thử nghiệm Tradefed là 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 bộ khai thác gọi ra khi sử dụng trình chạy thử, tương tự như Java Runnable.

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

Báo cáo kết quả từ người chạy thử

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

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

  • Báo cáo danh sách thích hợp về tất cả các bài kiểm tra đã chạy, thời gian thực hiện và liệu chúng có vượt qua, thất bại hay một số trạng thái khác hay không.
  • Báo cáo các số liệu liên quan đến các thử nghiệm nếu có, ví dụ như các số liệu 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ụ như hiển thị kết quả và số liệu, v.v.
  • Thường dễ gỡ lỗi hơn vì có dấu vết thực thi chi tiết hơn.

Điều đó có nghĩa là việc báo cáo kết quả có cấu trúc là tùy chọn; người chạy 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 THẤT BẠI mà không có bất kỳ chi tiết nào về quá trình thực thi thực tế.

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

  • testRunStarted: Thông báo sự bắt đầu của một nhóm các trường hợp thử nghiệm có liên quan với nhau.
    • testStarted: Thông báo bắt đầu một test case đang bắt đầu.
    • testFailed/testIgnored: Thông báo sự thay đổi trạng thái của test case đang diễn ra. Một ca kiểm thử không có bất kỳ thay đổi trạng thái nào được coi là đã đạt.
    • testEnded: Thông báo kết thúc test case.
  • testRunFailed: Thông báo rằng trạng thái chung của nhóm thực hiện các trường hợp kiểm thử là thất bại. Một lần chạy thử nghiệm có thể đạt hoặc không thành công , độc lập với kết quả của các trường hợp thử nghiệm , tùy thuộc vào những gì quá trình thực thi mong đợi. 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ả cá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 test case.

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 thử nghiệm, ví dụ như đảm bảo rằng testRunEnded được gọi trong trường hợp ngoại lệ sử dụng mệnh đề finally .

Lệnh gọi lại trường hợp thử nghiệm ( testStarted , testEnded , v.v.) là tùy chọn. Việc chạy thử nghiệm có thể diễn ra mà không có bất kỳ trường hợp thử nghiệm 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 điển hình . Điều này nhằm mục đích giữ mọi thứ gần với những điều cơ bản mà các nhà phát triển thường có kiến ​​thức.

Báo cáo nhật ký từ người chạy thử

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

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

Kiểm tra bằng một thiết bị

Giao diện tối thiểu ở trên cho phép chạy các thử nghiệm 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ụ như các thử nghiệm đơn vị Java.

Người viết bài kiểm tra muốn chuyển sang bước tiếp theo của quá trình kiểm tra thiết bị sẽ cần 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 thử nghiệm và cung cấp API để tương tác với nó.
  • IBuildReceiver cho phép thử nghiệm lấy đối tượng IBuildInfo được tạo ở bước nhà cung cấp bản dựng chứa tất cả thông tin và tạo phẩm liên quan đến thiết lập thử nghiệm.

Những người chạy thử nghiệm thường quan tâm đến các giao diện này để có được các thành phần lạ 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ị được thử nghiệm sẽ được nhắm mục tiêu trong quá trình thực thi.

Kiểm tra với nhiều thiết bị

Tradefed hỗ trợ chạy thử nghiệm trên nhiều thiết bị cùng lúc. Điều này rất hữu ích khi kiểm tra 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 một chương trình chạy thử có thể sử dụng nhiều thiết bị, bạn sẽ cần phải triển khai IMultiDeviceTest , điều này sẽ cho phép nhận bản đồ của ITestDevice tới IBuildInfo chứa danh sách đầy đủ các biểu diễn thiết bị và thông tin bản dựng liên quan của chúng.

Trình thiết lập từ giao diện sẽ luôn được gọi trước phương thức run , vì vậy có thể giả định rằng cấu trúc sẽ có sẵn khi run được gọi.

Các thử nghiệm nhận thức được thiết lập của họ

Một số triển khai trình chạy thử nghiệm có thể cần thông tin về thiết lập tổng thể để hoạt động chính xác, ví dụ: 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, người chạy thử nghiệm có thể truy cập vào đối tượng IConfiguration mà nó là một phần và được thực thi trong đó. Xem mô tả đối tượng cấu hình để biết thêm chi tiết.

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

Người chạy thử linh hoạt

Người chạy thử nghiệm có thể cung cấp một cách linh hoạt để chạy thử nghiệm nếu họ có quyền kiểm soát chi tiết đối với chúng, ví dụ: người chạy thử nghiệm JUnit có thể chạy riêng từng thử nghiệm đơn vị.

Điều này cho phép khai thác và cơ sở hạ tầng lớn hơn để tận dụng khả năng kiểm soát tốt đó và người dùng chạy một phần trình chạy 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ộ bộ lọc includeexclude cho các thử nghiệm nên hoặc không nên chạy.

Quy ước của chúng tôi là một thử nghiệm sẽ được chạy IFF, nó 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 thì tất cả các thử nghiệm sẽ được chạy miễn là chúng không khớp với bất kỳ bộ lọc loại trừ nào.