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