在 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 套件」管理頁面。
2.1 安裝 Emma plugin
點選「可用的」頁籤,輸入過濾條件「Emma」,選取【Emma】並按下【下載並於重新啟動後安裝】。
套件安裝過程中會將相依套件一併載入安裝,安裝完成後顯示「下載成功。下次啟動後就會生效。」。
當套件與相依套件全部下載完成後,按下【當安裝完成且沒有工作正在執行時,重啟 Jenkins】重新啟動 Jenkins。
3、工作組態設定
由 Jenkins 主畫面依序點選「Lab.Jenkins_VisualStudio」(前面新增的工作名稱) → 「組態」,進入「工作組態」設定頁面。
3.1 建置:產出 coverage 檔案
設定 VSTest Runner plugin 產出一份關於此次測試程式碼涵蓋率的 coverage 檔案。
點選「建置」頁籤,在【Run unit tests with VSTest.console】中選取「Enable Code Coverage」。
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」執行檔位置與相關參數。
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:定義此份報告的狀態界限值,保留空白將會使用預設值。
3.5 工作建置
按下【馬上建置】,此時此項工作會依序完成下列動作。
- 由 VSTest Runner plugin 產出一份關於此次測試程式碼涵蓋率的 coverage 檔案。
- 使用 LatestCoverageConverter 在 Jenkins 工作區域下的測試資料夾內取得最新的 coverage 檔,轉換並重新命名為產出檔案名稱,並將產出檔案放置於 Jenkins 工作區域下的測試資料夾內。
- 由 Emma plugin 使用 Folders or files containing Emma XML reports 找到對應的 xml 檔案並轉換為程式碼涵蓋率報告顯示於 Jenkins 工作頁面上。
由「Coverage Trend」中可以檢視細項的程式碼涵蓋率報告,而由「Code Coverage Trend」可以直觀地得知程式碼涵蓋率的增減。
- Jenkins Plugins:Emma
- 軟體主廚的程式料理廚房:[料理佳餚] 使用 Jenkins 執行自動化單元測試
- :【Jenkins】LatestCoverageConverter
嘗試將自己的理解寫成文字紀錄,資料來源均來自於網路。
如有理解錯誤、引用錯誤或侵權,請多加指正與告知,讓我有更多的進步與改進的空間,謝謝!