【Jenkins】外掛套件:Emma(VSTest Runner plugin 延伸應用)

  在 Jenkins 中使用 VSTest Runner plugin 執行 Visual Studio 測試案例,可以由「終端機輸出」頁面查看測試結果。

  若是想要知道測試案例的程式碼涵蓋率,單純使用「終端機輸出」頁面是看不出個所以然的。

  在 Jenkins 中使用 Emma plugin 顯示程式碼涵蓋率報告。

1、環境配置

1.1 VSTest Runner plugin

  VSTest Runner plugin 可以設定產出一份關於此次測試程式碼涵蓋率的 coverage 檔案,在 Jenkins 伺服器主機上安裝並設定符合開發環境的 VSTest Runner plugin(可參考小弟文章:【Jenkins】外掛套件:VSTest Runner)。

2、Jenkins 套件管理

  由 Jenkins 主畫面依序點選「管理 Jenkins」 → 「管理外掛程式」,進入「Jenkins 套件」管理頁面。

01:Jenkins_Plugin_Manager

2.1 安裝 Emma plugin

  點選「可用的」頁籤,輸入過濾條件「Emma」,選取【Emma】並按下【下載並於重新啟動後安裝】。

套件安裝有【直接安裝】與【下載並於重新啟動後安裝】兩種選擇。【下載並於重新啟動後安裝】是比較安全的做法,可避免工作正在執行時套件被更新而造成錯誤。

02:Filter_Emma_Plugin

  套件安裝過程中會將相依套件一併載入安裝,安裝完成後顯示「下載成功。下次啟動後就會生效。」。

  當套件與相依套件全部下載完成後,按下【當安裝完成且沒有工作正在執行時,重啟 Jenkins】重新啟動 Jenkins。

03:Emma_Plugin_Install

3、工作組態設定

  由 Jenkins 主畫面依序點選「Lab.Jenkins_VisualStudio」(前面新增的工作名稱) → 「組態」,進入「工作組態」設定頁面。

3.1 建置:產出 coverage 檔案

  設定 VSTest Runner plugin 產出一份關於此次測試程式碼涵蓋率的 coverage 檔案。

  點選「建置」頁籤,在【Run unit tests with VSTest.console】中選取「Enable Code Coverage」。

04:Job_Configure_Setting_VSTestRunner

3.2 LatestCoverageConverter

  VSTest Runner plugin 產出測試程式碼涵蓋率的 coverage 檔案之後,還要將 coverage 檔案轉換為 Emma plugin 能夠讀取的 xml 檔案。同時每次建置時 VSTest Runner plugin 都會產出一份關於此次測試程式碼涵蓋率的 coverage 檔案,而且舊有的 coverage 檔案並不會刪除。

  因應上面情況所想到的解決方法是使用特定的 xml 檔名:在每次建置時轉換並重新命名最新的 coverage 檔,讓 Emma plugin 只能取得特定檔名的 xml 檔案。

  參考志弘哥當初的設定重寫了一隻 Console 程式:【Jenkins】LatestCoverageConverter

  相關參數設定如下:

  • -Workspace:Jenkins 工作區域。
  • -TestResultsFolder:測試資料夾名稱。
  • -OutputFileName:產出檔案名稱。

  這隻 Console 程式會在 Jenkins 工作區域下的測試資料夾內取得最新的 coverage 檔,轉換並重新命名為產出檔案名稱,並將產出檔案放置於 Jenkins 工作區域下的測試資料夾內。

3.3 建置:LatestCoverageConverter

  點選「建置」頁籤,按下【新增建置步驟】 → 【執行 Windows 批次指令】,輸入「LatestCoverageConverter」執行檔位置與相關參數。

區塊【Run unit tests with VSTest.console】一定要在區塊【執行 Windows 批次指令】(LatestCoverageConverter 執行檔位置與相關參數)之前。

05:Job_Configure_Setting_LatestCoverageConverter

3.4 建置後動作

  點選「建置後動作」頁籤,按下【新增建置後動作】 → 【Record Emma coverage report】(安裝 Emma plugin 產生的選項),輸入「Folders or files containing Emma XML reports」、「Health reporting」,按下【儲存】儲存工作組態設定。

  • VSTest Runner plugin:選取「Enable Code Coverage」後,每次建置都會產出一份關於此次測試程式碼涵蓋率的 coverage 檔案。
  • Folders or files containing Emma XML reports:產出的 xml 路徑,路徑只可以是相對路徑(相對於工作區域)。
  • Health reporting:定義此份報告的狀態界限值,保留空白將會使用預設值。

06:Job_Configure_Setting_Emma

3.5 工作建置

  按下【馬上建置】,此時此項工作會依序完成下列動作。

  1. 由 VSTest Runner plugin 產出一份關於此次測試程式碼涵蓋率的 coverage 檔案。
  2. 使用 LatestCoverageConverter 在 Jenkins 工作區域下的測試資料夾內取得最新的 coverage 檔,轉換並重新命名為產出檔案名稱,並將產出檔案放置於 Jenkins 工作區域下的測試資料夾內
  3. 由 Emma plugin 使用 Folders or files containing Emma XML reports 找到對應的 xml 檔案並轉換為程式碼涵蓋率報告顯示於 Jenkins 工作頁面上

  由「Coverage Trend」中可以檢視細項的程式碼涵蓋率報告,而由「Code Coverage Trend」可以直觀地得知程式碼涵蓋率的增減。

07:Job_Build

嘗試將自己的理解寫成文字紀錄,資料來源均來自於網路。

如有理解錯誤、引用錯誤或侵權,請多加指正與告知,讓我有更多的進步與改進的空間,謝謝!