• docker+selenium Grid搭建自动化分布式测试环境


    自动化测试需要考虑到兼容性的时候,之前的做法是每个执行机上安装不同版本的浏览器,实际上这样做会很浪费硬件资源,现在有了docker容器化技术,让一切变得简单。

    工具清单:

    语言:python 2.7

    虚拟机工作台:workstations 14

    虚拟机系统:Ubuntu 16.04 LTS

    docker:Docker version 17.03.2-ce

    自动化测试软件:selenium 

    虚拟机连接工具:xshell

    node连接器:vnc viewer

    1、安装Ubuntu系统

      首先安装一台Ubuntu系统的服务器,可以在workstations里面创建一个虚拟机,具体百度一下;

    2、安装docker,及获取镜像

      虚拟机创建好了之后使用xshell连接,如果连接不上请参考我的另一篇文章:https://www.cnblogs.com/gcgc/p/9849331.html

      2.1 安装docker

        

      2.2 获取镜像

        分别执行下面三行命令,此次我们需要3个镜像(1个Hub,2个Node),同时为了可以直观的看到实验结果,决定选用自带VNC Server的debug版本

    docker pull selenium/hub
    docker pull selenium/node-firefox-debug
    docker pull selenium/node-chrome-debug

        如果从官方仓库获取慢的话(经测试早上获取速度还可以),可以使用docker中国的官方镜像加速,

    docker pull registry.docker-cn.com/selenium/hub

        或者使用网易的加速器

        新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%dockerconfigdaemon.json(Windows) 来配置 Daemon。

        请在该配置文件中加入(没有该文件的话,请先建一个):

    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }

    3、 使用镜像创建容器

     selenium官网提供好的相关镜像:

       格式为:docker run 参数  镜像名

      docker run -d  -p 5555:4444 --name selenium_hub registry.docker-cn.com/selenium/hub 
      docker run -d -p 5900:5900 --link selenium_hub:hub --name chrome_node selenium/node-chrome-debug
      docker run -d -p 5901:5901 --link selenium_hub:hub --name firefox_node selenium/node-firefox-debug
      参数解释:
      run:使用镜像启动容器;
      -d:  容器后台运行;
      -p: 端口映射,5555是容器宿主机(运行docker的主机)的端口,4444是我们容器(运行selenium_hub虚拟机)的端口。我们把容器的4444端口映射给docker主机的5555端口,就可以通过docker主机的5555端口来访问selenium_hub容器了;
      -P:这里没有用到,使用这个参数不用具体指定端口映射,会把容器默认的端口(如:selenium/hub的默认端口为4444,node为:5900)映射到docker主机的一个随机端口;
      --link :表示新启动的 container 能通过内部网络与selenium_hub:hub 这个container 进行连接,即 node 能与 hub 建立网络通讯;
      --name : 给启动的容器命名一个别名;
      chrome_node:给后面的镜像selenium/node-chrome-debug起别名;
      selenium/node-chrome-debug:需要启动容器的镜像名;
      docker ps -a查看容器运行状态
    chen@ubuntu:~$ docker ps
    CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
    a3110167a391        selenium/node-chrome-debug            "/opt/bin/entry_po..."   About an hour ago   Up About an hour    0.0.0.0:5902->5900/tcp   chrome_node
    b230ed926f09        selenium/node-firefox-debug           "/opt/bin/entry_po..."   About an hour ago   Up About an hour    0.0.0.0:5901->5900/tcp   agitated_jepsen
    ac2bd2b8912f        registry.docker-cn.com/selenium/hub   "/opt/bin/entry_po..."   24 hours ago        Up About an hour    0.0.0.0:5555->4444/tcp   selenium_hub
      可以访问  虚拟机ip:5555/grid/console来验证容器是否已经注册到hub,如下
     安装VNC viewer(只有selenium/node-chrome-debug、selenium/node-firefox-debug镜像才能使用VNC_viewer工具看到浏览器运行界面)
      vnc viewer是一款优秀的远程控制工具软件
      官网下载地址:https://www.realvnc.com/en/connect/download/viewer/
      安装好以后File->New connection,在弹出的界面中输入node的ip和端口号,保存后双击启动。
      连接,会要求输入密码,默认密码就是secret
      

     出现这个页面就代表成功连接了

    编写脚本测试一下

    复制代码
    #coding=utf-8
    from  selenium import webdriver
    firefox_capabilities ={ "browserName": "firefox", "version": "62.0.3",#注意版本号一定要写对 "platform": "ANY", "javascriptEnabled": True, "marionette": True, } browser=webdriver.Remote("http://192.168.179.128:5555/wd/hub",desired_capabilities=firefox_capabilities)#注意端口号5555是我们上文中映射的宿主机端口号 browser.get("http://www.baidu.com") browser.find_element_by_id('kw').send_keys('docker') browser.get_screenshot_as_file("D:/baidu.png") browser.close()
    复制代码

    上面firefox_capabilities参数来自于grid/console这里:

    运行脚本后,可以在VNC中实时看到运行界面

     遗留问题:假如需要在不同版本的firefox浏览器上去运行脚本,测试脚本该怎么写,不同火狐版本的镜像怎么获取,

    以上问题可先参考(http://www.51testing.com/html/60/n-3717560-2.html

  • 相关阅读:
    配置linux 防火墙,只有固定IP和端口才能能访问完美解决
    转.HTML中img标签的src属性绝对路径问题解决办法,完全解决!
    weblogic 安全漏洞问题解决
    转 echarts 的使用时遇到的坑 初始化和销毁,亲测有效!
    在使用 Fortify进行源码扫描时需要做对项目需要做什么?
    eclipse 导出 jar包详细步骤
    转 Fortofy扫描漏洞解决方案2
    JSON 之 SuperObject(1)
    Delphi使用JSON解析调用淘宝IP地址库REST API 示例
    Jsoncpp的使用
  • 原文地址:https://www.cnblogs.com/wsy0202/p/13707713.html
Copyright © 2020-2023  润新知