[料理佳餚] Jenkins 整合 SpecFlow 執行自動化整合測試

在我的需求裡面,光有 UnitTest 是不夠的,我們還使用了 SpecFlow 做整合測試,接下來我們可以叫 Jenkins 幫我們執行 SpecFlow 的 Test。

專案從 NuGet 上安裝 SpecRun for SpecFlow

SpecFlow 可以使用 MsTest、NUnit 去執行測試,為了之後產生報表方便,我採用 SpecRun 來執行測試。

將方案的 packages.config 加入方案控制

這邊有點詭異,我在專案加入 SpecRun Runner 套件,但是 package 的資訊卻被放在 .nuget\packages.config 裡面,造成在 Build 專案的時候沒有將 SpecRun Runner restore 回來,runtests.cmd 執行時找不到 packages\SpecRun.Runner.1.2.0\tools\SpecRun.exe

添加建置步驟 - 執行 Windows 批次指令

還原 SpecRun Runner 套件

添加建置步驟 - 執行 Windows 批次指令

執行 runtests.cmd 帶入 Default 參數及產生報表的相對路徑

添加建置後動作 - Publish HTML reports

把輸出後的 TestReport\SpecReport.html 填入 Index page(s) 欄位,並且給它一個 Report title。

Demo

標準的 SpecFlow 報表

後記

過程中遇到一個小插曲,我得到了一個「'Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上。」錯誤訊息,原因 Google 一下是少了「Microsoft Access Database Engine 2010 可轉散發套件」,下載安裝之後就搞定了。

另外,為何我要用 SpecRun 而不用 MsTest 原因我說明一下,是因為 MsTest 要產生 CodeCoverage 報表的步驟稍微繁雜了一些,而用 VsTest.Consolse 產生 CodeCoverage 報表輕鬆寫意,但是 VsTest.Consolse 產生的 TRX 檔案 Pickles 沒辦法支援,所以我只好迂迴了一下用 SpecRun 來執行 SpecFlow Test。