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

小夏 科技 更新 2024-02-24

在更短的时间内提供完整、全面的测试,以确保质量。

敏捷模式被广泛使用,测试尤为重要。 由于需要频繁发布新版本,我们需要更频繁地执行测试用例,以确保不会在发布中引入新的错误。

一个完整的测试过程所需的时间和资源不容忽视,包括测试结果的分析。 如何在更短的时间内提供完整、全面的测试,保证质量,是我们急切解决的问题,也是保证敏捷开发能够顺利进行的关键。

Jenkins 实现了一个无人值守的测试过程,一旦开发完成,下游测试任务就会在测试环境中部署后立即执行。

Jenkins 应用程序在一定程度上节省了人力资源,而 Docker 技术可以实现容器的快速扩展,从而节省了大量的设备资源和时间,并快速完成测试。 这是 Jenkins 管道中非常重要的一部分,如图 1 所示

图1 jenkins pipeline

本文介绍如何使用 Docker Swarm 集群特性和 Selenium Grid 脚本分发功能构建可动态扩容的 Selenium 自动化脚本执行环境。 相较于使用真机作为Selenium自动化脚本执行环境,使用此环境可以大大减少执行环境的维护,例如管理各种浏览器类型和版本。 还可以大大减少脚本执行环境的物力投入,节省各种资源。

Swarm 是 Docker 提供的用于管理 Docker 集群的集群管理工具,它将多个 Docker 主机抽象成一个整体,并通过单个门户管理这些 Docker 主机上的各种 Docker 资源。

Swarm 只是一个调度器和路由器,Swarm 本身并不运行容器,它只是接受来自 docker 客户端的请求,并调度合适的节点来运行容器,这意味着即使 Swarm 因为某种原因宕机,集群中的节点也会照常运行,当 Swarm 恢复运行时,它会收集信息来重建集群。

Swarm 类似于 Kubernetes,但比 Kubernetes 更轻,功能更少。

为了设置 docker swarm 集群环境,我在示例中准备了两台机器。 一个充当管理器节点和工作节点,另一个仅充当工作节点。

假设我们的两台机器 IP 信息如下:

m1:m2:v1 的 Docker 引擎12.从版本 0 开始,docker swarm 原生集成,所以只要每台机器上都安装了 docker,就可以直接使用 docker swarm。 这里就不详细描述docker的安装了,请按照官方的docker swarm文档进行安装。 安装完成后,在每台计算机上启动 docker 服务。 提示:

注意:最好关闭计算机上的防火墙,否则您的集群可能会遇到网络连接问题。

关闭防火墙的命令:systemctl stop firewalld.service

禁用防火墙启动启动命令:systemctl disable firewalld.service

1. 创建管理节点。

我们使用机器 m1 作为管理器节点,并在这台机器上执行命令来初始化集群环境。 命令如下:

sudo docker swarm init --advertise-addr 10.13.181.1

执行此命令时,将返回一个令牌以加入集群,以便其他工作线程可以加入集群。

清单 1用于加入集群的令牌示例。

docker swarm join --token swmtkn-1-5p3kzxhsvlqonst5wr02hdo185kcpdajcu9omy4z5dpmlsyrzj-3phtv1qkfdly2kchzxh0h1xft 10.13.181.1:2377
2. 如果要再次获取加入集群的命令,可以运行以下命令:sudo docker swarm join-token worker3. 将计算机 m1 作为工作节点添加到集群中。 在管理器节点机器上运行清单 1 命令,将机器 m1 作为工作线程添加到 swarm 集群中。

4. 将另一台计算机 M2 作为工作节点添加到集群中。 在机器 M2 上执行上面清单 1 中的命令,实现 M2 加入集群的功能。

5. 运行以下命令以创建集群网络:

sudo docker network create -d overlay seleniumnet
在本例中,SeleniumNet 是我们创建的集群网络的名称。

6. 在新创建的集群网络上创建 Selenium Grid 服务。

a.创建 Selenium Grid Hub 服务。 基于集群网络 SeleniumNet,端口 4444 映射到集群的端口 4444。 将超时时间设置为 120 秒以增加或减少超时时间。 如清单 2 所示:

清单 2创建 Selenium Grid Hub 服务。

sudo docker service create --name selenium-hub --network seleniumnet -p 4444:4444 -egrid_timeout=120 selenium/hub
b.创建 Selenium Grid Firefox 节点服务并连接到您刚刚创建的 Hub 服务。 如清单 3 所示:

清单 3创建 Selenium Grid Firefox 节点服务

sudo docker service create \ name node-firefox \ replicas 5 \ p 7900:5900 \ network seleniumnet \ e hub_port_4444_tcp_addr=selenium-hub \ e hub_port_4444_tcp_port=4444 \selenium/node-firefox-debug bash -c 'se_opts="-host $hostname" /opt/bin/entry_point.sh'
参数说明:-p: 7900:5900Docker 的内部VNC5900暴露在主机的 7900 端口,以便用户可以通过 VNC 从外部监控 Docker 的内部执行。

c.创建 Selenium Grid Chrome 节点服务并连接到您刚刚创建的 Hub 服务。 如清单 4 所示:

清单 4创建节点服务

