在多个浏览器中并行执行

Behat in Multiple Browsers in Parallel

我们目前使用 Behat 3 为我们的网站自动执行 BDD 测试。

当前设置使用 Jenkins to run Selenium which attaches to Firefox and uses XVFB 渲染(这允许我们在出现问题时保存屏幕截图)。

这非常适合测试站点(包括 JavaScript)是否正常运行以及用户是否可以成功执行每个记录的任务。

我希望扩展我们的测试设施,我想添加的一件事是检查多个浏览器的能力。这非常重要,因为我们偶尔会遇到可能破坏功能的怪癖。

由于目前测试需要一个多小时才能完成 运行(我们在 Jenkins 上为该站点提供了 4 个套件),我希望同时 运行 所有浏览器时间。如果我找不到同时执行此操作的方法,那么我可能会设置多个 Behat 配置文件并且 运行 每个系列。

我一直在寻找一种可能的解决方案是 Ghostlab。这将使我们能够同时跨多个浏览器和多个设备(包括移动设备)进行测试。问题是我找不到以有意义的方式将其加入 Behat 的方法。

我可以 运行 一个浏览器连接到 Ghostlab,这会导致在所有连接的浏览器上执行相同的操作,但是,如果不是由 Selenium 控制的浏览器崩溃,我不会知道我们将如何捕获该信息。

TL;DR:我有什么方法可以 运行 跨多个浏览器并行进行 BDD(最好是 Behat)测试,并从任何失败的浏览器中捕获信息?

这就是 multi-configuration jobs(或矩阵作业)在 Jenkins 中的设计目的。

您指定了一次作业配置,但添加了一个或多个每次都应该更改的变量,构建了一个组合矩阵(在您的例子中,矩阵只有一个维度:浏览器)。

Jenkins 然后 运行 使用多个 sub-builds 并行构建一个主构建——矩阵中的每个组合一个。然后您可以清楚地看到每个组合的结果。

这要求您的测试作业可以参数化,即您可以在 运行 时选择哪个浏览器应该 运行,而不是 运行 将所有测试集中在一个单一的工作。

Jenkins wiki 关于此功能的文档很少,但有一些关于如何设置它的好 blog posts(和 Stack Overflow 问题)。

矩阵作业将使用 Jenkins 中所有可用的 "executors",以尽可能并行 运行 构建。
在默认的 Jenkins 安装中,有两个可用的执行程序,但您可以更改它,或者通过添加 further build machines.

来扩展 Jenkins