我正在嘗試使用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構建的知識卻讓我失望。任何人都可以給我任何指針?
nunit就在那裏,就像我說的,我可以到達nunit測試運行輸出文件,在那裏顯示另一個錯誤。據我可以告訴nunit正在運行specflow,它找不到插件並引發錯誤。那麼nunit就會將自己的誤導性錯誤報告給構建日誌。 –