[!note] 一个用于分布式测试的工具,它允许你在多个机器上并行运行测试。通过 Selenium Grid,你可以同时在多个浏览器和操作系统上执行测试,从而加快测试速度并提高测试覆盖率。
主要特点: #
- 并行执行:可以在多个节点上同时运行测试,显著减少测试时间。
- 跨浏览器测试:支持在不同的浏览器(如 Chrome、Firefox、Edge 等)上运行测试。
- 跨平台测试:支持在不同的操作系统(如 Windows、macOS、Linux 等)上运行测试。
- 集中管理:通过一个中心节点(Hub)来管理多个测试节点(Node),方便配置和监控。
基本架构: #
- Hub:中心节点,负责接收测试请求并将其分发到合适的节点。
- Node:测试节点,负责执行实际的测试任务。每个节点可以配置不同的浏览器和操作系统。
示例: #
假设你有一个测试套件需要在 Chrome、Firefox 和 Edge 上运行,你可以配置一个 Selenium Grid,其中包含三个节点,每个节点分别运行不同的浏览器。然后,你可以通过 Hub 将测试分发到这些节点上并行执行。
podman-compose部署 #
version: '3'
services:
selenium-hub:
image: selenium/hub:latest
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
environment:
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
security_opt:
- no-new-privileges:true
selenium-node-chrome:
image: selenium/node-chrome:latest
shm_size: 1g
dns:
- 8.8.8.8
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
depends_on:
- selenium-hub
security_opt:
- no-new-privileges:true
Python代码 #
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from settings import RemoteBrowserAPIHost # hub 部署host
class Browser:
def __init__(self, headless=True, account_info=None):
self.headless = headless
self.input_element = None
self.account_info = account_info
logger.debug(f"其它模式使用远程浏览器")
op = webdriver.ChromeOptions()
self.browser = webdriver.Remote(command_executor=RemoteBrowserAPIHost + "/wd/hub", options=op)
self.session_id = self.browser.session_id
RDS.update_browser_heartbeat(self.session_id)
logger.info(f"浏览器 连接成功!")