Trang này mô tả cách viết trình chạy kiểm thử mới trong Tradefed.
Nền
Nếu bạn tò mò về vị trí của trình chạy kiểm thử trong kiến 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 riêng biệt.
Mức tối thiểu: Triển khai giao diện
Mức tối thiểu để đủ điều kiện là trình chạy kiểm thử 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 khung kiểm thử 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ở cho phép 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ử cho khung kiểm thử.
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 chính xác của tất cả các kiểm thử đã chạy, thời gian chạy và liệu từng kiểm thử có đạt, không đạt hay ở một số trạng thái khác hay không.
- Báo cáo các chỉ số liên quan đến kiểm thử (nếu có), ví dụ: 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à 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ó 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 khung kiểm thử về tiến trình thực thi hiện tại:
- testRunStarted: Thông báo về thời điểm bắt đầu một nhóm kịch bản kiểm thử có liên quan với nhau.
- testStarted: Thông báo về thời điểm bắt đầu một kịch bản kiểm thử.
- testFailed/testIgnored: Thông báo về sự thay đổi trạng thái của kịch bản kiểm thử đang diễn ra. Kịch bản kiểm thử không có sự thay đổi trạng thái nào được coi là đạt.
- testEnded: Thông báo về thời điểm kết thúc kịch bản kiểm thử.
- testRunFailed: Thông báo rằng trạng thái tổng thể của quá trình thực thi nhóm kịch bản kiểm thử là không đạt. Lần chạy kiểm thử có thể là đạt hoặc không đạt độc lập với kết quả của kịch bản kiểm thử tuỳ thuộc vào những gì mà quá trình thực thi mong đợi. Ví dụ: một tệp nhị phân chạy một số kịch bản kiểm thử có thể báo cáo tất cả các kịch bản 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 về thời điểm kết thúc nhóm kịch bản kiểm thử.
Việc duy trì và đảm bảo thứ tự chính xác 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.
Các lệnh gọi lại của kịch bản kiểm thử (testStarted, testEnded, v.v.) là không bắt buộc. Lần chạy kiểm thử có thể diễn ra mà không có kịch bản kiểm thử nào.
Bạn có thể 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 một điều cơ bản mà nhà phát triển thường có kiến thức.
Báo cáo nhật ký từ trình chạy kiểm thử
Nếu đang viết lớp hoặc trình chạy kiểm thử 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(). Bạn có thể dùng trình nghe này để ghi lại 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 kiểm thử rất đơn giản, riêng 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.
Người viết kiểm thử muốn chuyển sang bước tiếp theo của kiểm thử 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 kiểm thử và cung cấp API để tương tác với thiết bị đó. - IBuildReceiver
cho phép kiểm thử nhận đố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à cấu phần phần mềm liên quan đến quá trình 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 để nhận cấu phần phần mềm liên quan đến quá trình thực thi, ví dụ: các tệp bổ sung và nhận 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ử bằng nhiều thiết bị
Tradefed hỗ trợ chạy kiểm thử trên nhiều thiết bị cùng một lúc. Điều này 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 cần
triển khai
IMultiDeviceTest,
giao diện này cho phép nhận bản đồ ITestDevice đến IBuildInfo chứa
danh sách đầy đủ các đại diện thiết bị và thông tin bản dựng được liên kết với 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, bạn có thể yên tâm rằng cấu trúc sẽ có sẵn khi run được gọi.
Kiểm thử nhận biết về quá trình 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ề quá trình thiết lập tổng thể để hoạt động đúng cách, ví dụ: một số siêu dữ liệu về lời gọi hoặc target_preparer đã 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à nó là một phần và được thực thi trong đó. Xem nội dung mô tả đối tượng cấu hình để biết thêm chi tiết.
Đối với việc 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 chúng, ví dụ: trình chạy kiểm thử JUnit có thể chạy riêng từng kiểm thử đơn vị.
Điều này cho phép khung kiểm thử và cơ sở hạ tầng lớn hơn tận dụng quyền kiểm soát chi tiết đó và người dùng chạy một phần trình chạy kiểm thử thông qua bộ lọc.
Tính năng hỗ trợ bộ lọc được mô tả trong
giao diện ITestFilterReceiver,
giao diện này cho phép nhận các tập hợp bộ lọc include và exclude cho các kiểm thử
nên hoặc không nên chạy.
Quy ước của chúng tôi là kiểm thử sẽ được chạy NẾU 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, thì tất cả các kiểm thử 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.