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运行。

docker+selenium搭建分布式web自动化测试环境_第1张图片

什么时候用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节点

docker+selenium搭建分布式web自动化测试环境_第2张图片

如果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地址

docker+selenium搭建分布式web自动化测试环境_第3张图片

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)

    def teardown_method(self):
        self.driver.quit()

    def test_grid(self):
        self.driver.get("https://www.baidu.com/")
        el = self.driver.find_element_by_id('kw')
        el_search = self.driver.find_element_by_id('su')
        el.send_keys('selenium测试')
        action = TouchActions(self.driver)
        action.tap(el_search)  # 点击
        action.perform()
        action.scroll_from_element(el, 0, 10000).perform()
        time.sleep(5)

运行结果截图

docker+selenium搭建分布式web自动化测试环境_第4张图片

你可能感兴趣的:(docker,selenium,linux,chrome,nginx)