zoukankan      html  css  js  c++  java
  • docker+selenium搭建分布式web自动化测试环境

    什么是Selenium Grid

    Selenium Grid是Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。
    Selenium Grid有两个版本——老版本Grid 1和新版本Grid 2。我们只对新版本做介绍,因为Selenium团队已经逐渐遗弃老版本了。
    Selenium Grid 主要使用 master-slaves (or hub-nodes) 理念 --一个 master/hub 和多个 基于master/hub注册的子节点 slaves/nodes。当我们在master上基于不同的浏览器/系统运行测试用例时,master将会分发给适当的node运行。

    什么时候用Selenium Grid

    • 同时在不同的浏览器、操作系统和机器上运行测试。最大程度用于兼容性测试
    • 减少运行时间

    怎样启动Selenium Grid

    1. 命令行启动

    将会使用2台机器,一台运行hub另一台运行node

    1、安装并运行selenium/hub:

    docker run --name=hub -p 5001:4444 -e GRID_TIMEOUT=0 -e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true -e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 -e GRID_BROWSER_TIMEOUT=15000 -e GRID_TIMEOUT=30000 -e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium
    

    2、安装并运行selenium/node-chrome-debug

    docker run --name=chrome -p 5902:5900 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null -v /dev/shm:/dev/shm --link hub -d selenium/node-chrome-debug:3.7.1-beryllium
    

    在浏览器中打开hub地址 http://127.0.0.1:5001/grid/console ,会展示已经挂载到hub上的node节点

    如果hub节点和node节点在同一服务器上可以用 --link参数指定hub即可,若hub与node不在同一节点,则需要另加HUB_PORT_4444_TCP_ADDR和HUB_PORT_4444_TCP_PORT参数

    docker run --name=chrome2 -p 5903:5900 -e HUB_PORT_4444_TCP_ADDR=shifeng.online -e HUB_PORT_4444_TCP_PORT=5001 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null -v /dev/shm:/dev/shm -d selenium/node-chrome-debug:3.7.1-beryllium --restart 
    

    --restart 参数会在容器异常时重启,比如hub被压挂了等,在搭建重要项目是都是加上该参数
    打开远程hub地址

    3、安装VNC远程浏览器环境

    debug结尾的镜像都带有VNC服务端,本机安装VNC客户端,即可远程连接。
    下载地址:https://www.realvnc.com/en/connect/download/viewer/
    输入远程地址:127.0.0.1:5902
    密码:secret
    测试代码

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    """
    @author:chenshifeng
    @file:test_grid.py
    @time:2020/12/26
    """
    import time
    from selenium import webdriver
    from selenium.webdriver import TouchActions
    

    class TestGrid:
    def setup_method(self):
    self.driver = webdriver.Remote('http://127.0.0.1:5001/wd/hub')
    self.driver.maximize_window()
    self.driver.implicitly_wait(5)

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">teardown_method</span>(<span class="hljs-params">self</span>):</span>
        self.driver.quit()
    
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_grid</span>(<span class="hljs-params">self</span>):</span>
        self.driver.get(<span class="hljs-string">"https://www.baidu.com/"</span>)
        el = self.driver.find_element_by_id(<span class="hljs-string">'kw'</span>)
        el_search = self.driver.find_element_by_id(<span class="hljs-string">'su'</span>)
        el.send_keys(<span class="hljs-string">'selenium测试'</span>)
        action = TouchActions(self.driver)
        action.tap(el_search)  <span class="hljs-comment"># 点击</span>
        action.perform()
        action.scroll_from_element(el, <span class="hljs-number">0</span>, <span class="hljs-number">10000</span>).perform()
        time.sleep(<span class="hljs-number">5</span>)
    

    运行结果截图

  • 相关阅读:
    LBS 经纬度定位
    LBS 经纬度定位
    GPS定位基本原理
    GPS定位基本原理
    Android Studio 之 启动和停止服务
    Android Studio 之 启动和停止服务
    【算法】最短路——两点最短总权和
    【算法】最短路——两点最短总权和
    【郑轻】[1743]解方程
    【郑轻】[1743]解方程
  • 原文地址:https://www.cnblogs.com/R-bear/p/15045809.html
Copyright © 2011-2022 走看看