详解Docker Swarm 在持续集成测试中的应用

2020-06-17 06:48:06易采站长站整理

-e HUB_PORT_4444_TCP_PORT=4444
selenium/node-chrome-debug bash -c 'SE_OPTS="-host $HOSTNAME"
/opt/bin/entry_point.sh'

参数说明:

-p: 7901:5900 将 Docker 内部 VNC5900 暴露到宿主机的 7901 端口,使得用户可以通过 VNC 从外面监控 Docker 内部的执行情况。

6、检查环境搭建是否成功。在机器 M1 上执行以下命令,查看每个服务是否启动成功:


sudo docker service ls

可以看到 Selenium Hub 和 Firefox 节点、Chrome 节点都已经成功启动。Firefox 的节点副本是 5,Chrome 的节点副本是 3,如图 2 所示。

图 2. Docker 服务清单

我们再通过任意一台机器的 IP 加 4444 端口来打开 Selenium Hub URL 来查看已启动的 Firefox 和 Chrome 节点是否已经成功挂载到 Hub 节点上,如图 3 所示。

Hub url: 10.13.181.1:4444

图 3. Selenium Hub 的界面图

从图 3 可以看出,5 个 Firefox 节点和 3 个 Chrome 节点都已经成功挂载到 Hub 节点上。说明此时 Docker Swarm 环境里已经提供了 5 个 Firefox 节点和 3 个 Chrome 节点可以用来执行 Selenium 自动化测试脚本。

扩容方法

用户可以根据脚本执行数量,随时动态的扩容各个节点的数量,提高自动化脚本的执行效率,例如我们需要 10 个可以运行 Firefox 浏览器的 Container,对应的命令如下:


sudo docker service scale node-firefox=10

在 Docker Swarm 运行 Jenkins Job

用户在 Docker Swarm 中运行 Jenkins Job,并不需要在 Jenkins 做多余的配置,而是需要在对应的自动化脚本中调用 Selenium Hub,从而以远程的方式调用 WebDriver。这样就实现了在 Docker Container 中运行 Selenium 脚本。

以本文中的场景为例,只需要在自动化脚本中调用远程 Selenium Hub 即可,如下所示:http://9.111.139.104:4444/wd/hub

在 Selenium Grid 中运行自动化脚本

基本概念

Selenium Grid,用于分布式自动化测试,也就是说一套 Selenium 代码可在不同的环境上运行,这样做可以方便的将应用运行在 Docker 所提供的不同 Container 中。

Selenium Grid 有两个概念:

Hub:主节点,你可以看作总调度中心。
Node:分支节点,你可以看作是真正执行任务的 worker。

也就是说在 Selenium Grid 中只能有一个主 Hub,但可以在本地或远程建立 N 多个分支节点,测试脚本指向主 Hub,由主 Hub 分配给本地/远程节点运行测试用例。

实现方式

要实现在 Selenium Grid 中运行自动化脚本,首先我们要创建一个 remote driver 的对象,可以通过图 4 源码实现,截图中所对应的输入参数 selhub 是 Selenium hub 的 URL:http://9.111.139.104:4444/wd/hub