【Linux系统 Docker部署 Selenium Grid分布式执行UI测试用例】

一、Linux安装docker

  1. Centos安装docker
# 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# 4: 开启Docker服务
sudo service docker start
  1. Ubantu安装docker
# 1: 安装docker
sudo apt-get install -y docker.io
# 2:启动docker服务
systemctl start docker

二、docker拉取selenium-hub、selneium-node镜像与创建启动容器

hub作用: 中心节点,负责向各个子节点进行下发任务和收集测试结果
node作用: 子节点,负责接受中心节点的测试任务与执行 (可以创建不同类型浏览器的)

# 1: 拉取selenium-hub镜像
docker pull selenium/hub:4.3.0-20220706

# 2: 拉取selenium-node-chrome镜像
docker pull selenium/node-chrome:4.3.0-20220706

# 3: 创建grid网卡 hub容器与node容器要处于同一网络下
docker network create grid

# 4: 创建selenium-hub容器
docker run -d -p 6662-6664:4442-4444 --net grid --name selenium-hub2 selenium/hub:4.3.0-20220706
#-d 后台运行 | -p将宿主机6662-6664端口 映射至容器中4442-4444端口 | --net grid 使用grid网卡 |
#--name selenium-hub2 容器名称 | selenium/hub:4.3.0-20220706 selenium-hub镜像名称

# 5: 创建selenium-node-chrome容器
docker run -P -d --net grid --shm-size="2g" -e SE_EVENT_BUS_HOST=selenium-hub2 -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 --name chrome-node1  selenium/node-chrome:4.3.0-20220706
# -P随机分配一个端口并映射宿主机 |-d后台运行 | --net grid 使用grid网卡 |
# --shm-size="2g" 设置共享内存大小2g | 
# -e SE_EVENT_BUS_HOST=selenium-hub2 指定容器内的SE_EVENT_BUS_HOST环境变量为selenium-hub2 |
# -e SE_EVENT_BUS_PUBLISH_PORT=4442 指定容器内的SE_EVENT_BUS_PUBLISH_PORT环境变量为4442 |
# -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 指定容器内的SE_EVENT_BUS_SUBSCRIBE_PORT环境变量为4443 |
# --name chrome-node1  容器名称chrome-node1 |
# selenium/node-chrome:4.3.0-20220706   selenium-node-chrome镜像名称

三、selenium grid执行测试用例(python)

1.单条用例执行
from selenium.webdriver import Remote
# 从selenium.webdriver中导入Remote
driver = Remote(command_executor="服务器ip:4444/wd/hub",
                desired_capabilities={"browserName": "chrome", })
# 实例化远程Remote Chrome浏览器对象
driver.get("http://www.baidu.com") 
# 驱动远程浏览器打开百度

2.利用pytest多线程运行
import pytest
# 导入pytest
from selenium.webdriver import Remote
# 从selenium.webdriver中导入Remote

def test_01(): #测试用例1
	driver = Remote(command_executor="服务器ip:4444/wd/hub",
                desired_capabilities={"browserName": "chrome", })
	# 实例化远程Remote Chrome浏览器对象
	driver.get("https://www.baidu.com")

def test_02(): #测试用例2
	driver = Remote(command_executor="服务器ip:4444/wd/hub",
                desired_capabilities={"browserName": "chrome", })
	# 实例化远程Remote Chrome浏览器对象
	driver.get("https://www.baidu.com")
	
if __name__ == '__main__':
	pytest.main(["-s","-v","-n=auto"])
	#通过pytest同时运行多条用例 -n=auto根据服务器配置多线程运行
	#command_executor="服务器ip:4444/wd/hub" hub中心节点会自动分配空闲的node子节点运行用例

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