docker + selenium grid + python3搭建分布式测试环境

目的:通过docker服务的形式同时启动多个镜像以浏览器的形式对网站进行定点访问和其他操作。

主要分两步吧,第一步:安装docker和docker compose搭建起来hub-node结构
第二步:搭建selenium和python3控制脚本的环境

用到的文件看我百度云链接:https://pan.baidu.com/s/1ZFtxT-4R4iIkrrDdhnWamQ

提取码:la9p

步骤一

  1. jdk安装
    一般来说centos7自带了jdk,不用安装,直接java --version查看版本就行了,一般是1.8版本。
    如果没有自带,参考jdk离线安装
    也可以在线安装openjdk

  2. 拉取镜像
    安装docker,同样来说centos7自带了docker,直接docker version查看版本确认是否有自带docker,如果没有在线安装具体参考安装docker,docker不太推荐离线安装,如果是个人使用的话,离线安装真的是会很麻烦且各种出错。安装成功但是没有设置开机自启动的话,使用命令sudo systemctl start docker启动。

安装无误后拉取三个镜像
docker pull selenium/hub
docker pull selenium/node-firefox-debug
docker pull selenium/node-chrome-debug
拉取后使用docker images命令查看是否拉取成功
如果需要离线安装,将拉取到的镜像用docker save打包成tar包,通过拷贝的形式在新机器load进去即可使用。

docker save -o hub.tar selenium/hub
docker save -o chrome.tar selenium/node-chrome-debug
docker save -o firefox.tar selenium/node-firefox-debug

docker load < hub.tar
docker load < chrome.tar
docker load < firefox.tar
再次使用docker images查看是否多出了三个镜像

docker + selenium grid + python3搭建分布式测试环境_第1张图片

  1. 安装docker compose
    docker compose二进制文件在云盘有,也可去官方网站下载
拷贝docker compose二进制文件到/usr/local/bin目录下
sudo chmod +x /usr/local/bin/docker-compose
此处需要提供root用户密码
创建指向/usr/bin的符号链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试安装
docker-compose --version
可以看到版本信息

启动hub-node结构

测试环境的主机上初始化 Swarm mode,生成出一个 token,该主机便成为 Swarm mode 的 manager node.
docker swarm init 

docker + selenium grid + python3搭建分布式测试环境_第2张图片
接下来我们需要部署配置文件 docker-compose.yml(就用我提供的),里面需要构建三个服务,分别名字为 hub,firefox,chrome。

//此命令是创建命令,--compose-file是指定yml文件位置,此处用的相对路径,
//selenium是名称,比如你的名称是selenium,那么你刚才yml文件
//定义的网络private,名字就成了selenium_private
docker stack deploy --compose-file=./docker-compose.yml selenium
//此命令是运行docker,selenium_chrome=3是指定谷歌浏览器节点的数量
selenium_firefox是火狐的数量
docker service scale selenium_chrome=3 selenium_firefox=3
//以下是查看docker启动情况的命令
docker service ls
docker stack ps selenium
如果查看到节点已经启动,还可以打开浏览器访问http://localhost:4444/grid/console
查看详细情况
//在调试的时候如果不删除刚才创建的同名服务会报错,使用以下命令删除刚才创建的selenium
docker stack rm selenium

docker + selenium grid + python3搭建分布式测试环境_第3张图片

如果这一步没问题了,就可以进行步骤二

步骤二

在线情况:

直接安装python3和chrome,依赖会自动配置

离线情况:

