【发布时间】:2010-09-11 03:25:09
【问题描述】:
我正在尝试将 MSBuild 中运行的 Fitnesse 测试集成到我在 TFS 上的夜间构建中。
为了使其自给自足,我想仅在健身需要时启动 seleniumRC 服务器。
我看到有一个“命令行装置”,但它是用 java 编写的,我可以使用它吗?
【问题讨论】:
标签: selenium tfs selenium-rc fitnesse fit-framework
我正在尝试将 MSBuild 中运行的 Fitnesse 测试集成到我在 TFS 上的夜间构建中。
为了使其自给自足,我想仅在健身需要时启动 seleniumRC 服务器。
我看到有一个“命令行装置”,但它是用 java 编写的,我可以使用它吗?
【问题讨论】:
标签: selenium tfs selenium-rc fitnesse fit-framework
我想你也许可以。您可以使用 任务在 MSBuild 中轻松调用任何进程。但是,这样做的问题是 exec 任务将等待 Selinium 进程完成后再继续,这不是您想要的行为。您希望运行该过程,在构建期间保持其运行,然后在构建完成时将其拆除。
因此,我认为您可能需要创建一个自定义 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 进程并在启动新进程之前杀死它们来使事情更具弹性 - 这样,如果一个进程由于某种原因没有正确关闭,它只会运行到下一个版本。
无论如何 - 我的回答听起来需要做很多工作,所以希望其他人能想出一个更简单的方法。您可能可以在测试套件中创建 seleniumRC 进程,启动 FitNesse 测试并在套件拆解中将其杀死,或者您可以编写自定义任务来扩展您的 FitNesse 运行器任务并在之前异步启动 seleniumRC运行测试进程,然后将其杀死。
祝你好运,
马丁。
【讨论】:
感谢您的回复!
这就是我到目前为止所做的。
我制作了一个合适的夹具(非常简单),它使用提供的命令行启动一个进程,在我的例子中是 startSelenium.bat。夹具返回 ProcessID,因此我可以将其存储在我的健身上下文中并稍后关闭该会话。
我现在可以在我的健身测试中创建一个如下所示的 SuiteSetUp 页面。
|RunCommandFixture|
|命令行|运行命令?|
|C:\Projects...\startSeleniumRC.bat|>>seleniumprocess|
还有这样的 SuiteTearDown
|RunCommandFixture|
|进程ID|停止命令?| |
这对我有用。我的健身测试要求没有硒 RC 启动。
【讨论】:
编写一个简单的 .NET 应用程序,它执行由您的构建脚本运行的 Process.Start("selenumRC commandline") 怎么样?
如果您离 Selenium 路线不太远;我可以建议您查看类似的 .NET 浏览器自动化工具吗?特别是 WatiN 或 ArtOfTest。其中的“堆栈”完全是 .NET,因此让它们在不同的机器上运行要容易得多。
【讨论】: