高效自动化测试框架-优秀实践03-使用SeleniumGrid
高效自动化测试框架-优秀实践03-使用SeleniumGrid
Docker安装
-
切换管理权限 su root
-
安装Docker依赖 yum install -y yum-utils device-mapper-persistent-data lvm2
-
配置依赖下载源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安装docker yum makecache fast && yum -y install docker-ce
-
检查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 = None pass def get_web_driver(self): # 判断是否需要使用remote的driver if 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_driver self._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'] = 0 print("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
待改进的地方
-
获取web_driver失败的时候,需要做异常处理
-
期望增加装饰器,支持在用例层面设置使用本地还是远端的driver
-
所调用的selenium_grid中的web_driver启动非常慢,并且页面比较小,和本地的浏览器不一样,需要做额外的处理
参考博客地址: Selenium Grid 搭建及使用 - 磊磊落落