我们刚刚弄清楚如何解决这个问题。我们现在通过 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 任务替换为调用 nunit-console 的 exec 任务,该任务调用 cmd.exe,如下所示:
<exec program="cmd.exe" failonerror="true">
<arg value="/interactive" />
<arg value="/c" />
<arg value="[batch file name]" />
<arg value="[parameter one value]" />
<arg value="[parameter two value" />
</exec>
我不知道在 msbuild 中同样的任务会是什么样子,但我相信你可以查一下。最终的结果本质上是一个如下所示的命令:
cmd.exe /interactive /c [batch file name] [parameter one value] [parameter two value]
或者,您可以使用 nant 并创建 msbuld nant 任务来调用您现有的构建。
cmd.exe 的“/interactive”参数是关键,它在有权与桌面交互的进程上运行批处理文件。如果需要 '/c' 参数,我实际上并不肯定,但它按原样工作。我们仍然告诉 nunit 将结果记录到同一个 xml 文件中,因此我们的合并任务不需要更改,并且将测试结果报告给巡航控制系统工作得很好。