一,为什么要用selenium grid进行分布式?

使用这种架构可以加速UI自动化的运行速度,因为UI自动化执行是比较慢的,不像接口测试执行速度快,加上可以使用testng的多线程就更快了,所以接口测试很少遇到性能瓶颈。加上UI自动化流程比较复杂,真的运行起来如果启动几百个服务器是比较耗内存的,这个时候需要加服务器才能够满足需求,但是这样有时候会存在资源分配问题。grid相当于搭建一个浏览器集群,可以当做一个通用的基础服务,这个也有负载均衡策略,可以最大化提高资源利用率

docker 自动运行sh docker自动化_UI


hub:主节点,负责调度

node:从节点,负责处理请求

docker 自动运行sh docker自动化_docker 自动运行sh_02

二,实战

1,命令行启动

# e:指定环境变量,相当于一个参数,会动态初始化容器的一个行为。就像写代码时候要传参一样
 docker run -d --name=hub -p 5001:4444 -e GRID_TIMEOUT=0 -e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true -e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 -e GRID_BROWSER_TIMEOUT=15000 -e GRID_TIMEOUT=30000 -e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium

启动后浏览器就可以访问界面了

docker 自动运行sh docker自动化_服务器_03

2,启动node节点

# 提供远程桌面的连接服务,可以进行debug服务
# NODE_MAX_SESSION=6:同时运行的浏览器数量是6
# --link:把hub和node的网络连接在一起
docker run --name=chrome -p 5902:5900 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_ADDRESS=/dev/null -v /dev/shm:/dev/shm --link hub -d selenium/node-chrome-debug:3.7.1-beryllium

想多注册几个也是可以的

docker 自动运行sh docker自动化_服务器_04


点击页面的console即可跳转到这个界面

docker 自动运行sh docker自动化_docker_05


使用VNC VIEWER连接远程服务

1,登录客户端,新建连接(端口号写的node的)

docker 自动运行sh docker自动化_UI_06


2,点击继续

docker 自动运行sh docker自动化_docker_07


3,输入密码,默认是secret

docker 自动运行sh docker自动化_docker 自动运行sh_08


我们可以跑一个测试任务

docker 自动运行sh docker自动化_服务器_09


进行分布式测试

右键run

docker 自动运行sh docker自动化_docker 自动运行sh_10


可以看到vnc里面有3个浏览器会启动

三,补充

1,selenium gird 支持的浏览器类型

docker 自动运行sh docker自动化_docker_11


为什么没有IE呢?docker和虚拟机的区别是什么?

  • 因为IE是需要内核的,但是docker是没有内核的。
  • 最大区别是docker没有内核,没有内核就等于没有操作系统,docker用的是宿主机的内核,这样的好处是快,节省了内核的消耗,不需要开机。启动虚拟机相当于重新开机,点开docker相当于启动qq。缺点是隔离性不太好。
  • 一切挑内核的都不要用docker
  • 如果想加入IE到grid里面,需要搭一个windows虚拟机,再到selenium官方网站下载gird,然后安装启动起来,配好java环境等