• 售前

  • 售后

热门帖子
入门百科

详解Docker Swarm 在一连集成测试中的应用

[复制链接]
迟到399 显示全部楼层 发表于 2021-10-25 19:52:08 |阅读模式 打印 上一主题 下一主题
配景
敏捷(Agile)模式被广泛应用,测试显得尤为紧张。由于需要频仍发布新的版本,我们需要更加频仍的执行测试用例,以确保没有新的 bug 被引入到版本中。
一个完备的测试流程所需要占用的时间和资源也不可忽视,包罗对测试结果的分析都要占用大量的资源。怎样在更短时间内,提供完备、全面的测试以保证质量,是我们急于办理的题目,也是保证敏捷开发能顺利举行的关键。
Jenkins 实现了无人值守的测试流程,开发结束后,一旦在测试情况摆设乐成,鄙俚的测试使命就会马上执行。
Jenkins 的应用在肯定程度上节省了人力资源,而 Docker 技能可以实现容器 (Container) 快速的拓展,从而节省了大量的装备资源和时间,快速的完成测试。这在 Jenkins Pipeline(代码流水线管理)中黑白常紧张的一个环节,如图 1 所示:

图 1. Jenkins Pipeline

本文重要先容怎样使用 Docker Swarm 集群功能和 Selenium Grid 脚天职发功能,来搭建一个可以动态扩容的 Selenium 自动化脚本执行情况。相比于用真实的呆板作为 Selenium 自动化脚本执行情况,使用此套情况可以极大的镌汰对执行情况的维护工作,比如各种欣赏器范例的管理和版本的管理。也能极大的镌汰对脚本执行情况的物质投入,节省各类资源。
搭建 Docker Swarm 集群
Swarm 简介
Swarm 是 Docker 官方提供的一款集群管理工具,用来管理 Docker 集群,它将多少台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
Swarm 只是一个调度器(Scheduler)加路由器(Router),Swarm 本身不运行容器,它只是接受 Docker 客户端发送过来的请求,调度得当的节点来运行容器,这意味着,纵然 Swarm 由于某些缘故原由挂掉了,集群中的节点也会照常运行,当 Swarm 重新规复运行之后,它会收集重修集群信息。
Swarm 和 Kubernetes 比力类似,但是更加轻,具有的功能也较 Kubernetes 更少一些。
情况预备
为了搭建 Docker Swarm 集群情况,我在示例中预备了两台呆板。一台作为 manager 节点,同时也作为一个 worker 节点,另一台只作为一个 worker 节点。
这里假设我们的两个呆板 IP 信息如下:
      
  • M1:10.13.181.1  
  • M2:10.13.181.2
Docker Engine 从 V1.12.0 版本开始,原生集成了 Docker Swarm,所以只要在每台呆板上安装 Docker,就可以直接使用 Docker Swarm。在这里,关于 Docker 的安装不再详细先容,请按照官方 Docker Swarm 文档 举行安装。安装完成后,在每台呆板大将 Docker 服务启动。
提示:
注意:最好关闭呆板上的防火墙,否则大概会出现 Swarm 集群网络连接题目。
关闭防火墙的下令:systemctl stop firewalld.service
克制防火墙开机启动下令:systemctl disable firewalld.service
步调
1、创建管理节点。
我们将呆板 M1 作为 manager 节点,在这台呆板上执行下令来初始化集群情况。下令如下:
  1. sudo docker swarm init --advertise-addr 10.13.181.1
复制代码
执行此下令后,会返回一个用于参加集群的令牌(Token),以便其他 worker 参加此集群。
清单 1. 参加集群令牌示例:
复制代码 代码如下:docker swarm join --token SWMTKN-1-5p3kzxhsvlqonst5wr02hdo185kcpdajcu9omy4z5dpmlsyrzj-
3phtv1qkfdly2kchzxh0h1xft 10.13.181.1:2377
假如想再次获取参加集群的下令,可以通过执行以下下令获取:
  1. sudo docker swarm join-token worker
复制代码
2、将呆板 M1 也作为 worker 节点添加到集群。
在 manager 节点呆板上运行清单 1 的下令,即可将呆板 M1 也作为 worker 参加 swarm 集群当中。
3、将另一台呆板 M2 作为 worker 节点添加到集群。
在呆板 M2 上执行上述清单 1 中的下令,即可实现 M2 参加集群的功能。
4、运行如下下令创建集群网络:
  1. sudo docker network create -d overlay seleniumnet
复制代码
这里,seleniumnet 即是我们所创建的集群网络名称。
5、在新建的集群网络上创建 Selenium Grid 服务。
a. 创建 Selenium Grid Hub 服务。基于集群网络 seleniumnet,将 4444 端口映射到集群的 4444 端口,将 timeout 时间设置为 120 秒,可以增大或镌汰 timeout 时间,如清单 2 所示。
清单 2. 创建 Selenium Grid Hub 服务:
复制代码 代码如下:sudo docker service create --name selenium-hub --network seleniumnet -p 4444:4444 -e
GRID_TIMEOUT=120 selenium/hub
b. 创建 Selenium Grid Firefox 节点服务并连接到刚创建 Hub 服务。如清单 3 所示。
清单 3. 创建 Selenium Grid Firefox 节点服务:
  1. sudo docker service create \
  2. --name node-firefox \
  3. --replicas 5 \
  4. -p 7900:5900 \
  5. --network seleniumnet \
  6. -e HUB_PORT_4444_TCP_ADDR=selenium-hub \
  7. -e HUB_PORT_4444_TCP_PORT=4444 \
  8. selenium/node-firefox-debug bash -c 'SE_OPTS="-host $HOSTNAME" /opt/bin/entry_point.sh'
复制代码
参数阐明:
-p: 7900:5900 将 Docker 内部 VNC5900 暴露到宿主机的 7900 端口,使得用户可以通过 VNC 从外面监控 Docker 内部的执行情况。
c. 创建 Selenium Grid Chrome Node 服务并连接到刚创建 Hub 服务。如清单 4 所示。
清单 4. 创建节点服务:
  1. sudo docker service create \
  2. --name node-chrome \
  3. --replicas 3 \
  4. -p 7901:5900 \
  5. --network seleniumnet \
  6. -e HUB_PORT_4444_TCP_ADDR=selenium-hub \
  7. -e HUB_PORT_4444_TCP_PORT=4444 \
  8. selenium/node-chrome-debug bash -c 'SE_OPTS="-host $HOSTNAME"
  9. /opt/bin/entry_point.sh'
复制代码
参数阐明:
-p: 7901:5900 将 Docker 内部 VNC5900 暴露到宿主机的 7901 端口,使得用户可以通过 VNC 从外面监控 Docker 内部的执行情况。
6、检查情况搭建是否乐成。在呆板 M1 上执行以下下令,查看每个服务是否启动乐成:
  1. 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,对应的下令如下:
  1. 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

图 4. 自动化脚本的代码截图

通过调用上述的 driver,就可以实现将自动化脚本运行在 Docker Container 中。
结束语
在持续集成测试中,将测试摆设到 Docker Swarm 中,通过 Selenium Grid 自动分配执行测试的节点,可以提升测试服从,增大测试的范围,在快速迭代中能够更好的保证所交付的产品格量,节省测试资源。
原文链接: https://www.ibm.com/developerw ... .html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作