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

Báo cáo sự cố Xem nguồn

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.
  • 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--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.