[TFS 2015] 實作 Build vNext 自動部署 SpecFlow 和 Pickles 測試報表

前面幾篇介紹使用 SpecFlow 和 Pickles 指令碼產生 cucumber/gherkin  的測試報表,請參考:
https://dotblogs.com.tw/yc421206/2016/04/25/specflow_pickles_live_document
https://dotblogs.com.tw/yc421206/2016/04/26/specflow_pickles_live_document_command_line

今天,我要搭配 TFS 2015 Build vNext 自動產生測試報表,以下是我的演練。

PS.雖然說,手動產生測試報表已經完成了,但還是花了很多的時間調整指令碼路徑的處理。

伺服器環境:

  • Windows 2012 Datacenter x64
  • TFS 2015 Update 2 中文版

開發環境:

  • VS 2015 Update 2
  • Pickles.CommandLine 2.3.0
  • SpecFlow 2.0

 

所有的建置步驟跟路徑有很大的關係,所以別傻傻的照抄阿

在測試專案裡面加入 runSpecFlowReport.bat 如下圖:

runSpecFlowReport.bat 的內容如下:

echo off

set currentFolder=%1
set projectName=%2
set testResultFolder=%3
set outputFolder=%testResultFolder%\%projectName%

echo currentFolder = %currentFolder%
echo projectName = %projectName%
echo testResultFolder= %testResultFolder%
echo outputFolder= %outputFolder%

if exist "%outputFolder%" (rmdir "%outputFolder%" /s /q )
mkdir "%outputFolder%"

set testResultFile="%outputFolder%\%projectName%.trx"
REM 搜尋*trx的檔案
REM for /r "%testResultFolder%" %%f in (*.trx) do (
REM set testResultFile="%%~f"
REM )

echo testResultFile = %testResultFile%

set projectFile="%currentFolder%\%projectName%\%projectName%.csproj"
set projectDll="%currentFolder%\%projectName%\bin\Release\%projectName%.dll"
set featureFolder="%currentFolder%\%projectName%"

set msTestFile="%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE\MsTest.exe"
set specFlowFile="%currentFolder%\packages\SpecFlow.2.0.0\tools\SpecFlow.exe"
set picklesFile="%currentFolder%\packages\Pickles.CommandLine.2.6.0\tools\pickles.exe"
set mstestArguments=/testcontainer:%projectDll% /resultsfile:%testResultFile%

echo projectFile = %projectFile%
echo projectDll = %projectDll%
echo featureFolder = %featureFolder%
echo specFlowFile = %specFlowFile%
echo picklesFile = %picklesFile%
echo mstestArguments = %mstestArguments%
pause

echo 因為 SpecFlow不支援vstest.console.exe 產生出來的trx格式,為了報表再跑一次測試,Generate TestResult.trx....
%msTestFile% %mstestArguments%

echo Generate Pickles Report....
%picklesFile% --feature-directory=%featureFolder% --output-directory="%outputFolder%" --documentation-format="dhtml" --test-results-format=mstest --link-results-file=%testResultFile%

echo Generate SpecFlow Report....
%specFlowFile% mstestexecutionreport %projectFile% /testResult:%testResultFile% /out:"%outputFolder%\SpecFlowReport.html"
%specFlowFile% stepdefinitionreport %projectFile% /out:"%outputFolder%\SpecFlowStepReport.html"

 

TFS 2015 Build vNext 已經使用 vstest.console.exe 運行測試,並且也有測試結果 *.trx,為什麼上面的指令碼 要再跑一次測試?因為 SpecFlow 沒有支援 vstest.console.exe 產生出來的測試結果,所以為了 SpecFlow Report 我需要用 MsTest 再跑一次測試。

下圖是TFS Build vNext 建置的目錄:

Pickles 有支援vstest,如下圖:

若你只需要跑 Pickles 的測試報表,你可以用 vstest.console.exe 產生出來的 *.trx,把這幾行註解打開,如下圖:

接下來,在 TFS 組建 增加一個「命令列」,然後調用 runSpecFlowReport.bat,並傳入相關參數,如下圖:

上圖的參數是來自於下圖的設定:

運行建置後,應該要在下圖得到三個 *.html,不過我只有得到兩個,SpecFlow StepDefine 跑不出來,一直跟我說找不到相依元件,對這個錯誤訊息沒有頭緒,先跳過。:)

發行測試結果:

我們可以選擇把測試結果發到成品,如下圖:
test 成品,如下圖:

如果,你覺得發行到網站可以即時看測試報表比較酷,只要把 html 複製到網站就可以了,如下圖:

最後,排定 Daily Build,自動化建置、測試、文件、部署,輕鬆完成。

若你對 Build vNext 還不熟,你可以參考以下連結:
https://dotblogs.com.tw/yc421206/2016/04/27/tfs2015_build_vnext_release_deploy_internal_nuget_server
https://dotblogs.com.tw/yc421206/2016/04/22/tfs2015_build_vnext_release_deploy_internal_webapp
https://dotblogs.com.tw/yc421206/2016/04/20/tfs2015_build_vnext_webdeploy

對 Pickles 不熟,可以參考以下連結:
https://dotblogs.com.tw/yc421206/2016/04/25/specflow_pickles_live_document
https://dotblogs.com.tw/yc421206/2016/04/26/specflow_pickles_live_document_command_line

整個過程很簡單,但是花了我好多的時間,踩過的雷,記住它下次就避掉,不熟的東西多練幾次就會了。 :)

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo