[Jenkins] 在 Jenkins 任務中呈現程式碼覆蓋率 (code coverage)
今天想要建立一個 Jenkins 任務,
讓它可以在執行單位測試的同時,
順便把程式碼覆蓋率 (code coverage) 算出來~
1. 產生 coverage xml 檔
首先,利用 coverage 這個 Python 模組,
在我們使用 pytest 執行單位測試時,讓 coverage 一邊記錄被執行到的部分,
最後將結果輸出到 cov_common.xml 檔:
import coverage cov = coverage.coverage(source=("/project",), omit=["tool/*", "3rd_party/*", "unittest/*"]) cov.start() pytest.main(args=args) cov.stop() cov.save() cov.xml_report(outfile="cov_common.xml")
2. 在 Jenkins 中顯示 Code Coverage
在 Jenkins 任務中的「建置後動作」,
新增一個 Publish Cobertura Coverage Report 動作,
把 xml 的路徑輸入就行囉:
當 Jenkins 任務執行時,就可以看到 Coverage report:
點進去的話,可以看到一個概述,
可以知道整體以及個別 package 的程式碼覆蓋率:
再點進去就是每個 python 模組的覆蓋率:
再點下去,就會將每個模組的程式碼直接列出,
綠色的部分代表有被單元測試執行過至少一次,
紅色的部分沒有被執行過:
從程式碼列表中,我們可以找出單元測試沒有涵蓋的範圍,
增加不同的單元測試,確保每行程式都盡可能有被測試到~
當然覆蓋率越高時,並不能代表所有的執行路徑都被執行過,
但覆蓋率過低時,的確代表有非常多地方是可能有未知的隱藏錯誤的。
因此還是會想要將覆蓋率拉高到一定程度囉 (像是 80% 以上)~
(本頁面已被瀏覽過 959 次)