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

Báo cáo vấn đề Xem nguồn Hằng đêm · 7,3 · 7.2 · 7.1 · 7 · 6,5

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