0

我正在尝试让 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 构建的了解让我失望了。谁能给我任何指示?

4

2 回答 2

0

但是最初的错误基本上是说 TFSs nunit 支持在调用 CreateProcess 时找不到文件,并且正如您所说它适用于本地测试运行,那么它是否像运行测试的机器上未安装 NUnit 一样简单为你?

于 2013-10-07T12:15:52.480 回答
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。我相信我在 Bassclass 页面上找到的一个示例中看到了这一点。将其更改为 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 解决了这个问题。整个过程现在完美运行。

于 2013-10-16T12:18:42.780 回答