我正在尝试使用TFS构建进行specflow UI测试,而且我非常接近。
我希望能够在多种浏览器上运行相同的测试,因此经过一些研究后我发现了这一点:
http://www.baseclass.ch/blog/Lists/Beitraege/Post.aspx?ID=4&mobile=0
它就像是本地测试运行的梦想。下一步是在TFS 2010构建期间将其调用为selenium网格。
将nunit社区构建任务放入我的构建模板后,我现在遇到了一个似乎无法解决的错误。构建报告以下错误:
错误:系统找不到指定的文件。堆栈跟踪:在System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)中的System.Diagnostics.Process.Start()处于D:\ Projects中的TfsBuildExtensions.Activities.CodeQuality.NUnit.RunProcess(String fullPath,String workingDirectory,String arguments) \ CodePlex \ teambuild2010contrib \ CustomActivities \ Legacy \ VS2010 \ Source \ Activities \ CodeQuality \ NUnit \ NUnit.cs:第339行,位于TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishMSTestResults(String resultTrxFile,String collectionUrl,String buildNumber,String teamProject,String platform ,字符串风格)在D:\ Projects \ CodePlex \ teambuild2010contrib \ CustomActivities \ Legacy \ VS2010 \ Source \ Activities \ CodeQuality \ NUnit \ NUnit.cs:第394行,位于TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishTestResultsToTFS(ActivityContext context,String文件夹) )在D:\ Projects \ CodePlex \ teambuild2010contrib \ CustomActivities \ Legacy \ VS2010 \ Source \ Activities \ CodeQuality \ NUnit \ NUnit.cs:第387行TfsBuildExtensions.Activities.Co d:\ Projects \ CodePlex \ teambuild2010contrib \ CustomActivities \ Legacy \ VS2010 \ Source \ Activities \ CodeQuality \ NUnit \ NUnit.cs中的deQuality.NUnit.InternalExecute():TfsBuildExtensions.Activities.BaseCodeActivity.Execute(CodeActivityContext context)中的第299行d:\ Projects \ CodePlex \ teambuild2010contrib \ CustomActivities \ Legacy \ VS2010 \ Source \ Common \ BaseCodeActivity.cs:第67行。
但是,这似乎掩盖了一个更深层次的错误,因为我只是说nunit无法加载自定义程序集。所以我查看了构建服务器上用于nunit日志的二进制文件夹,并且在我的测试运行.xml文件中确定无误,我发现了另一个错误:
System.Configuration.ConfigurationErrorsException:找不到类型'OpenQA.Selenium.Remote.RemoteWebDriver,Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin'。它可能需要装配认证,例如“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) 在Autofac.Module.Configure(IComponentRegistry componentRegistry) 在Autofac.ContainerBuilder.Build(IComponentRegistry componentRegistry,Boolean excludeDefaultModules) 在Autofac.ContainerBuilder.Build(ContainerBuildOptions选项) 在C:\ Builds \ 1 \ Testing \ RegistrationForm中的RegistrationForm.Tests.Acceptance.Features.UserRegistrationFeature.FeatureSetup() - Nightly - Main \ Sources \ Testing \ RegistrationForm \ Main \ RegistrationForm.Tests.Acceptance \ Features \ UserRegistration.feature。 cs:第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 :(得分:0)
但最初的错误基本上是说TFSs nunit支持在调用CreateProcess时无法找到文件,正如你所说它适用于本地测试运行,所以它就像NUnit没有安装在机器上一样简单为你运行测试?
答案 1 :(得分:0)
我最终到了那里!
所以在设置它的某些方面,我在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来解决这个问题。现在整个过程完美无缺。