Bazel có một lệnh con coverage để tạo báo cáo về mức độ sử dụng mã trên các kho lưu trữ có thể được kiểm thử bằng bazel coverage. Do đặc thù của các hệ sinh thái ngôn ngữ khác nhau, nên việc thực hiện điều này cho một dự án cụ thể không phải lúc nào cũng đơn giản.
Trang này ghi lại quy trình chung để tạo và xem báo cáo về mức độ phù hợp, đồng thời cũng có một số ghi chú dành riêng cho ngôn ngữ đối với những ngôn ngữ có cấu hình đã biết. Bạn nên đọc phần chung trước, sau đó đọc về các yêu cầu đối với một ngôn ngữ cụ thể.
Mặc dù có thể tuỳ chỉnh nhiều, nhưng tài liệu này tập trung vào việc tạo và sử dụng báo cáo lcov. Đây hiện là phương thức được hỗ trợ tốt nhất.
Tạo báo cáo mức độ phù hợp
Chuẩn bị
Quy trình làm việc cơ bản để tạo báo cáo về mức độ phù hợp yêu cầu những điều sau:
- Một kho lưu trữ cơ bản có các mục tiêu kiểm thử
- Một chuỗi công cụ đã cài đặt các công cụ đo lường mức độ sử dụng mã dành riêng cho ngôn ngữ
- Cấu hình "đo lường" chính xác
Hai loại trước đây là ngôn ngữ cụ thể và hầu hết đều đơn giản, tuy nhiên, loại sau có thể khó hơn đối với các dự án phức tạp.
Trong trường hợp này, "đo lường" đề cập đến các công cụ đo lường mức độ phù hợp được dùng cho một mục tiêu cụ thể. Bazel cho phép bật tính năng này cho một nhóm nhỏ tệp cụ thể bằng cách sử dụng cờ --instrumentation_filter. Cờ này chỉ định một bộ lọc cho các mục tiêu được kiểm thử khi bật tính năng đo lường. Để bật tính năng đo lường cho các kiểm thử, bạn cần có cờ --instrument_test_targets.
Theo mặc định, bazel sẽ cố gắng so khớp(các) gói mục tiêu và in bộ lọc có liên quan dưới dạng thông báo INFO.
Phạm vi chạy
Để tạo báo cáo phạm vi lập chỉ mục, hãy sử dụng bazel coverage
--combined_report=lcov
[target]. Thao tác này sẽ chạy các kiểm thử cho mục tiêu, tạo báo cáo về mức độ phù hợp ở định dạng lcov cho từng tệp.
Sau khi hoàn tất, bazel sẽ chạy một thao tác thu thập tất cả các tệp mức độ phù hợp đã tạo và hợp nhất các tệp đó thành một tệp. Sau đó, tệp này sẽ được tạo trong $(bazel info
output_path)/_coverage/_coverage_report.dat.
Báo cáo mức độ phù hợp cũng được tạo nếu các kiểm thử không đạt, mặc dù lưu ý rằng điều này không mở rộng sang các kiểm thử không đạt – chỉ các kiểm thử đạt mới được báo cáo.
Xem tin tức
Báo cáo mức độ phù hợp chỉ được xuất ở định dạng lcovkhông đọc được. Từ đó, chúng ta có thể sử dụng tiện ích genhtml (thuộc dự án lcov) để tạo báo cáo có thể xem trong trình duyệt web:
genhtml --branch-coverage --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"
Xin lưu ý rằng genhtml cũng đọc mã nguồn để chú thích phần còn thiếu trong các tệp này. Để hoạt động, dự kiến genhtml sẽ được thực thi ở gốc của dự án bazel.
Để xem kết quả, hãy mở tệp index.html được tạo trong thư mục genhtml bằng bất kỳ trình duyệt web nào.
Để được trợ giúp và biết thêm thông tin về công cụ genhtml hoặc định dạng phạm vi lcov, hãy xem dự án lcov.
Cấu hình theo ngôn ngữ cụ thể
Các phần sau đây trình bày chi tiết những điểm cần cân nhắc theo từng ngôn ngữ để thiết lập mức độ sử dụng mã bằng Bazel.
C++
Linux
Độ bao phủ C++ sẽ hoạt động ngay khi bạn sử dụng cấu hình mặc định.
macOS
Giá trị mặc định của GCOV_PREFIX_STRIP gần như chắc chắn là không chính xác và bạn cần điều chỉnh theo cách thủ công vì giá trị chính xác phụ thuộc vào chế độ thiết lập của bạn.
Khi giá trị không chính xác, hệ thống sẽ không tìm thấy dữ liệu về mức độ phù hợp.
Ví dụ về cách đặt GCOV_PREFIX_STRIP=10
bazel coverage //foo:foo_test --test_env=GCOV_PREFIX_STRIP=10`
Java
Java sẽ hoạt động ngay khi xuất xưởng với cấu hình mặc định. Chuỗi công cụ bazel chứa mọi thứ cần thiết cho quá trình thực thi từ xa, cũng như JUnit.
Python
Hãy xem rules_pythontài liệu về phạm vi để biết các bước bổ sung cần thiết để bật tính năng hỗ trợ phạm vi trong Python.