【发布时间】:2013-10-07 09:42:54
【问题描述】:
我正在尝试让 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.PublishTestResultsToTFS 的第 394 行(ActivityContext 上下文,字符串文件夹) 在 d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:TfsBuildExtensions.Activities.Co 的第 387 行deQuality.NUnit.InternalExecute() 在 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:第 67 行。
但是,这似乎掩盖了一个更深层次的错误,因为它只是说 nunit 无法加载自定义程序集。所以我查看了构建服务器上的二进制文件夹中的 nunit 日志,果然在我的测试运行 .xml 文件中我发现了另一个错误:
System.Configuration.ConfigurationErrorsException:找不到类型“OpenQA.Selenium.Remote.RemoteWebDriver,Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin”。它可能需要装配资格,例如“我的类型,我的程序集”。
在 Autofac.Configuration.ConfigurationRegistrar.LoadType(String typeName, Assembly defaultAssembly) 在 Autofac.Configuration.ConfigurationRegistrar.RegisterConfiguredComponents(ContainerBuilder 构建器,SectionHandler configurationSection) 在 Autofac.Configuration.ConfigurationRegistrar.RegisterConfigurationSection(ContainerBuilder 构建器,SectionHandler configurationSection) 在 Autofac.Configuration.Core.ConfigurationModule.Load(ContainerBuilder 构建器) 在 Autofac.Module.Configure(IComponentRegistry 组件注册表) 在 Autofac.ContainerBuilder.Build(IComponentRegistry componentRegistry, Boolean excludeDefaultModules) 在 Autofac.ContainerBuilder.Build(ContainerBuildOptions 选项) 在 C:\Builds\1\Testing\RegistrationForm 中的 RegistrationForm.Tests.Acceptance.Features.UserRegistrationFeature.FeatureSetup() - 每晚 - 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 package restore),所以路径应该和我在本地使用的一样。这也不起作用。那么相对于引发错误的“.feature”文件的路径呢?这只是需要一个额外的“..\” - 仍然没有运气。
所以我有点茫然,我觉得我已经尝试了所有我能想到的路径,但是我对 specflow 插件和 TFS 构建的了解让我失望了。谁能给我指点?
【问题讨论】: