1

我正在尝试将 MSBuild 中运行的 Fitnesse 测试集成到我在 TFS 上的夜间构建中。

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

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

4

3 回答 3

1

我想你也许可以。您可以使用 MSBuild 轻松调用任何进程任务。但是,这样做的问题是 exec 任务将等待 Selinium 进程完成后再继续,这不是您想要的行为。您想运行该过程,在构建期间保持其运行,然后在构建完成时将其拆除。

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

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

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

http://team.com/products/build/

作为 MSBuild 任务的一部分,您需要将创建的进程 ID 输出到输出属性,以便在构建脚本结束时调用另一个自定义 MSBuild 任务来终止该进程。它可以通过在 MSBuild 中查找作为变量传入的进程 ID,然后调用Process.Kill方法来做到这一点,即

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

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

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

祝你好运,

马丁。

于 2008-09-19T09:09:11.237 回答
1

感谢您的回复!

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

我制作了一个合适的夹具(非常简单),它使用提供的命令行启动一个进程,在我的例子中是 startSelenium.bat。夹具返回 ProcessID,因此我可以将其存储在我的健身上下文中并稍后关闭该会话。

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

|运行命令夹具|

|命令行|运行命令?|

|C:\Projects...\startSeleniumRC.bat|>>seleniumprocess|

和这样的 SuiteTearDown

|运行命令夹具|

|进程ID|停止命令?| |<

这对我行得通。我的健身测试要求没有硒 RC 启动。

于 2008-09-23T08:51:29.847 回答
0

编写一个简单的 .NET 应用程序来执行由您的构建脚本运行的 Process.Start("selenumRC commandline") 怎么样?

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

于 2008-09-19T09:06:53.333 回答