我正在尝试将 MSBuild 中运行的 Fitnesse 测试集成到我在 TFS 上的夜间构建中。
为了使其自包含,我想仅在健身需要时启动 seleniumRC 服务器。
我已经看到有一个“命令行夹具”,但它是用 java 编写的,我可以使用它吗?
我正在尝试将 MSBuild 中运行的 Fitnesse 测试集成到我在 TFS 上的夜间构建中。
为了使其自包含,我想仅在健身需要时启动 seleniumRC 服务器。
我已经看到有一个“命令行夹具”,但它是用 java 编写的,我可以使用它吗?
我想你也许可以。您可以使用 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运行测试过程,然后将其杀死。
祝你好运,
马丁。
感谢您的回复!
这就是我到目前为止所做的。
我制作了一个合适的夹具(非常简单),它使用提供的命令行启动一个进程,在我的例子中是 startSelenium.bat。夹具返回 ProcessID,因此我可以将其存储在我的健身上下文中并稍后关闭该会话。
我现在可以在我的健身测试中创建一个 SuiteSetUp 页面,如下所示。
|运行命令夹具|
|命令行|运行命令?|
|C:\Projects...\startSeleniumRC.bat|>>seleniumprocess|
和这样的 SuiteTearDown
|运行命令夹具|
|进程ID|停止命令?| |<
这对我行得通。我的健身测试要求没有硒 RC 启动。
编写一个简单的 .NET 应用程序来执行由您的构建脚本运行的 Process.Start("selenumRC commandline") 怎么样?
如果您离 Selenium 路线不太远;我可以建议您查看类似的 .NET 浏览器自动化工具吗?特别是 WatiN 或 ArtOfTest。这些中的“堆栈”完全是 .NET,因此让它们在不同的机器上运行要容易得多。