美文网首页
Selenium 系列篇(八):Docker 分布式搭建

Selenium 系列篇(八):Docker 分布式搭建

作者: AirPython | 来源:发表于2020-05-26 22:55 被阅读0次
    image

    1. 前言

    上篇文章 提到可以利用 Selenium Grid 搭建分布式自动化测试环境

    由于 Docker 可以高效地利用系统资源,提供一致性运行环境,不需要额外配置,更加方便进行持续集成和持续交付等优势

    所以,在实际项目中,一般会采用 Docker 容器来搭建分布式环境

    2.下载镜像

    首先,在服务器下载安装 Docker CE 免费版本,并配置加速镜像源,然后重启 Docker 应用

    # 编辑文件,输入镜像加速地址
    sudo vi /etc/docker/daemon.json
    
    # 输入地址
    # Docker中国官方镜像加速
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    
    # 重启docker
    systemctl restart docker
    

    接着,使用 docker pull 命令下载下面 3 个镜像到本地:

    1、selenium/hub:主节点镜像 hub

    2、selenium/node-chrome:node 节点

    3、selenium/node-chrome-debug:带有 VNC 服务端,便于观看执行步骤

    # 主hub
    docker pull selenium/hub
    
    # node节点
    docker pull selenium/node-chrome
    
    # selenium/node-chrome-debug VNC Server
    docker pull selenium/node-chrome-debug
    

    3.运行容器

    使用 docker run 命令,可以直接通过镜像创建一个容器并运行起来

    首先,创建并启动 1 个主 hub 容器,并使用 --name 参数进行重命名

    # 主hub
    # -P:将容器端口映射到docker主机的一个随机端口上
    # --name:重命名,便于管理
    docker run -d -P --name hub_xag selenium/hub
    

    然后,创建并启动 1 个 Chrome node 节点容器,并使用 -p 参数,将容器的 5900 端口映射到主机的 5903 端口

    # node节点
    # --link:关联到hub主节点
    docker run -d -p 5903:5900 --link hub_xag:hub --name node1 selenium/node-chrome
    

    最后,创建一个 chrome-debug 容器,并将端口映射到主机的 5900 端口上

    # chrome-debug容器
    docker run -d -p 5900:5900 --link hub_xag:hub selenium/node-chrome-debug
    

    使用 docker ps -a 命令即可以查看容器的运行状态及端口映射情况

    image

    需要注意的是,如果是部署在服务器,需要配置服务器防火墙和安全组规则

    4.查看节点及启动 VNC

    使用 Chrome 打开通过 Docker 主机 IP + Hub 主节点映射的端口号组成的 URL

    比如:http://139.199.xx.xx/grid/console

    可以很直观地看到当前 Hub 主节点下所有注册的 Node 节点列表

    image

    然后,在本机上下载安装 VNC Viewer,打开客户端软件

    输入 Docker 主机 IP + chrome-debug 映射在 Docker 主机的端口号,就可以实时查看 Docker 主机的运行情况

    比如:http://139.199.xx.xx:5900

    需要注意的是,第一次登陆默认的密码是:secret

    image

    5.编写脚本并运行

    随手编写一段脚本,将 command_executor 参数中的地址设置为上面 Hub 主节点 IP 地址

    from selenium import webdriver
    
    driver = webdriver.Remote(
    command_executor='http://139.199.xx.xx:32768/wd/hub',
    desired_capabilities={'browserName': 'chrome'}
    )
    
    driver.get('https://www.baidu.com')
    
    driver.find_element_by_id("kw").send_keys("欢迎关注公众号:AirPython")
    driver.find_element_by_id("su").click()
    
    print(driver.page_source)
    

    运行脚本,可以发现 VNC Viewer 会展示完整的自动化过程。

    6.最后

    实际项目中,可以下载 selenium/node-firefox-debug 镜像,通过镜像开启多个容器节点,只要保证端口号不冲突即可。

    如此,结合 Docker,Selenium Grid 可以非常方便地创建、管理分布式自动化测试环境。

    更多 Python 自动化相关的技术干货,可以关注公众号 AirPython 来解锁。

    如果你觉得文章还不错,请大家点赞分享下,你的肯定是我最大的鼓励和支持。

    推荐阅读
    用 Python 分析微信群聊记录,是怎样一种体验?

    只需 10 行代码,Python 教你自制屏幕翻译工具,高效办公

    为了追到小姐姐,我用 Python 制作了一个机器人

    相关文章

      网友评论

          本文标题:Selenium 系列篇(八):Docker 分布式搭建

          本文链接:https://www.haomeiwen.com/subject/noibahtx.html