2017年1月14日 星期六

[iThome第8屆鐵人賽 18]OpenCover 結果 - html結果產生篇

在上篇了解到了測試涵蓋率的計算方式之後,已經可以了解xml報告的一些數字所代表的意思。

但是,xml畢竟不是那麼容易讀得懂,並且也不容易看出到底那些地方沒有測試到。

在這篇,將會介紹如何把xml結果產生出html結果,並且如何使用。

ReportGenerator - html結果產生工具

ReportGerator

能夠把多種coverage工具的xml結果產生html格式,其中就有包括open cover的格式

build script調整

基本上有以下幾個地方要調整:

  1. 把ReportGenerator安裝到build專案
  2. 在測試執行完的時候產生結果

安裝ReportGenerator

透過nuget先安裝ReportGenerator,再來在default.ps1裡面,建立一個property是代表reportGenerator的工具:

Properties{
....
$reportGeneratorExe = (Get-PackagePath $packageDirectoryPath "ReportGenerator") +
   "\tools\ReportGenerator.exe"
....
}  
  

在測試執行完成產生html結果

再來,有一個Test的task,這個task其實是在3個測試framework執行完才會執行。

因此可以在這邊多一個判斷,如果有產生出Coverage的xml的時候,在執行ReportGenerator。

這個Generator執行起來很容易,只需要傳入兩個參數:

  • openCover xml結果的路徑
  • 產生的html要放的路徑

因此整個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
}

html結果介紹

當在執行build的時候,會在.\testCoverage裡面多出很多檔案,其中最重要的檔案就是Index.htm

如果把Index.htm執行起來,可以看到結果的總覽。

結果總覽

在index.htm的上半部,是整個結果的總覽。其中有個部分要注意的是,裡面用了Line Coverage這個詞,但是其實這邊指的是Sequence Point Coverage(在報告其他地方也是同理)

image
可以看到整個測試涵蓋率

Assembly執行結果

在Index.htm的下面則是Assembly執行的總覽,可以簡單看到那些涵蓋率是多少。

這邊有幾個可以使用的地方:

  1. Grouping - 可以切換如何group結果,只要用左右拖拉即可
  2. 排序 - 每一個表頭的三角形可以點做排序
  3. Filter - 可以過濾要看哪一個

image
Assembly總覽

Assembly詳細

如果選一個assembly,可以點進去看到底那邊有cover到,那邊沒有。

下面的例子是我們唯一有寫測試的地方,這個報告還會highlight出,那邊是測試點。如果沒涵蓋,會用紅色標註

image
Assembly詳細

其他呈現方式

ReportGenerator產生的html其實非常詳細,用來看結果其實非常容易發現沒測試到的地方。

不過或許會好奇還有沒有其他使用OpenCover的xml結果的方式,其實還有兩個地方:

  1. Coveralls - 如果有希望在網路上給大家看到測試涵蓋率,可以使用Coveralls這個網站服務 - 可以把這個整合到build script裡面,自動把結果發佈到上面
  2. OpenCover UI - VS 套件 - 這個是開發的時候可以使用的,能夠在VS工具裡面直接看到那段程式碼有沒有涵蓋,類似於VS 高版本裡面的Coverage工具呈現的樣子。

結語

透過這篇,對於測試涵蓋率和測試碼品質如何保證有個概念。

接下來會來看看另外一個角度來保證程式碼品質,也就是透過程式碼分析的方式來達到。


沒有留言 :

張貼留言