2013-10-07 65 views
0

我正在嘗試使用TFS構建獲得specflow UI測試,我非常非常接近。specun插件與nunit和TFS構建

我希望能夠在一些瀏覽器上運行相同的測試,所以經過一番研究,我發現這一點:

http://www.baseclass.ch/blog/Lists/Beitraege/Post.aspx?ID=4&mobile=0

它的工作原理是本地測試運行一個夢想。下一步是在TFS 2010版本中調用硒電池。

將nunit社區構建任務放入我的構建模板後,我現在陷入了一個我似乎無法解決的錯誤。構建報告以下錯誤:

Error: The system cannot find the file specified. Stack Trace: at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at TfsBuildExtensions.Activities.CodeQuality.NUnit.RunProcess(String fullPath, String workingDirectory, String arguments) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 339 at TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishMSTestResults(String resultTrxFile, String collectionUrl, String buildNumber, String teamProject, String platform, String flavor) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 394 at TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishTestResultsToTFS(ActivityContext context, String folder) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 387 at TfsBuildExtensions.Activities.CodeQuality.NUnit.InternalExecute() in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 299 at TfsBuildExtensions.Activities.BaseCodeActivity.Execute(CodeActivityContext context) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Common\BaseCodeActivity.cs:line 67.

然而,這似乎掩蓋了更深的誤差對我來說這只是說,NUnit的無法加載自定義程序集。因此,我不得不通過對NUnit的日誌生成服務器上的二進制文件的文件夾一看,在我的測試運行.xml文件,果然我發現另一個錯誤:

System.Configuration.ConfigurationErrorsException : The type 'OpenQA.Selenium.Remote.RemoteWebDriver, Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin' could not be found. It may require assembly qualification, e.g. "MyType, MyAssembly".

at Autofac.Configuration.ConfigurationRegistrar.LoadType(String typeName, Assembly defaultAssembly) at Autofac.Configuration.ConfigurationRegistrar.RegisterConfiguredComponents(ContainerBuilder builder, SectionHandler configurationSection) at Autofac.Configuration.ConfigurationRegistrar.RegisterConfigurationSection(ContainerBuilder builder, SectionHandler configurationSection) at Autofac.Configuration.Core.ConfigurationModule.Load(ContainerBuilder builder) at Autofac.Module.Configure(IComponentRegistry componentRegistry) at Autofac.ContainerBuilder.Build(IComponentRegistry componentRegistry, Boolean excludeDefaultModules) at Autofac.ContainerBuilder.Build(ContainerBuildOptions options) at RegistrationForm.Tests.Acceptance.Features.UserRegistrationFeature.FeatureSetup() in c:\Builds\1\Testing\RegistrationForm - Nightly - Main\Sources\Testing\RegistrationForm\Main\RegistrationForm.Tests.Acceptance\Features\UserRegistration.feature.cs:line 0

從此我開始看的路徑自定義組件。這是在項目的app.config文件中指定的(它在構建過程中被轉換,我也檢查過以確保文件正在被轉換,並且在構建服務器的二進制文件目錄中)。該文件的相關部分是這個。

<specFlow> 
<stepAssemblies> 
    <stepAssembly assembly="SpecFlow.Assist.Dynamic" /> 
    <stepAssembly assembly="Baseclass.Contrib.SpecFlow.Selenium.NUnit.Bindings" /> 
</stepAssemblies> 
<unitTestProvider name="SeleniumNUnit" /> 
<plugins> 
    <add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="..\packages\Baseclass.Contrib.SpecFlow.Selenium.NUnit.1.2.0\tools" /> 
</plugins> 

是本地工作。我想我只需要改變轉換文件中的路徑。起初我以爲工作目錄是二進制文件目錄,以便在轉換文件中我有這樣的:「」

<specFlow> 
<plugins xdt:Transform="Replace"> 
    <add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="." /> 
</plugins> 

DLL是在同一目錄(二進制文件),所以我想‘’ ,「。\」 - 這些都不起作用。因此,在仔細考慮並更仔細地閱讀錯誤之後,我認爲我需要查看構建服務器上的Sources文件夾。該Dll位於packages文件夾(nuget包恢復)中,所以路徑應該與我在本地使用的路徑相同。這也沒有效果。那麼相對於「.feature」文件拋出錯誤的路徑呢?這隻需要一個額外的「..」 - 仍然沒有運氣。

所以我有點失落,我覺得我嘗試了所有我能想到的路徑,但是我對specflow插件和TFS構建的知識卻讓我失望。任何人都可以給我任何指針?

回答

0

我到那裏了!

所以沿着這一設置的行地方我endded了在我的app.config像這樣:

<component 
      name="IE" 
      type="Baseclass.Contrib.SpecFlow.Selenium.NUnit.RemoteWebDriver, Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin" 
      service="OpenQA.Selenium.Remote.RemoteWebDriver, WebDriver" 
      instance-scope="per-dependency"> 
    <parameters> 
     <parameter name="browser" value="InternetExplorer" /> 
     <parameter name="url" value="http://192.168.1.3:4444/wd/hub" /> 
    </parameters> 
    </component> 

的問題(因爲它錯誤說)是它找不到OpenQA .Selenium.Remote.RemoteWebDriver。我相信我在一個我在低音類網頁上找到的例子中看到了這一點。將其更改爲OpenQA.Selenium後。IWebDriver一切正常,nUnit能夠在我的TFS 2010構建服務器上運行我的specFlow測試。當構建試圖解析結果時,我確實遇到了另一個障礙,它試圖使用MSTest 11而不是10(因爲我使用VS 2012)。然而,這臺TFS機器僅僅是一個概念證明,並且是在Windows 7上運行在Virtual PC上的Windows 2008 32位版本(我可以不運行64位,所以無法在我的構建服務器上安裝VS2012)。我通過爲MStest 11創建一個新的環境變量並將其指向MSTest 10來解決這個問題。整個過程現在可以正常工作。

0

但是最初的錯誤基本上是說TFSs nunit支持在調用CreateProcess時無法找到文件,並且正如您所說,它適用於本地測試運行,所以它就像NUnit未安裝在機器上一樣簡單爲你運行測試?

+0

nunit就在那裏,就像我說的,我可以到達nunit測試運行輸出文件,在那裏顯示另一個錯誤。據我可以告訴nunit正在運行specflow,它找不到插件並引發錯誤。那麼nunit就會將自己的誤導性錯誤報告給構建日誌。 –