2013-12-16 74 views
8

我有Visual Studio 2010,我們有兩個VS解決方案。第一個是Web應用程序,第二個嚴格用於SpecFlow測試。讓兩個Visual Studio實例同時運行只是爲了運行SpecFlow功能,就是吃掉所有可用的RAM,導致速度變慢。如何使用MSTest從命令行運行SpecFlow方案?

我已經在Google和StackOverflow上進行了一些搜索,並且在MSTest命令行工具上詳細閱讀了MS文檔,但是我沒有找到答案。完整的SpecFlow測試套件需要大約45分鐘才能完成,而且我確實只需要運行一些場景。

我想知道是否有方法從命令行使用MSTest運行單個SpecFlow功能甚至是單個場景?

+0

您也可以考慮查看NCrunch(http://NCrunch.net)或ContinuousTests(http://www.continuoustests.com)。這兩種工具都可以儘可能快地運行你的測試。我使用NCrunch,它有一個*只運行受我改變*模式影響的測試,並且只是你在 – AlSki

回答

9

在現場specflow測試只是普通的mstest單元測試。所以,你應該能夠使用類似的運行它們以同樣的方式:

運行特定的場景:

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff 

要運行,你可以使用/測試標誌多次幾個特定的​​場景:

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff /test:GivenMyScenarioWhenIDoSomemthingElse 

要運行功能

mstest /testcontainer:tests.dll /test:MyFeatureName 

如果您在場景中添加標籤使用@mytag例如,你也可以使用該選項

/category:MyTag to filter down the scenarios to run. 

請看看你的特徵文件背後的生成代碼來獲得的東西是如何工作的一個線索,如果你是familliar與MSTEST它應該相當簡單。

+0

之後。看起來這是答案,但是我正在反駁另一個問題。我已經通過NuGet安裝了所有測試項目的依賴關係,它將所有這些DLL引入「包」目錄。 'mstest'命令行實用程序預計所有類庫都存在於當前工作目錄中。我安裝了'SpecBind' NuGet包,它給了我缺少的DLL文件(SpecBind.CodedUI.dll),但它沒有被複制到我的編譯目錄中。除非你有一些建議(我爲這個項目使用CodedUI測試),否則我將不得不深入研究一下。 –

+0

我正在將此標記爲答案,因爲我正在對付另一個問題 - 可能是因爲我的Visual Studio解決方案的設置。謝謝! –

+2

使用Vstest.console.exe而不是mstest。 Vstest.console.exe會自動加載你所有的nuget軟件包以及其他庫。 E.g Vstest.console.exe mytests.dll – Mohamed

2

有一個名爲「Specrun.Specflow」下載的nuget軟件包。它會改變你的app.config並設置unitTestProvider name =「SpecRun」,這樣你就可以刪除unitTestProvider name =「MSTest」或「NUnit」,現在保存App.config的變化,visual studio會提示你重新生成你的特性文件,點擊是,然後建立一個解決方案,你會看到你的測試文件已經被重新生成。 現在在您的命令提示符下進入C:\ Users \\ Documents \ Visual Studio 2015 \ Projects \並鍵入runtests.cmd,它應該直接觸發您的所有功能文件。

+2

Specrun.Specflow是Specflow的商業產品,每個用戶花費150美元。這個收入來源似乎就是爲什麼在任何標準的開源代碼運行器中運行規範流程的原因很少。對於跑步者來說,付費對於CI環境來說確實是無益的,即使對於富有的公司來說也會給組織帶來障礙。這當然不是你的錯,但我認爲這應該作爲你的建議的一個主要警告提及。 – Amias