我一直在搜索Google,在Stack Overflow上阅读各种问题(和答案),并扫描SlowCheetah NuGet页面,GitHub问题列表,以及效用作者的博客,我仍然无法找到一个答案来确切地说明是什么导致了我的问题。在TFS 2013持续集成构建期间,SlowCheetah转换没有在单元测试项目上执行
我有一个托管在TFS 2013 Git存储库中的解决方案。当一个特定的分支被推送到TFS服务器时,它会启动一个自动构建和部署到构建站点。所有这一切都很好。它也会启动所有的单元测试,所有的运行都没有问题。
也就是说,直到我到SpecFlow华廷测试...
测试踢出没有问题,我已成立运行华廷服务器在浏览器中测试交互。这一切都有效。问题在于,WatiN测试点击的网站位于Build服务器上,它与我在本地开发箱(也是来自测试服务器,这是第三个URL)上使用的URL不同。我在单元测试项目的App.Config中设置了站点URL(这是一个基于MSTest的项目)。我还为每个目标环境设置了XDT转换文件,其中包括有问题的Build环境。
当我推送到TFS或手动启动构建时,一切都运行良好,直到它到达SpecFlow测试。这些特定的测试开始,如果我实际登录到作为构建服务器的虚拟机托管服务器,当构建和测试作为构建/测试用户运行时,我实际上可以看到浏览器启动。我还可以简单地在Internet Explorer中看到“此页面无法显示”消息,这不是预期的行为(我应该看到应用程序的登录页面)并且测试失败。
再看看它,我开始显而易见 - 它击中了正确的网站吗?那么,深入了解服务器上的构建文件夹,我能够验证转换不起作用 - app.config文件具有开发机器的站点URL,而不是Build环境的URL。
Web项目的转换ARE正在工作 - 正在为前端Web应用程序和后端服务层应用程序填充构建环境的更改,并且他们工作 - 我可以在构建服务器在浏览器中。但是这些项目不使用SlowCheetah,而是使用内置的web.config转换。单元测试项目已安装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测试是否在我的本地开发框中手动运行时运行并通过。我的猜测是,转换不会被启动,或者在转换运行和单元测试运行的时间轴上有某种东西。
我在这里做错了什么?任何援助非常感谢!