Bazel có một lệnh con coverage
để tạo báo cáo mức độ sử dụng mã trên các kho lưu trữ có thể kiểm thử bằng bazel coverage
. Do sự đa dạng của các hệ sinh thái ngôn ngữ khác nhau, không phải lúc nào bạn cũng có thể làm việc này cho một dự án nhất định.
Trang này trình bày quy trình chung để tạo và xem các báo cáo phạm vi, đồng thời giới thiệu một số ghi chú dành riêng cho ngôn ngữ của những ngôn ngữ có cấu hình nổi tiếng. Tốt nhấ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ể. Ngoài ra, xin lưu ý rằng phần thực thi từ xa sẽ cần lưu ý thêm một số phần.
Mặc dù có thể tuỳ chỉnh nhiều, nhưng tài liệu này vẫn tập trung vào việc tạo và sử dụng các báo cáo lcov
, hiện là tuyến đường đượ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 phạm vi bao gồm:
- Kho lưu trữ cơ bản có các mục tiêu thử nghiệm
- Chuỗi công cụ có cài đặt các công cụ sử dụng mã theo ngôn ngữ cụ thể
- Cấu hình "thiết bị" chính xác
Hai định dạng trước là dành riêng cho từng ngôn ngữ và chủ yếu là đơn giản, tuy nhiên phần sau có thể khó khăn hơn cho các dự án phức tạp.
"Công cụ đo lường" trong trường hợp này là các công cụ xác định 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 tập hợp con các tệp cụ thể bằng cách sử dụng cờ --instrumentation_filter
. Thao tác này sẽ chỉ định bộ lọc cho các mục tiêu được kiểm thử khi bật chức năng đo lường. Để bật tính năng đo lường, bạn cần có cờ --instrument_test_targets
.
Theo mặc định, bazel cố gắng khớp với(các) gói mục tiêu và in bộ lọc liên quan dưới dạng thông báo INFO
.
Phạm vi chạy
Để tạo báo cáo về mức độ phù hợp, hãy sử dụng bazel coverage
--combined_report=lcov
[target]
. Thao tác này sẽ chạy các bài kiểm thử cho mục tiêu, tạo báo cáo 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 hành động thu thập tất 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 đó được tạo trong $(bazel info
output_path)/_coverage/_coverage_report.dat
.
Báo cáo về mức độ phù hợp cũng được tạo ra nếu các kiểm thử không đạt, mặc dù lưu ý rằng phạm vi này không mở rộng sang các kiểm thử không đạt – mà chỉ báo cáo các kiểm thử đạt.
Phạm vi xem
Báo cáo phạm vi bao phủ chỉ được xuất ở định dạng lcov
không thể đọc được. Từ đó, chúng ta có thể sử dụng tiện ích genhtml
(một phần của dự án lcov) để tạo báo cáo có thể xem được trong trình duyệt web:
genhtml --branch-coverage --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"
Vui lòng lưu ý genhtml
cũng đọc mã nguồn để chú thích mức độ phù hợp bị thiếu trong các tệp này. Để làm được việc này, dự kiến genhtml
sẽ được thực thi trong thư mục gốc của dự án bazel.
Để xem kết quả, bạn chỉ cần mở tệp index.html
được tạo trong thư mục genhtml
trong trình duyệt web bất kỳ.
Để được trợ giúp và cung cấp 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.
Thực thi từ xa
Việc chạy bằng tính năng thực thi thử nghiệm từ xa hiện có một số lưu ý:
- Hành động kết hợp báo cáo chưa thể chạy từ xa. Điều này là do Bazel không coi các tệp đầu ra bao phủ là một phần của biểu đồ (xem vấn đề này) và do đó không thể xem chính xác các tệp này làm dữ liệu đầu vào cho hành động kết hợp. Để giải quyết vấn đề này, hãy sử dụng
--strategy=CoverageReport=local
.- Lưu ý: Có thể bạn cần chỉ định một số nội dung như
--strategy=CoverageReport=local,remote
, nếu Bazel được thiết lập để thửlocal,remote
, do cách Bazel giải quyết các chiến lược.
- Lưu ý: Có thể bạn cần chỉ định một số nội dung như
- Bạn cũng không thể sử dụng
--remote_download_minimal
và các cờ tương tự do các phương thức trước đó. - Bazel hiện sẽ không thể tạo thông tin về phạm vi bao phủ nếu các kiểm thử
đã được lưu vào bộ nhớ đệm trước đó. Để giải quyết vấn đề này,
--nocache_test_results
có thể được thiết lập riêng cho các lần chạy mức độ phù hợp, mặc dù việc này tất nhiên sẽ tốn nhiều chi phí về thời gian kiểm thử. --experimental_split_coverage_postprocessing
và--experimental_fetch_all_coverage_outputs
- Thông thường, phạm vi bao phủ được chạy như một phần của hành động thử nghiệm. Vì vậy, theo mặc định, chúng tôi sẽ không thu thập tất cả phạm vi dưới dạng dữ liệu đầu ra của quá trình thực thi từ xa. Những cờ này ghi đè giá trị mặc định và lấy dữ liệu về độ bao phủ. Hãy xem vấn đề này để biết thêm thông tin.
Cấu hình theo ngôn ngữ
Java
Java sẽ hoạt động tốt với cấu hình mặc định. Chuỗi công cụ Bazel cũng chứa mọi thứ cần thiết để thực thi từ xa, bao gồm cả JUnit.
Python
Xem tài liệu về mức độ phù hợp của rules_python
để biết các bước bổ sung cần thiết để bật tính năng hỗ trợ mức độ phù hợp trong Python.