Windows Server 2008 R2上的SpecFlow + WatiN + NUnit + TeamCity

|| 最近,我在建立一个全自动的夜间构建/测试/部署环境时遇到了一些麻烦。简要解释一下安装程序。我们使用Mercurial作为源代码控制系统,并使用TeamCity作为构建服务器。当前,在单独的计算机上只有一个构建代理,以使事情简单。 这个想法如下:每晚运行TeamCity构建。从Mercurial存储库中获取最新信息,运行构建,运行单元测试,部署到测试服务器,针对新部署的测试服务器运行验收测试(在构建代理上),如果所有这些都通过,则将批次部署到临时服务器。除验收测试外,我已完成所有工作。这些是通过SpecFlow和WatiN完成的。 Everyhting在开发计算机(Windows 7 32位)上运行良好。但是,当我尝试运行验收测试(TeamCity中的NUnit)时,跑步者报告由于步骤[Browser] .ContainsText(browserText)而失败。到此为止的所有步骤均正确运行,如果我在构建代理程序的同一浏览器中复制了这些步骤(获得了完全的管理员访问权限),则可以看到文本。因此,据我所知,测试应该通过。 我发现这个stackoverflow线程让我觉得我可能在保持浏览器实例周围状态方面做错了。解释:我有一组常用步骤,例如“当我单击X按钮时”或“当我在字段Y中输入文本X时”,以及有问题“然后我会显示X”的步骤。 。因为我将尽可能多地使测试可重用,所以我也概括了@requires_browser场景要求,然后按如下所示进行定义:
[BeforeScenario(\"requires_browser\")]
public void RequiresBrowserBeforeFeature()
{
    Settings.MakeNewIeInstanceVisible = false;
    ScenarioContext.Current.Set<Browser>(new IE(true));
}

[AfterScenario(\"requires_browser\")]
public void RequiresBrowserAfterFeature()
{
    ScenarioContext.Current.Get<Browser>().Close();
    ScenarioContext.Current.Get<Browser>().Dispose();
}
然后是常见步骤:
[Then(\"I am shown \\\"(.*)\\\"\")]
public void ThenIAmShown(string text)
{
    Assert.IsTrue(ScenarioContext.Current.Get<Browser>().ContainsText(text));
}
由此,我可以定义其他将文本输入文本框,单击按钮等的常规步骤。所有这些都可以在Visual Studio 2010中运行的开发环境上完美运行(以管理员身份)。 我认为应该在测试完成之前保留ScenarioContext吗? 到目前为止,我已经尝试过: 配置生成代理服务以作为本地系统(SYSTEM)运行。这将导致上述问题-ThenIAmShown(string text)方法将始终失败。它已启用与本地桌面的交互。 配置的构建代理服务以网络管理员身份运行(具有完整的管理员权限)。此设置甚至不会运行测试。我得到的例外: TearDown方法失败。 WatiN.Core.Exceptions.BrowserNotFoundException:找不到IE窗口匹配约束:等待附加到IE的新实例时超时。搜索在\ '30 \'秒后过期。 TearDown:System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。 在WatiN.Core.IE.CreateIEPartiallyInitializedInNewProcess() 在WatiN.Core.IE.CreateNewIEAndGoToUri(Uri uri,IDialogHandler logonDialogHandler,Boolean createInNewProcess) ... 已经将程序集Interop.SHDocVw.dll和Microsoft.mshtml.dll添加到bin目录(项目引用中的“复制到输出”)。 从构建代理运行NUnit UI。这将按预期运行单元测试。使我相信安全性可能存在问题。 Windows Server 2008 R2 Enterprise上的Runnint NUnit 2.0.5。 有人遇到这个问题吗?     
已邀请:

要回复问题请先登录注册