使用 Jenkins Grid 插件并行运行测试

软件测试 网络驱动程序 詹金斯
2022-01-28 23:43:26

我在 Grid 2 独立服务器(和 Jenkins Selenium Grid 插件)旁边的 Windows 2008(64 位)服务器上运行 Watir-Webdriver 测试的 Jenkins 1.499。

我可以通过 Jenkins 通过独立服务器(或插件)运行我的测试,但它们不会并行运行。我需要做什么才能让它们并行运行?

我已经尝试了 parallel_tests gem,但fork()似乎在 Windows 环境中实现得不是很好。我可能需要使用 TestNG 来管理并行性,但我不太确定,如果有人知道,可以使用一些建议吗?

4个回答

如果您使用的是 Ruby,我相信您应该能够使用绿色线程来避免 fork()

http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_threads.html

虽然技术上不是真正的并行性,但如果您只是启动 Watir-Webdriver 测试,它应该可以正常工作。这个想法是分别启动每个线程并让每个线程运行一个测试脚本。

在 TestNG.xml 文件中有一个属性“parallel”,可用于配置同时并行运行多个测试方法/类

<suite name="mySuite" parallel="methods" thread-count="5">
<suite name="mySuite" parallel="tests" thread-count="5">
<suite name="mysuite" parallel="classes" thread-count="5">
<suite name="mySuite" parallel="instances" thread-count="5">

文章http://technologyandleadership.com/testng-running-tests-in-parallel/对所有这些值进行了深入的描述。

你可以从你的构建工具中派生测试任务,不管它是什么。使用 Maven,它被称为“surefire 插件”,使用 Gradle,您只需在测试任务中设置“maxParallelTask​​s”,使用 TestNG,您可以使用 @Aruna 建议的线程数。这完全取决于您使用什么来执行测试。当 selenium 测试被分叉时,网格集线器上会打开多个会话,它将在它映射到的 Grid 节点上打开多个浏览器会话。

仅适用于偶然发现此问题的任何人。

我已集成到我的环境中的解决方案如下,而且非常简单。

我使用 Build Flow 插件创建了一个 Build Flow 作业。

我创建了 3 个 Maven 风格的作业,每个作业都指向一个包含不同测试类的不同 XML 文件。

在 Build Flow 作业中,我能够添加以下代码以使 3 个 Maven 作业并行运行。

parallel (
// job 1, 2 and 3 will be scheduled in parallel.
{ build("job1") },
{ build("job2") },
{ build("job3") }
)

这基本上是在您运行 Build Flow 作业时启动 job1、job2 和 job3 以并行运行和运行。

我遇到的一个问题是它只能并行运行 2 个作业,而要运行第 3 个作业,它必须等待其他作业之一完成。

我发现我的 Jenkins 只指定了 2 个执行者(我不知道这是否是 Jenkins 中的初始规范)。

这基本上意味着我一次只能运行 2 个作业,因为只有 2 个作业执行者。

要解决这个问题,请转到 Manage Jenkins > Configure System > # of executors

您可以在此处指定执行者的数量。我将我的更改为 5,因此如果我愿意,我最多可以同时运行 5 个作业。

就是这样,它很容易实现。我发现这种方法也很有用的是,它让您可以更好地控制正在发生的一切,因为它是一个层次结构。它使您能够控制测试过程的每个阶段。并且还使您能够隔离问题以进行故障排除。