Mức độ sử dụng mã với Bazel

7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel có một lệnh con coverage để tạo báo cáo mức độ sử dụng mã trên những kho lưu trữ có thể kiểm thử bằng bazel coverage. Do những đặc điểm đặc trưng 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 nhất định 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 mức độ sử dụng, đồng thời cung cấp 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 phổ biến. Tốt nhất là 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, hãy lưu ý đến phần thực thi từ xa, phần này cần cân nhắc thêm một số yếu tố.

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 là tuyến đường được hỗ trợ tốt nhất hiện nay.

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 yêu cầu những điều sau:

  • Kho lưu trữ cơ bản có mục tiêu kiểm thử
  • Chuỗi công cụ đã cài đặt các công cụ đo lường mức độ sử dụng mã theo ngôn ngữ
  • Cấu hình "thiết bị đo lường" chính xác

2 phần tử trước đều theo ngôn ngữ cụ thể và gần như đơn giản, tuy nhiên, phần sau có thể khó 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ụ đo lường phạm vi sử 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 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 chương trình 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.

Mức độ phù hợp đang 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 chương trình kiểm thử cho mục tiêu, tạo báo cáo mức độ sử dụng mã nguồn ở định dạng lcov cho mỗi tệp.

Sau khi hoàn tất, bazel chạy một thao tác thu thập tất cả các tệp mức độ che phủ đã tạo và hợp nhất các tệp đó thành một. Sau đó, tệp này cuối cùng sẽ đượ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 đạt, mặc dù lưu ý rằng điều này không áp dụng cho các kiểm thử không đạt – chỉ các kiểm thử đạt mới được báo cáo.

Phạm vi xem

Báo cáo mức độ sử dụng chỉ xuất ra ở đị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 trong trình duyệt web:

genhtml --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 mức độ phù hợp bị thiếu trong các tệp này. Để tính năng này hoạt động, 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 trên trình duyệt web bất kỳ.

Để được trợ giúp thêm và xem thêm thông tin về công cụ genhtml hoặc định dạng mức độ sử dụng lcov, hãy xem bài viết 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:

  • Bạn chưa thể chạy hành động kết hợp báo cáo từ xa. Lý do là 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 đồ (xem vấn đề này), do đó, không thể coi các tệp này là dữ liệu đầu vào chính xác cho thao tác kết hợp. Để giải quyết vấn đề này, hãy sử dụng --strategy=CoverageReport=local.
    • Lưu ý: Bạn có thể cần chỉ định một giá trị như --strategy=CoverageReport=local,remote, nếu Bazel được thiết lập để thử local,remote, do cách Bazel phân giải các chiến lược.
  • --remote_download_minimal và các cờ tương tự cũng không thể được sử dụng do cờ trước đó.
  • Bazel hiện sẽ không tạo được thông tin về mức độ sử dụng nếu các chương trình kiểm thử đã được lưu vào bộ nhớ đệm trước đó. Để giải quyết vấn đề này, bạn có thể đặt --nocache_test_results dành riêng cho các lần chạy kiểm thử mức độ sử dụng mã, mặc dù điều này tất nhiên sẽ gây tốn kém về thời gian kiểm thử.
  • --experimental_split_coverage_postprocessing--experimental_fetch_all_coverage_outputs
    • Thông thường, mức độ sử dụng được chạy như một phần của hành động kiểm thử. Vì vậy, theo mặc định, chúng ta không lấy lại toàn bộ mức độ sử dụng dưới dạng kết quả của quá trình thực thi từ xa. Các cờ này sẽ ghi đè cờ mặc định và lấy dữ liệu phạm vi. Hãy xem vấn đề này để biết thêm thông tin 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. Chuỗi công cụ bazel chứa mọi thứ cần thiết cho quá trình thực thi từ xa, bao gồm cả JUnit.

Python

Hãy xem tài liệu về mức độ sử dụng rules_python để biết thêm các bước cần thiết nhằm bật tính năng hỗ trợ mức độ sử dụng trong Python.