我正在Windows Server 2003下的CC.Net上运行带有xUnit的Watin测试.
我有很多测试,在使用TestDriven.Net的开发盒和使用xUnit gui app的服务器上运行良好.但是,当CC.Net运行测试(作为MSBuild任务的一部分)时,该功能
ie.ContainsText("some text to find");
永远不会返回预期值.IE对象上的其他函数和属性似乎工作正常:Button(...).Click(),TextBox(...).Value等.
我知道服务帐户需要"允许服务与桌面交互".
我在本地系统和本地管理员下尝试过运行CC服务.管理员帐户只是挂起并且似乎永远不会完成运行测试(尽管它确实创建了一个iexplorer.exe进程的实例.
这是服务器上的权限问题,还是我从配置中遗漏了一些东西?
我们刚刚搞清楚如何解决这个问题.我们现在通过CruiseControl.net运行作为服务运行的watin测试.
我们需要我们的cc.net服务作为特定用户运行,以便访问我们正在测试的网站,因为安全性的设置方式.由于该服务作为域用户运行,因此在服务安全性选项卡上禁用"允许用户与桌面交互"复选框.我们不希望仅从始终登录的用户运行命令进程,因为我们希望进程在重新启动时自动启动.现在我们已经想通了
我们解决这个问题的方法是首先创建一个批处理文件来调用nunit-console.exe.nunit-console.exe的参数作为参数传递给批处理文件,然后传递参数.批处理文件的第二行和最后一行返回从nunit-console.exe返回的返回码.批处理文件基本上如下所示:
nunit-console.exe %1 %2 exit /b %ERRORLEVEL%
根据您的需要,您传递给nunit-console的参数数量可能会有所不同.
我们正在使用nant进行构建,因此我们将现有的nant任务替换为使用exec任务调用nunit-console,该任务调用cmd.exe,如下所示:
我不知道msbuild中的任务是什么样的,但我相信你可以查一查.最终的结果本质上是一个看起来像这样的命令:
cmd.exe /interactive /c [batch file name] [parameter one value] [parameter two value]
或者,您可以使用nant并只创建msbuld nant任务来调用现有构建.
cmd.exe的'/ interactive'参数是关键,它在有权与桌面交互的进程上运行批处理文件.如果'/ c'参数是必需的,我实际上并不是肯定的,但它是按原样工作的.我们仍然告诉nunit将结果记录到相同的xml文件中,因此我们的合并任务不需要更改,并且测试结果报告给巡航控制工作正常.