从Fitnesse开始seleniumRC

时间:2008-09-19 07:20:08

标签: selenium tfs selenium-rc fitnesse fit-framework

我正在尝试在我的每晚构建的TFS上集成来自MSBuild的运行Fitnesse测试。

为了使其自包含,我想只在需要健身时启动seleniumRC服务器。

我已经看到有一个“命令行夹具”,但用java编写它可以用吗?

3 个答案:

答案 0 :(得分:1)

我想你可能会。您可以使用任务在MSBuild中轻松调用任何进程。但是,执行此操作的问题是exec任务将在继续之前等待Selinium进程完成,这不是您想要的bahaviour。您希望运行该过程,在构建期间保持其运行,然后在构建完成时将其拆除。

因此,我认为您可能需要创建一个自定义MSBuild任务来执行此操作。有关某人创建的任务的示例,请参阅以下帖子,该任务将以异步方式运行,并将控制权返回给构建脚本:

http://blog.eleutian.com/2007/03/01/AsyncExecMsBuildTask.aspx

有关从MSBuild调用Java程序的示例(但在这种情况下是同步的),请查看我在此处调用Ant from MSBuild的任务

http://teamprise.com/products/build/

作为MSBuild任务的一部分,您需要将创建的进程ID输出到输出属性,以便在构建脚本的末尾可以调用另一个杀死进程的自定义MSBuild任务。它可以通过查找作为MSBuild中的变量传入的进程id然后调用Process.Kill方法来实现这一点。

Process process = Process.GetProcessById(ProcessId);
process.Kill();

那就是说,你需要小心确保你的kill任务总是在MSBuild中执行,确保它在构建中的错误路径等中被包含。你可以通过让selenium RC启动任务查找其他seleniumRC进程并在启动一个新进程之前杀死它们来使事情变得更有弹性 - 这样如果一个进程由于某种原因没有正确关闭,它只会运行到下一个版本。

无论如何 - 我的回答听起来像很多工作,所以希望其他人会想出一个更简单的方法。您可以在FitNesse测试的测试套件启动中创建seleniumRC进程并在套件拆除中将其终止,或者您可以编写一个自定义任务来扩展FitNesse运行程序任务并在之前启动seleiniumRC asynronously运行测试过程然后将其杀死。

祝你好运,

马丁。

答案 1 :(得分:1)

感谢您的回复!

这就是我到目前为止所做的工作。

我做了一个合适的夹具(非常简单),用我提供的命令行开始一个过程,在我的例子中是startSelenium.bat。 fixture返回ProcessID,因此我可以将其保存在我的fitnesse上下文中并稍后关闭该会话。

我现在可以在我的fitnesse测试中创建一个SuiteSetUp页面,如下所示。

| RunCommandFixture |

|命令行| RunCommand |

| C:\项目... \ startSeleniumRC.bat |>> seleniumprocess |

和像这样的SuiteTearDown

| RunCommandFixture |

|的ProcessID | StopCommand?| |<

这对我有用。根据我的fitnesse测试的要求,没有硒RC。

答案 2 :(得分:0)

如何编写一个简单的.NET应用程序来执行由构建脚本运行的Process.Start(“selenumRC命令行”)?

如果你离硒路线不太远;我可以建议您查看类似的.NET浏览器自动化工具;特别是WatiN或ArtOfTest。这些中的“堆栈”完全是.NET,因此让它们在不同的机器上运行要容易得多。