在TFS 2013上的持续集成构建期间,未在单元测试项目上执行SlowCheetah转换

时间:2014-05-15 16:23:10

标签: unit-testing continuous-integration watin tfs2013 slowcheetah

我一直在搜索Google,在Stack Overflow上阅读各种问题(和答案),扫描SlowCheetah NuGet页面,GitHub问题列表和公用事业作者的博客,我仍然可以&找到答案,找出造成我问题的确切原因。

我在TFS 2013 Git存储库中托管了一个解决方案。当特定分支被推送到TFS服务器时,它会启动自动构建并部署到构建站点。所有这一切都很有效。它还启动了所有的单元测试,一切都没有问题。

也就是说,直到我进入SpecFlow WatiN测试......

测试开始没有问题,我将服务器设置为在浏览器中以交互方式运行WatiN测试。这一切都有效。问题是WatiN测试点击的网站是在Build服务器上,这是一个不同于我在我的开发盒上本地使用的URL(以及测试服务器,这是第三个URL)。我在单元测试项目的App.Config中设置了站点URL(这是一个基于MSTest的项目)。我还为每个目标环境设置了XDT转换文件,包括相关的Build环境。

当我推送到TFS或手动启动构建时,一切都运行良好,直到它进入SpecFlow测试。这些特定的测试开始,如果我实际登录到作为构建服务器的VM托管服务器,当构建和测试作为构建/测试用户运行时,我实际上可以看到浏览器启动。我还可以简单地看到"此页面无法显示" Internet Explorer中的消息,这不是预期的行为(我应该看到应用程序的登录页面),测试失败。

再看一下,我从明显开始 - 它是否击中了正确的网站?好吧,挖掘服务器上的build文件夹,我能够验证转换是否正常 - app.config文件包含开发机器的站点URL,而不是Build环境的站点URL!

Web项目的转换正在运行 - 正在为前端Web应用程序和后端服务层应用程序填充Build环境的更改并且它们可以工作 - 我可以在构建服务器上启动该站点在浏览器中。但是这些项目不使用SlowCheetah,而是使用内置的web.config转换。单元测试项目DOES安装了SlowCheetah NuGet包;它似乎无论出于何种原因都无法正常工作。

这里是相关单元测试项目的 app.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
  </configSections>

  <appSettings>
    <add key="SiteUrl" value="http://dev.server.url/" />
  </appSettings>

  <!-- Spec-Flow Configuration -->
  <specFlow>
    <unitTestProvider name="MsTest" />
  </specFlow>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.5022.0" newVersion="2.0.5022.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

配置转换文件 app.Build.config 如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="SiteUrl" xdt:Locator="Match(key)" xdt:Transform="SetAttributes" value="http://build.server.url/" />
  </appSettings>
</configuration>

这些配置文件对我来说看起来不错,所以我认为这些文件的格式存在问题。当我在本地开发盒上手动运行时,我还可以验证SpecFlow测试是否运行并通过。我的猜测是转换根本没有被启动,或者在运行转换和运行单元测试的时间线中可能存在某些东西。

我在这里做错了什么?非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在构建定义中,您可能已定义要使用的配置。其中一部分还定义了像Any CPU或x86这样的平台。在解决方案中,平台任何CPU都有一个空间,在项目文件中,平台AnyCPU没有空间。

我发现解决此问题的最佳方法是将平台留空并仅输入配置名称。 VS会弹出一个警告,告诉您有数据缺失,您只需按“是”即可保存。或者,您只需键入以下配置,如下面的| Release,| Debug。

模式是[PlatformName] | [ConfigurationName],[PlatformName] | [ConfigurationName],...