使用 Bazel 涵蓋程式碼

回報問題 查看來源 夜間 7.2 7.1 7.0 6.5 6.4

Bazel 具有 coverage 子指令,藉此產生程式碼涵蓋率 可針對可以使用 bazel coverage 測試的存放區製作報表。應付款項 這些語言生態系統的慣用語言 為指定專案完成這項工作

本頁說明一般建立及檢視的一般程序 涵蓋範圍報表,並列出 並且設定大家都知道的語言。最好先閱讀 參閱一般部分, 請參閱特定語言的相關規定同時請注意 遠端執行一節,需要 其他事項。

雖然您有許多自訂選項,但本文重點放在 必須產生及使用 lcov 報表 是最完備的路線

建立涵蓋率報表

準備

建立涵蓋率報表的基本工作流程需要 包括:

  • 具有測試目標的基本存放區
  • 已安裝特定語言程式碼涵蓋率工具的工具鍊
  • 正確的「檢測服務」設定

前者會特別指定語言,且最易於理解。 但前者對複雜的專案而言可能比較困難。

「Instrumentation」在本例中是涵蓋範圍工具 特定指標Bazel 允許您針對 編碼器-解碼器架構 --instrumentation_filter 標記,指定套用該目標的篩選器 檢測功能已啟用。如要啟用測試檢測, --instrument_test_targets 旗標

根據預設,bazel 會嘗試比對目標套件,然後將 將相關篩選器視為 INFO 訊息。

執行涵蓋率

如要產生涵蓋率報表,請使用 bazel coverage --combined_report=lcov [target]。這會執行 測試目標,以 lcov 格式產生涵蓋範圍報表 。

完成後,bazel 會執行一項動作來收集所有產生的 壓縮檔案,合併成一個檔案 建立於 $(bazel info output_path)/_coverage/_coverage_report.dat 下。

如果測試失敗,系統也會產生涵蓋率報表 這不會套用至失敗的測試,只有通過的測試 。

查看涵蓋率

涵蓋率報表只能以非人類可讀的lcov輸出 格式。接著,我們可以使用 genhtml 公用程式 (Lcov 的一部分 專案) 產生並顯示在網頁版服務中的報表 瀏覽器:

genhtml --branch-coverage --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"

請注意,genhtml 也會讀取原始碼,為缺少的註解加上註解 涵蓋範圍。為了達到這個目的,我們認為 genhtml 會在 bazel 專案的根目錄中執行。

如要查看結果,只需開啟index.html genhtml 目錄。

如需 genhtml 工具的進一步協助和資訊,或 lcov 涵蓋範圍格式,請參閱 lcov 專案

遠端執行

透過遠端測試執行作業執行目前有一些注意事項:

  • 報表組合動作目前無法遠端執行。這是 因為 Bazel 不會將涵蓋率輸出檔案納入考量 圖表 (請參閱這個問題), 未正確當做組合動作的輸入值。目的地: 解決該問題,請使用 --strategy=CoverageReport=local
    • 注意: 您可能需要指定 如果已設定 Bazel,請改為使用 --strategy=CoverageReport=local,remote 最多嘗試 local,remote,因為 Bazel 會解析策略。
  • 您也無法再使用 --remote_download_minimal 和類似標記 版本。
  • 如果執行測試,Bazel 目前就無法建立涵蓋率資訊 代表之前已快取過如要解決這個問題 --nocache_test_results您可以為涵蓋率 但這當然需要投入大量的測試成本。
  • --experimental_split_coverage_postprocessing」和 --experimental_fetch_all_coverage_outputs
    • 通常涵蓋率是測試動作的一部分,因此 在預設情況下,我們無法將所有覆蓋率恢復為遙控器的輸出內容 預設執行這些旗標會覆寫預設值 涵蓋範圍資料。詳情請參閱這個問題 詳細資料。

特定語言設定

Java

Java 應採用預設設定,立即運作。 bazel 工具鍊包含 遠端執行,包括 JUnit

Python

請參閱 rules_python 保固文件 以執行 Python 支援涵蓋範圍支援所需的額外步驟。