一、Linux安装docker
- 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
- 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子节点运行用例