51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1309|回复: 0
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 527 天

    连续签到: 4 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-6 15:50:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 测试积点老人 于 2018-12-6 15:52 编辑

    背景
    敏捷(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. 加入集群令牌示例:
    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 服务:
    1. 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
    复制代码


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 06:27 , Processed in 0.067195 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表