Watin测试在CC.Net失败

时间:2009-03-12 20:09:48

标签: unit-testing watin xunit.net

我正在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进程的实例。

这是服务器上的权限问题,还是我遗漏了配置?

6 个答案:

答案 0 :(得分: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任务替换为使用调用cmd.exe的exec任务调用nunit-console,如下所示:

   <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文件中,这样我们的合并任务就不需要改变了,并且测试结果报告给巡航控制工作效果很好。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我已经离线收到了一些建议:

  1. 尝试在服务器上使用msbuild运行测试。
  2. 尝试从控制台启动CC.Net而不是服务。
  3. 将使用结果进行编辑。

    修改

    结果:

    1. 我完全可以在服务器上使用msbuild运行测试。
    2. 当我从命令行运行ccnet.exe时,测试运行正常。但是,当我在启动时设置从命令行启动ccnet.exe的任务时,测试会挂起并且永远不会完成(最终超时)。
    3. 部分解决方法是在永不死机的会话上运行命令行可执行文件。我真的不喜欢这个解决方案,所以任何进一步的输入都会受到赞赏。

答案 3 :(得分:0)

不确定为什么使用无效的exec示例将该答案标记为正确..

我把它改写成:

<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>

哪个运行..但是都失败了..

答案 4 :(得分:0)

我按照这个例子,但遗憾的是它并没有帮助我。由于这个问题是关于nant的,并且我使用了msbuild,因此我为此at here打开了一个单独的问题。

答案 5 :(得分:0)

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

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

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