一,为什么要用selenium grid进行分布式?
使用这种架构可以加速UI自动化的运行速度,因为UI自动化执行是比较慢的,不像接口测试执行速度快,加上可以使用testng的多线程就更快了,所以接口测试很少遇到性能瓶颈。加上UI自动化流程比较复杂,真的运行起来如果启动几百个服务器是比较耗内存的,这个时候需要加服务器才能够满足需求,但是这样有时候会存在资源分配问题。grid相当于搭建一个浏览器集群,可以当做一个通用的基础服务,这个也有负载均衡策略,可以最大化提高资源利用率
hub:主节点,负责调度
node:从节点,负责处理请求
二,实战
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
启动后浏览器就可以访问界面了
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
想多注册几个也是可以的
点击页面的console即可跳转到这个界面
使用VNC VIEWER连接远程服务
1,登录客户端,新建连接(端口号写的node的)
2,点击继续
3,输入密码,默认是secret
我们可以跑一个测试任务
进行分布式测试
右键run
可以看到vnc里面有3个浏览器会启动
三,补充
1,selenium gird 支持的浏览器类型
为什么没有IE呢?docker和虚拟机的区别是什么?
- 因为IE是需要内核的,但是docker是没有内核的。
- 最大区别是docker没有内核,没有内核就等于没有操作系统,docker用的是宿主机的内核,这样的好处是快,节省了内核的消耗,不需要开机。启动虚拟机相当于重新开机,点开docker相当于启动qq。缺点是隔离性不太好。
- 一切挑内核的都不要用docker
- 如果想加入IE到grid里面,需要搭一个windows虚拟机,再到selenium官方网站下载gird,然后安装启动起来,配好java环境等