> 文章列表 > 高效自动化测试框架-优秀实践03-使用SeleniumGrid

高效自动化测试框架-优秀实践03-使用SeleniumGrid

高效自动化测试框架-优秀实践03-使用SeleniumGrid

高效自动化测试框架-优秀实践03-使用SeleniumGrid

Docker安装

  1. 切换管理权限 su root

  2. 安装Docker依赖 yum install -y yum-utils device-mapper-persistent-data lvm2

  3. 配置依赖下载源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  4. 安装docker yum makecache fast && yum -y install docker-ce

  5. 检查docker状态为loaded

    systemctl status docker

    systemctl start docker

SeleniumServer安装

实际上可以使用jar包安装,docker方式安装,k8s方式安装,考虑到直接jar包安装不稳定,k8s相对复杂,那就直接docker安装好了

使用 Hub 与 Node 分工的方式启动 Grid 的 Docker 命令如下:

# 创建网络
docker network create grid
​
# 启动 Hub
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.4.0
​
# 启动一个 Chrome Node
docker run -d -p 7900:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \\--shm-size="2g" \\-e SE_EVENT_BUS_PUBLISH_PORT=4442 \\-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \\selenium/node-chrome:4.4.0

还可以按需添加别的浏览器 Node,如下命令添加了 Edge 和 Firefox Node。

# 添加一个 Edge Node
docker run -d -p 7901:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \\--shm-size="2g" \\-e SE_EVENT_BUS_PUBLISH_PORT=4442 \\-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \\selenium/node-edge:4.4.0
​
# 添加一个 Firefox Node
docker run -d -p 7902:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \\--shm-size="2g" \\-e SE_EVENT_BUS_PUBLISH_PORT=4442 \\-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \\selenium/node-firefox:4.4.0

实际的调用代码

from selenium import webdriver
from config.selenium_grid import *
from selenium.webdriver import Firefox, Chrome, FirefoxProfile, ChromeOptions
​
​
class WebDriver:def __init__(self):self.web_driver = Nonepass
​def get_web_driver(self):# 判断是否需要使用remote的driverif use_selenium_grid:# TODO 需要对获取不到driver的情况做异常处理self.web_driver = webdriver.Remote(# selenium_grid_command_executor = 'http://192.168.0.105:4444'command_executor=selenium_grid_command_executor,options=webdriver.ChromeOptions())else:# 初始化本地的web_driverself._init_chrome()return self.web_driver
​def _init_firefox(self):profile = FirefoxProfile()self.web_driver = Firefox(profile)
​def _init_chrome(self):options = ChromeOptions()config = dict()config['profile.default_content_settings.popups'] = 0print("options", options)self.web_driver = Chrome(options=options)
​

上面的代码中,会去读取配置,如果配置中需要使用selenium_grid, 则低啊用selenium_grid的driver,否则直接初始化本地的web_driver

安装命令参考

序号 安装场景 安装命令
1 jar包方式_standalone模式 java -jar selenium-server-<version>.jar standalone
2 jar包方式_使用 Hub 与 Node 分工的方式来启动 Grid # 启动 Hub java -jar selenium-server-<version>.jar hub # 启动 Node 1 java -jar selenium-server-<version>.jar node --port 5555 # 启动 Node 2 java -jar selenium-server-<version>.jar node --port 6666
3 Docker方式_Standalone 模式 # 启动一个 Chrome Standalone Grid docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome:4.4.0
4 Docker方式_使用 Hub 与 Node 分工的方式来启动 # 创建网络 docker network create grid # 启动 Hub docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.4.0 # 启动一个 Chrome Node docker run -d -p 7900:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \\ --shm-size="2g" \\ -e SE_EVENT_BUS_PUBLISH_PORT=4442 \\ -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \\ selenium/node-chrome:4.4.0
5 Docker方式增加Node # 添加一个 Edge Node docker run -d -p 7901:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \\ --shm-size="2g" \\ -e SE_EVENT_BUS_PUBLISH_PORT=4442 \\ -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \\ selenium/node-edge:4.4.0 # 添加一个 Firefox Node docker run -d -p 7902:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \\ --shm-size="2g" \\ -e SE_EVENT_BUS_PUBLISH_PORT=4442 \\ -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \\ selenium/node-firefox:4.4.0

具体的项目地址

https://github.com/WaterLoran/LoranTest

待改进的地方

  1. 获取web_driver失败的时候,需要做异常处理

  2. 期望增加装饰器,支持在用例层面设置使用本地还是远端的driver

  3. 所调用的selenium_grid中的web_driver启动非常慢,并且页面比较小,和本地的浏览器不一样,需要做额外的处理

参考博客地址: Selenium Grid 搭建及使用 - 磊磊落落