C++單元測試(11) - OpenCppCoverage可視化單元測試的覆蓋率, Jenkins顯示Report

這一次,我們來討論一下,如何將unit test的成果可視化,也就是常見的覆蓋率(Coverage rate)。

我們採用的環境如下
Visual Studio + git + CppUnit + Jenkins + OpenCppCoverage

這樣一來,在Visual Studio寫好的code提交到git後,Jenkins會輪詢git,若改版就抓一版過來;li 呼叫MSBuild編譯,編譯好就編譯CppUnit,然後執行CppUnit編好的執行檔,產生單元測試的Report,之後再執行cppcheck,產生Report,最後執行這一次的主角OpenCppCoverage,產生Report。

條列式的呈現,如下

  1. Visual Studio寫好的code提交到git後
  2. Jenkins會輪詢git,若改版就抓一版過來
  3. 呼叫MSBuild編譯主程式+編譯CppUnit
  4. 執行CppUnit編好的執行檔,產生單元測試的Report
  5. 執行cppcheck,產生Report
  6. 執行OpenCppCoverage,產生Report。

第六步,是我們今天討論的內容。

下載軟體

官方網站下載OpenCppCoverage。
安裝到Jenkins的主機上(可以先安裝在自己的電腦先測試,執行成功再裝在Jenkins的主機上)

準備Command

參考官網的文件,上面的訊息就足夠了。
自己本機測試,可以使用這樣的command
OpenCppCoverage --sources <souce code的路徑> -- <你的單元測試程式.exe> 
可以參考這篇,Jenkins上,則要這樣寫(加上--export_type=cobertura)
OpenCppCoverage --sources <souce code的路徑> --export_type=cobertura -- <你的單元測試程式.exe>

安裝Jenkins外掛

安裝Cobertura plugin

可能會遇到的問題

為什麼報表都沒有值?(Xml是空的?)

因為,需要.pdb檔。
建議使用debug模式編譯,因為除了.pdb檔本來就應該在debug模式產生之外,最好不要將code最佳化,造成無法辨別.pdb內容的情況。

所以,我在Jenkins上的設定,分別設定兩個job,一個是release編譯,一個是debug編譯。等debug編好,就執行unit test、coverage、static code analysis...,通通成功了,再編譯release。

實例

為了方便瀏覽,在此有用斷行,真正使用的指令,無需斷行,但是要加空白。
OpenCppCoverage --sources <產品程式碼路徑>
--excluded_sources <前置編譯路徑>
--excluded_sources <前置編譯.lib的.h檔 路徑>
--excluded_sources <單元測試路徑>
--excluded_sources <使用.dll, .lib檔的.h檔 路徑>
--excluded_sources <其它編譯完, 編譯器幫你用到的檔案路徑>
-- <單元測試達行檔>

沒有留言:

張貼留言

(什麼是留言欄訊息?)