我正在尝试让 specflow UI 测试与 TFS 构建一起工作,我非常接近。
我希望能够在多个浏览器上运行相同的测试,所以经过一些研究,我发现了这一点:
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() 在 TfsBuildExtensions.Activities.CodeQuality.NUnit.RunProcess(String fullPath, String workingDirectory, String arguments) 在 d:\Projects \CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishMSTestResults 的第 339 行(字符串 resultTrxFile,字符串 collectionUrl,字符串 buildNumber,字符串 teamProject,字符串平台, 字符串风格)在 d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:TfsBuildExtensions.Activities.CodeQuality.NUnit 的第 394 行。
但是,这似乎掩盖了一个更深层次的错误,因为它只是说 nunit 无法加载自定义程序集。因此,我查看了构建服务器上的二进制文件夹中的 nunit 日志,果然在我的测试运行 .xml 文件中,我发现了另一个错误:
System.Configuration.ConfigurationErrorsException:找不到类型“OpenQA.Selenium.Remote.RemoteWebDriver,Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin”。它可能需要装配资格,例如“MyType, MyAssembly”。
在 Autofac.Configuration.ConfigurationRegistrar.LoadType(String typeName, Assembly defaultAssembly) 在 Autofac.Configuration.ConfigurationRegistrar.RegisterConfiguredComponents(ContainerBuilder builder, SectionHandler configurationSection) 在 Autofac.Configuration.ConfigurationRegistrar.RegisterConfigurationSection(ContainerBuilder builder, SectionHandler configurationSection) 在 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 c中的.UserRegistrationFeature.FeatureSetup():\Builds\1\Testing\RegistrationForm - 每晚 - 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 package restore),所以路径应该和我在本地使用的一样。这也不起作用。那么相对于引发错误的“.feature”文件的路径呢?这只是需要一个额外的“..\” - 仍然没有运气。
所以我有点茫然,我觉得我已经尝试了所有我能想到的路径,但是我对 specflow 插件和 TFS 构建的了解让我失望了。谁能给我任何指示?