Linux下lcov單元測試覆蓋率

鋱可喏發表於2019-01-12

    書接上文,要想保持測試的完整性,需要將gtest與lcov配合使用,方能更好地測試原始碼的質量。

一、下載lcov原始碼

原始碼下載連結:https://sourceforge.net/projects/ltp/files/Coverage%20Analysis/LCOV-1.13/

 

二、解壓原始碼

進入到解壓資料夾,執行命令“make install”安裝lcov

 

三、編譯中增加編譯引數:-fprofile-arcs -ftest-coverage

(注意:這裡是兩個引數,分別是:-fprofile-arcs 和 -ftest-coverage)

編譯後, 會為每個原始檔生成.gcno結尾的檔案。

四、編譯後執行可執行程式./run_test

執行後,會為每個原始檔,生成gcda結尾的檔案。

 

五、使用lcov收集統計資料做成圖形化顯示的的資料,可用於分析測試覆蓋率

lcov -c -o test.info -d .

 

-c  :捕捉覆蓋率資料
-d  :表示的是目錄,也就是gcno和gcda目錄。使用lcov統計覆蓋率,必須將gcno和gcda放在同一個目錄,並且有原始碼,且原始碼的目錄和編譯時的目錄一樣,否則不能生成。
-o  :表示輸出檔案,以.info結尾,用來儲存資料

六、lcov檔案過濾

    某些情況下,需要遮蔽第三方庫的覆蓋率計算或者只統計某個資料夾下的覆蓋率計算,就需要用到lcov的檔案過濾功能。 

  • 移除制定目錄

       需要用到--remove引數,以刪除include目錄下所有檔案資訊為例 :

     lcov --remove all.info '*/include/*' '' -o result.info

      all.info  總的覆蓋率資訊     result.info 篩選後的覆蓋率資訊

  • 篩選固定目錄

       需要用到--extract引數,以指定samples目錄為例:

       lcov --extract all.info '*/samples/*' -o result.info

     all.info  總的覆蓋率資訊     result.info 篩選後的覆蓋率資訊

 

七、獲取html檔案視覺化輸出

genhtml test.info -o output/ 

output是一個目錄,index.html為導航檔案,使用 web 瀏覽器開啟 index.html 檔案檢視程式碼覆蓋結果。可看到各個資料夾下原始碼檔案的測試覆蓋率,以下是篩選了排除“*/include/*”目錄下檔案的測試覆蓋率資訊:

點選進去,可看到各個檔案被測試的覆蓋率情況,點選到檔案中,每個檔案中哪一行測試到,哪一行沒有測試到。

 

相關文章