在做UI自动化的时候,大部分人会遇到脚本执行过长的问题,这个一般通过并行处理。使用selenium grid做分发。
但是传统的方案需要多个node节点,一般小公司无法提供如此多的服务器。改用VM虚拟机之后,虽然可以解决硬件的限制问题,VM搭建复杂,消耗资源过多,也是有其缺点。
在docker普及的如今,使用docker代替VM,已经十分成熟。这边就记录下,本人使用docker的一些实践。
操作完全参考大神 https://testerhome.com/topics/8450
(一·)这边记录一些遇到的问题
1.开始下载的官方的hub和node,搭建之后,跑不通,node注册不成功
2.好不容易注册成功了,各种提示无session等信息
3.浏览器打开之后,无后续动作
->最后通过使用大神的镜像,一次性就可以调通
->所以可能官方镜像有一点小问题,不建议使用,可以自行制作镜像
(二)脚本要点
1.原来是调用本地浏览器的,现在需要修改为调用远端
ChromeOptions cap = new ChromeOptions(); cap.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR,UnexpectedAlertBehaviour.IGNORE); WebDriver driver = new RemoteWebDriver(new URL("http://172.23.176.1:4444/wd/hub"), cap);
最初使用的
DesiredCapabilities chromeDC = DesiredCapabilities.chrome(); ChromeOptions chromeDC = new ChromeOptions(); WebDriver driver = new RemoteWebDriver(new URL("http://172.23.176.1:4444/wd/hub"), chromeDC);
会提示,使用 ChromeOptions()替代 DesiredCapabilities.chrome()
2.http://172.23.176.1:4444/wd/hub 地址就是hub的ip,而非node的ip
可以通过http://localhost:4444/grid/console 显示正常,来判断ip
3.需要实时查看容器的话,需要使用VNC
本地安装VNC,且NODE也安装了VNC,官方镜像只有debug会自带VNC,所以还是建议自己做镜像,定制更强
4.testng框架自带并发功能,只需要在xml中修改部分参数
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite" parallel="methods" thread-count="3">
<test verbose="2" preserve-order="true" name="D:/testcases/testDocker">
<classes>
<class name="testDocker">
<methods>
<include name="testChrome"/>
<include name="testChrome2"/>
</methods>
</class>
</classes>
</test>
</suite>
parallel也可以设置其他值,按照不同的维度并发,thread-count 线程也可以随意设置
(三)执行
1.可以在本地执行
2.也可以尝试搭建到jenkins上