4

我在 Windows Server 2003 下的 CC.Net 上使用 xUnit 运行 Watin 测试。

我有很多测试在使用 TestDriven.Net 的开发箱和使用 xUnit gui 应用程序的服务器上运行良好。但是,当 CC.Net 运行测试(作为 MSBuild 任务的一部分)时,函数

ie.ContainsText("some text to find");

从不返回预期值。IE 对象上的其他函数和属性似乎工作正常:Button(...).Click()、TextBox(...).Value 等。

我知道服务帐户需要“允许服务与桌面交互”。

我已经在本地系统和本地管理员下尝试过这个正在运行的 CC 服务。管理员帐户只是挂起并且似乎从未完成运行测试(尽管它确实创建了 iexplorer.exe 进程的实例。

这是服务器权限的问题,还是我在配置中遗漏了一些东西?

4

6 回答 6

10

我们刚刚弄清楚如何解决这个问题。我们现在通过 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 文件中,因此我们的合并任务不需要更改,并且将测试结果报告给巡航控制系统工作得很好。

于 2009-08-06T20:43:14.910 回答
1

Watin 依靠浏览器自动化来完成它的工作,因此“允许服务与桌面交互”设置。

当 Watin 尝试运行时,它将在服务帐户而不是当前登录的桌面下运行,并且由于它会启动 IE,因此您运行 Watin 的帐户可能之前实际上并没有启动 IE,它可以坐在 IE 的初始启动序列中,它会提示设置和所有这些 hoo-hah。

另外,如果我没记错的话,与桌面交互设置需要主动登录才能与之交互。如果当时没有人登录,则该服务将无法与之交谈,也不会为您创建新桌面。

于 2009-08-06T06:06:22.653 回答
0

线下收到了几个建议:

  1. 尝试在服务器上使用 msbuild 运行测试。
  2. 尝试从控制台而不是作为服务启动 CC.Net。

将编辑结果。

编辑:

结果:

  1. 我完全能够在服务器上使用 msbuild 运行测试。
  2. 当我从命令行运行 ccnet.exe 时,测试运行良好。但是,当我设置一个任务以在启动时从命令行启动 ccnet.exe 时,测试挂起并且永远不会完成(最终超时)。

部分解决方法是在永不终止的会话上运行命令行可执行文件。我真的不喜欢这个解决方案,所以任何进一步的输入将不胜感激。

于 2009-03-13T20:08:16.453 回答
0

不知道为什么用无效的执行示例将该答案标记为正确..

我将其重写为:

<exec> <baseDirectory>WatinTestDir</baseDirectory> <executable>cmd.exe</executable> <buildArgs>/interactive /C nunit-launcher.bat Test.dll /xml:../Test-results.xml</buildArgs> <buildTimeoutSeconds>2400</buildTimeoutSeconds> </exec>

哪个运行..但同样失败..

于 2011-01-07T12:10:14.770 回答
0

我遵循了这个例子,但遗憾的是它对我没有帮助。由于这个问题是关于 nant 的,而且我使用的是 msbuild,所以我在这里打开了一个单独的问题。

于 2013-10-29T08:21:17.307 回答
0

这是一个很好的解决方案,但不能解决问题是您尝试使用 Watin 下载文件。

http://blog.kikicode.com/2011/10/run-minimized-batch-file-in-task.html

这对我有用。问题是 cmd 提示符阻止 IE 出现。当我能够最小化 cmd 提示时,它允许 IE 获得焦点并下载我在我的过程中需要的文件。

于 2014-05-07T14:48:43.193 回答