在上篇瞭解到了測試涵蓋率的計算方式之後,已經可以瞭解xml報告的一些數字所代表的意思。
但是,xml畢竟不是那麼容易讀得懂,並且也不容易看出到底那些地方沒有測試到。
在這篇,將會介紹如何把xml結果產生出html結果,並且如何使用。
sample 程式在 github devops-psake sample/chapter18
同步發表於我的部落格:http://blog.alantsai.net/2017/01/devopsSeries-opencover-generateHtmlResult.html (部落格的格式會漂亮一些)
ReportGerator
能夠把多種coverage工具的xml結果產生html格式,其中就有包括open cover的格式
Nuget - https://www.nuget.org/packages/ReportGenerator/
Nuget 安裝指令 - Install-Package ReportGenerator
Github - https://github.com/danielpalme/ReportGenerator
基本上有以下幾個地方要調整:
透過nuget先安裝ReportGenerator,再來在default.ps1裡面,建立一個property是代表reportGenerator的工具:
Properties{
....
$reportGeneratorExe = (Get-PackagePath $packageDirectoryPath "ReportGenerator") +
"\tools\ReportGenerator.exe"
....
}
再來,有一個Test的task,這個task其實是在3個測試framework執行完才會執行。
因此可以在這邊多一個判斷,如果有產生出Coverage的xml的時候,在執行ReportGenerator。
這個Generator執行起來很容易,只需要傳入兩個參數:
因此整個task變成:
task Test -depends Compile, Clean, XunitTest, NunitTest, MSTest -description "執行Test" {
if(Test-Path $openCoverResult){
Write-Host "`r`n產生測試涵蓋率報告 html 格式"
exec{ &$reportGeneratorExe $openCoverResult $buildTestCoverageDirectory}
} else {
Write-Host "`r`n沒有產生測試涵蓋率報告"
}
Write-Host $testMsg
}
當在執行build的時候,會在.\testCoverage裡面多出很多檔案,其中最重要的檔案就是Index.htm
如果把Index.htm執行起來,可以看到結果的總覽。
在index.htm的上半部,是整個結果的總覽。其中有個部分要注意的是,裡面用了Line Coverage這個詞,但是其實這邊指的是Sequence Point Coverage(在報告其他地方也是同理)
在Index.htm的下面則是Assembly執行的總覽,可以簡單看到那些涵蓋率是多少。
這邊有幾個可以使用的地方:
如果選一個assembly,可以點進去看到底那邊有cover到,那邊沒有。
下面的例子是我們唯一有寫測試的地方,這個報告還會highlight出,那邊是測試點。如果沒涵蓋,會用紅色標註
ReportGenerator產生的html其實非常詳細,用來看結果其實非常容易發現沒測試到的地方。
不過或許會好奇還有沒有其他使用OpenCover的xml結果的方式,其實還有兩個地方:
透過這篇,對於測試涵蓋率和測試碼品質如何保證有個概念。
接下來會來看看另外一個角度來保證程式碼品質,也就是透過程式碼分析的方式來達到。