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>)

运行结果截图

原文地址:https://www.cnblogs.com/R-bear/p/15045809.html