C++單元測試(11) - OpenCppCoverage可視化單元測試的覆蓋率, Jenkins顯示Report
¶C++單元測試(11) - OpenCppCoverage可視化單元測試的覆蓋率, Jenkins顯示Report
原文連結: https://darkblack01.blogspot.com/2015/12/c11-opencppcoverage-jenkinsreport.html
移植時的最後更新日期: 2015-12-23T14:16:57.621+08:00
這一次,我們來討論一下,如何將unit test的成果可視化,也就是常見的覆蓋率(Coverage rate)。
我們採用的環境如下
Visual Studio
這樣一來,在Visual Studio寫好的code提交到git後,Jenkins會輪詢git,若改版就抓一版過來;li 呼叫MSBuild編譯,編譯好就編譯CppUnit,然後執行CppUnit編好的執行檔,產生單元測試的Report,之後再執行cppcheck,產生Report,最後執行這一次的主角OpenCppCoverage,產生Report。
條列式的呈現,如下
- Visual Studio寫好的code提交到git後
- Jenkins會輪詢git,若改版就抓一版過來
- 呼叫MSBuild編譯主程式+編譯CppUnit
- 執行CppUnit編好的執行檔,產生單元測試的Report
- 執行cppcheck,產生Report
- 執行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 <其它編譯完, 編譯器幫你用到的檔案路徑>
– <單元測試達行檔>
發表於