sudo docker service create \ name node-chrome \ replicas 3 \ p 7901:5900 \ network seleniumnet \ e hub_port_4444_tcp_addr=selenium-hub \ e hub_port_4444_tcp_port=4444 \selenium/node-chrome-debug bash -c 'se_opts="-host $hostname"/opt/bin/entry_point.sh'
参数说明:-p: 7901:5900Docker 的内部VNC5900暴露在主机的 7901 端口,以便用户可以通过 VNC 从外部监控 Docker 的内部执行情况。

7. 检查环境是否搭建成功。 在计算机 m1 上执行以下命令,查看每个服务是否成功启动:

sudo docker service ls
您可以看到 Selenium Hub 和 Firefox 节点以及 Chrome 节点都已成功启动。 Firefox 有 5 个节点副本,Chrome 有 3 个节点副本。 如图2所示

图2Docker 服务清单。

然后我们通过任意机器的 IP 和端口 4444 打开 Selenium Hub URL,检查启动的 Firefox 和 Chrome 节点是否已成功挂载到 Hub 节点。 如图3所示

hub url: 10.13.181.1:4444

图3Selenium Hub 的界面图。

如图 3 所示,5 个 Firefox 节点和 3 个 Chrome 节点已成功挂载到 hub 节点。 请注意,Docker Swarm 环境中提供了 5 个 Firefox 节点和 3 个 Chrome 节点来执行 Selenium 自动测试脚本。

例如,我们需要 10 个可以运行 Firefox 浏览器的容器,对应的命令如下:

sudo docker service scale node-firefox=10
在 Docker Swarm 中运行 Jenkins 作业时,不需要在 Jenkins 中做冗余配置,而是需要在对应的自动化脚本中调用 Selenium Hub,以便远程调用 WebDriver。 这使得在 docker 容器中运行 Selenium 脚本成为可能。

以本文中的场景为例,你只需要在自动化脚本中调用远程 Selenium Hub,如下图所示:

Selenium Grid 用于分布式自动化测试,这意味着一组 Selenium ** 可以在不同的环境中运行,这使得在 Docker 提供的不同容器中运行应用程序变得容易。

Selenium Grid 有两个概念:

Hub:主节点,可以将其视为主调度中心。 node:一个分支节点,您可以将其视为实际执行任务的工作线程。 也就是说,Selenium Grid 中只能有一个主节点,但可以在本地或远程设置 n 个分支节点,测试脚本指向主集线器,主集线器分配给本地远程节点运行测试用例。

要在 Selenium Grid 中运行自动化脚本,我们首先需要创建一个 Remote Driver 对象,该对象可以从图 4 中的源代码实现,截图中的输入参数 Selhub 是 Selenium Hub 的 URL

图4自动化脚本的屏幕截图。

通过调用上述驱动程序,可以在 docker 容器中运行自动化脚本。

在持续集成测试中,将测试部署到 Docker Swarm 上,并通过 Selenium Grid 自动分配节点执行测试,可以提高测试效率,扩大测试范围,在快速迭代中更好地保证交付产品的质量,节省测试资源。

相似文章

    在一篇文章中了解持续集成和持续部署之间的区别

    持续集成 CI 和持续部署 CD 是现代软件开发的关键实践。虽然它们经常同时被提及并具有共同的目标,但它们的方法 目的和对开发周期的影响是不同的。了解这些差异对于任何寻求根据特定项目需求优化工作流程的开发团队来说都至关重要。持续集成是一种开发实践,开发人员通常每天多次将更改合并到存储库中。每个集成都...

    最新筹码86股名单持续集中!

    影响股价走势的因素很多,但筹码的分布无疑是重要的一点,毕竟钱从根本上决定了股价的涨跌。一般来说,筹码越分散,普通投资者越多,股价往往容易下跌,上涨困难。而当普通投资者选择离开市场,筹码逐渐集中在主力手中时,未来股价就很容易上涨。筹码的分散度和集中度可以通过股东人数的指标来反映。因为普通投资者虽然数量...

    通过持续集成和部署管道简化 DevOps 流程

    在软件开发领域,DevOps 开发和运营 是一种将开发和运营团队更紧密地联系在一起的方法 以加速软件交付 提高质量和稳定性。然而,传统的软件开发过程具有繁琐的手动操作和复杂的集成过程的特点,导致效率低下和错误。为了解决这些问题,研究人员和工程师引入了持续集成和部署管道的概念,以通过自动化和自动化测试...

    软件测试测试开发丨持续集成系统简介学习笔记

    本文 测试人员社区,霍格沃茨测试开发协会学生笔记。原文链接 迭代版本,逐步添加功能。v.,v.,v.,v..不断开发新功能。将新功能集成到骨干产品中。持续集成进入下一步,将集成产品交付给用户。设计 开发 测试 交付。支持概念 自动化 自动构建 自动测试 自动发布 快速 高效且易于回溯。支持平台 Je...

    随着菲律宾继续在南海挑衅,是时候让中国放下对清洁的迷恋了

    随着菲律宾继续在南海挑衅,是时候让中国放下对清洁的迷恋了 近日,菲律宾频频邀请美国和澳大利亚在南海进行联合巡逻,甚至法国也表示有意加入,声称将与菲律宾在南海进行巡逻。菲律宾在南海制造紧张局势的动机是显而易见的,目的是促进这些域外国家介入南海,以平衡中国在该地区的影响力。中国对菲律宾持续挑衅的反应相对...