步骤二安装之前需要安装一些依赖,新建两个文件夹叫yilai和chromeyilai,里边放rpm文件,参考我百度云,然后在两个目录下分别执行 rpm -Uvh ./*.rpm --nodeps --force
yilai
docker + selenium grid + python3搭建分布式测试环境_第4张图片
chromeyilai
docker + selenium grid + python3搭建分布式测试环境_第5张图片

  1. 安装python3
    上边yilai文件夹下的rpm就是python3的依赖了,
    离线方法如下,如果还提示缺lib依赖,百度一下看看怎么解决
    python3的包也是下载的真慢,我百度云也放了.
    安装的时候出现权限问题,就root。这个应该都能弄。
推荐py3.6
tar -zvxf python-3.6.x.tgz

mkdir usr/local/python3
cd python-3.6.x
#在安装python的时候,使用--prefix指定安装路径即可
./configure --prefix='/usr/local/python3'
sudo make
sudo make install

#需要配置环境,可以加到环境里面.bashrc
export PATH=/usr/local/python3/bin:$PATH
source ~/.bashrc

创建python3/pip3软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3

安装完成后python3
或者python3 --version都行,能看到版本就成功了。

下一步

  1. 安装selenium,selenium貌似和webdriver也有版本对应,可以自己去查版本对应关系
    此处安装selenium可能还缺少urllib3,同样可以百度下载或上我云盘拉取,然后解压,cd到目录下,执行python3 setup.py install,安装成功可以看到版本,或者进入python3,import urllib3不报错就行。
解压
tar -zvxf selenium-3.14.0.tar.gz
进入目录
cd selenium-3.14.0/
可以使用ls查看目录下的文件,然后使用下方命令安装
python3 setup.py install
安装不报错完成后可以再打开终端,输入python3进入python交互环境,输入import selenium
看看不报错就可以了
  1. 配置webdriver
    下载地址:http://npm.taobao.org/mirrors/chromedriver/
    webdriver和浏览器也有版本对应,具体如下:
    docker + selenium grid + python3搭建分布式测试环境_第6张图片
    可以根据自己的chrome去查询对应关系。再次我也准备了对应的webdriver和chrome,所以先安装的webdriver也可以根据自己需要去这里找
下载chrome和firefox的driver
将其复制到/usr/bin目录下
cp chromedriver /usr/bin/

sudo chmod 777 chromedriver

配置完成chromedriver --version查看到版本就是成功了。

配置谷歌浏览器

如果是离线安装大概是缺这些依赖

libXss.so.1()(64bit) is needed by google-chrome-stable-81.0.4044.122-1.x86_64
 libappindicator3.so.1()(64bit) is needed by google-chrome-stable-81.0.4044.122-1.x86_64
 liberation-fonts is needed by google-chrome-stable-81.0.4044.122-1.x86_64
 libvulkan.so.1()(64bit) is needed by google-chrome-stable-81.0.4044.122-1.x86_64

总共四个依赖,如果有网,那么直接yum估计都能装,但是无法联网,rpm安装缺少依赖的情况下,我想了一个两个办法如下:
一、还是考虑放一些依赖,虽然找不全,但是在放入一部分依赖和安装时设置跳过缺少的依赖,安装完应该也能用。
这里提到的依赖就是上边说的chromeyilai文件夹下放的rpm文件,而且我 们在上边已经执行安装了,因此执行安装如下

需要先进到放浏览器rpm的目录下
sudo rpm -ivh google-chrome-stable_current_x86_64.rpm --nodeps
不出意外,执行查看版本命令
google-chrome-stable --version
可以看到版本号,如果看到了版本号,那么就可以对着chromedriver的版本看看是不是对应了。
如果安装不成功,执行以下命令卸载
sudo rpm -e --nodeps google-chrome-stable
sudo yum localinstall google-chrome-stable_current_x86_64.rpm

如果这两个方法安装google浏览器没成功,那我估计是没办法了,考虑换个ubuntu系统什么的,因为ubuntu使用dpkg离线安装不会出现缺少依赖的问题。

firefox配置,之前在ubuntu测试的时候火狐用的好好的,但是到centos7上就各种报错了。

如果好学的你还想配firefox,那么一般系统也是自带firefox了,可用firefox --version来查看版本,如果没有就自己装,然后查看firefox和geckdriver的版本对应,geckdriver下载同chromedriver的地址。
docker + selenium grid + python3搭建分布式测试环境_第7张图片

以上都配置好之后可以尝试python3控制hub-node进行访问了
运行hub_ctl2.py(需要提供三个参数,分别是任务数量和主机ip)
grid的网页标题。也证明控制访问成功。

因为(火狐在centos7的root权限下使用有问题,所以就不用firefox了,只用chrome,那么对应上边compose的时候也就不用启动firefox的节点了。)

当然上边这两大步都成功了,就证明你这完整的搭建流程成功了,这时就可以使用我写的脚本自动化测试了,直接运行test.sh文件。

转载请注明

你可能感兴趣的:(容器知识学习,学习笔记,docker,容器,selenium,分布式)