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

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

  若是想要知道測試案例的增減或是快速查找失敗的測試案例,單純使用「終端機輸出」頁面就顯得繁瑣且不夠直覺。

  在 Jenkins 中使用 MSTest plugin 顯示測試結果。

1、環境配置

1.1 VSTest Runner plugin

  VSTest Runner plugin 在每次建置都會產出一份關於此次測試結果的 trx 檔案,在 Jenkins 伺服器主機上安裝並設定符合開發環境的 VSTest Runner plugin(可參考小弟文章:【Jenkins】外掛套件:VSTest Runner)。

2、Jenkins 套件管理

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

01:Jenkins_Plugin_Manager

2.1 安裝 MSTest plugin

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

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

02:Filter_MSTest_Plugin

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

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

03:MSTest_Plugin_Install

3、工作組態設定

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

3.1 建置後動作

  點選「建置後動作」頁籤,按下【新增建置後動作】 → 【Publish MSTest test result report】(安裝 MSTest plugin 產生的選項),輸入「Test report TRX file」,按下【儲存】儲存工作組態設定。

  • VSTest Runner plugin:每次建置都會產出一份關於此次測試結果的 trx 檔案。
  • Test report TRX file:產出的 trx 路徑,路徑只可以是相對路徑(相對於工作區域)。

04:Job_Configure_Setting_MSTest

3.2 工作建置

  按下【馬上建置】,此時此項工作會使用 Test report TRX file 找到對應的 trx 檔案並轉換為測試報告顯示於 Jenkins 工作頁面上

  由「最新測試結果」中可以快速查找失敗的測試案例,而由「測試結果趨勢」可以直觀地得知測試案例的增減。

05:Job_Build

4、測試結果增長異常修正

明明沒有增加測試案例,但是每次工作建置後的測試結果卻不斷增加?

06:MSTest_Result_Question_Abnormal_Increment

4.1 測試結果增長異常原因

  查看 Jenkins 工作區域,每次建置時 VSTest Runner plugin 都會產出一份關於此次測試結果的 trx 檔案,而且舊有的 trx 檔案並不會刪除。

07:MSTest_Result_Question_Abnormal_Increment_Jenkins_Workspace

  而在設定「Test report TRX file」時使用了預設值(**/*.trx),所以當此項工作使用 Test report TRX file 找到對應的 trx 檔案就會越來越多(建置1次:1個,建置2次:2個,建置N次:N個…)。

  所以在每次執行工作的當下,由 VSTest Runner plugin 產出的 trx 檔案總數就會增加一份,而由 MSTest plugin 找到的 trx 檔案總數也隨之增加。於是就會造成「明明沒有增加測試案例,但是每次工作建置後的測試結果卻不斷增加」的異常情況。

4.2 LatestTrxDuplicate

  知道問題後,馬上想到的有兩種解決方法。

  第一種想法是讓 trx 檔案維持只有一份的狀態:在每次建置時先將工作區域下的 trx 檔案刪除,就可以避免找到的 trx 檔案總數不斷增加。

  第二種想法是使用特定的 trx 檔名:在每次建置時複製並重新命名最新的 trx 檔,讓 MSTest plugin 只能取得特定檔名的 trx 檔案。

  使用第二種想法(保留所有測試結果檔案),參考志弘哥當初的設定重寫了一隻 Console 程式:【Jenkins】LatestTrxDuplicate

  相關參數設定如下:

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

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

4.3 工作組態設定

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

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

  點選「建置後動作」頁籤,在【Publish MSTest test result report】中調整「Test report TRX file」為「LatestTrxDuplicate」產出檔案路徑。

  按下【儲存】儲存工作組態設定。

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

08:Job_Configure_Setting_LatestTrxDuplicate

4.4 工作建置

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

  1. 由 VSTest Runner plugin 產出一份關於此次測試結果的 trx 檔案。
  2. 使用 LatestTrxDuplicate 在 Jenkins 工作區域下的測試資料夾內取得最新的 trx 檔,複製並重新命名為產出檔案名稱,並將產出檔案放置於 Jenkins 工作區域下的測試資料夾內
  3. 由 MSTest plugin 使用 Test report TRX file 找到對應的 trx 檔案並轉換為測試報告顯示於 Jenkins 工作頁面上

  由「測試結果趨勢」中可以看出測試結果數目恢復正常,連續且重複按下建置後測試結果總數也沒有異常增長。

09:MSTest_Result_Question_Abnormal_Increment_Fix

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

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