环境介绍
RF结合Selenium Grid来进行分布式执行用例,Selenium Grid提供支持方便在多台主机环境上进行多种操作系统、多个不同浏览器执行环境,场景常用在兼容性测试。但是它本身不提供多线程并发执行,需要额外结合多进程技术才能达到并行执行用例,当用例较多情况下,采用多进程并发执行用例可压缩时间,提升进度完成用例执行。开启多少个进程根据 CPU多少线程有关。
- 若想在远程主机启动node节点,必须满足以下要求:
1、本地hub主机与远程node主机之间可以ping通
2、远程主机必须安装用例执行的浏览器及驱动,需要配置环境变量
3、远程主机必须安装java环境
环境selenium2.53.6,grid需要对应selenium-server-standalone-2.53.0.jar版本工具。这里推荐大家使用selenium2的最后一个版本selenium2.53.6,selenium3不推荐的原因就是目前还不太稳定。
浏览器对应驱动:
1、IE—> IEDriverServer_x64_2.50.0
2、firefox—> 46版本(selenium最高支持46及以下,46及以下不需要驱动,46以上的则需要下载驱动。)
3、Chrome—> 49版本(对应驱动:chromedriver_win32_46-50)
若想在远程主机启动node节点,必须满足以下要求:
1、本地hub主机与远程node主机之间可以ping通
2、远程主机必须安装用例执行的浏览器及驱动,需要配置环境变量
3、远程主机必须安装java环境
● hub主机需同时启动一个hub和一个node,如下指令:
java -jar selenium-server-standalone-x.xx.x.jar -role hub
java -jar selenium-server-standalone-x.xx.x.jar -role node
●上面脚本分别启动一个hub和一个node,hub默认端口号为4444,node默认端口号为5555。若是同一台主机上要启动多个node,则需要注意指定端口号,可通过下面方式来启动多个node节点。
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5555
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5556
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5557
● 如在远程启动节点,如下指令:
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5555 -hub http://192.168.97.69:4444/grid/register
参数: hub是指向hub管理节点的主机IP地址。
注意:如果是启动火狐浏览器,还需指向浏览器安装的路径。
java -jar selenium-server-standalone-x.xx.x.jar –Dwebdriver.firefox.bin=“D:Program FilesMozilla Firefoxfirefox.exe” -role node -port 5555 -hub http://192.168.97.69:4444/grid/register
【Selenium Grid有关环境部署详见Selenium Grid文章解释】
分布式执行用例
如下图所示:调用grid各节点,实现分布式执行远程node节点主机,这样能够在不同的节点主机执行用例,由hub节点管理各node节点,进行分发用例到node节点实现运行用例,目的可以实现不同浏览器和不同操作系统兼容性测试。
分布式多进程并发执行用例
如果某产品用例数量比较多,为了缩短时间执行完全部的用例,就用到分布式多进程并发系统测试,在不同的主机节点进行各自分工执行用例,最后把各节点主机执行后的结果合并成一份报告里。
假设测试套件grid下有两个用例,每个用例是分布在不同的远程主机,如下图所示:
通过Process库实现进程调用pybot指令实现并发执行用例。
● 上图调用grid各节点,实现分布式多进程并发执行远程多个node节点主机,上图可知调用2个进程,也就是同时运行两台主机执行用例,等待执行完后,自动把两台主机的测试结果合并成一个报告文件里面。
● 要导入Process测试库,才能使用关键字。
● -t参数指定要跑哪个用例名,如果用-s参数指定要跑哪个测试套件,-o参数指定输出节点主机的结果,-d参数指定测试结果存放的路径目录,-R参数从之前失败的输出文件中选择失败的案例重新执行
● 注意存放的报告与进程存放的报告路径要区分开来,否则合并后的报告变成进程执行的用例结果
● 合并后的报告是d:/attrobot/report,查看报告手动进入目录查看
● 进程运行的报告,平台打开报告是按此目录打开的,如下图所示:
● 平台运行完后,自动合并后的报告,会出现两个用例在同份报告里,如下图所示:
假设有两个测试套件分别是grid1和grid2,每个用例是分布在不同的远程主机,如下图所示:
如下图,把两个测试套件合并成一份测试报告的分布式多进程并发执行用例的脚本
下图就是把两个测试套件合并成一份测试报告效果:
为了提高case运行效率,实际工作中大家可能会拆分case并行跑。但是并行跑会生成多个测试报告,如何合并呢?Robot Framework集成了rebot工具,也可以使用它来进行报告的整合。指定参数name输出报告,还可以指定部分case或者排除部分case输出报告:
rebot --include或者rebot –exclude
还有更多参数:详见reobt –help | more
手动合并报告:
如上图,-N参数指定合并报告自定义的名称。
自动重跑失败用例
有时自动化测试用例执行失败了, 但重跑一次又会成功。除了从脚本本身来提高稳定性,我们也希望能够自动重跑一次失败的那些用例。只要两次执行中有一次成功,我们就可以认为测试通过。
实验方法:
1、创建两条用例:一条成功用例和一条失败用例
2、第一个命令,执行D:MyTestSuites下的所有用例,将执行结果输出到D:log ound1下
call pybot.bat --outputdir D:log ound1 D:MyTestSuites
3、第二个命令,将D:MyTestSuites里的所有测试用例中,在上个命令的输出的output.xml中失败的那些用例,再执行一遍。
call pybot.bat -S D:log ound1output.xml --outputdir D:log ound2 D:MyTestSuites
4、第三个命令,将上面两次执行的结果合并到一个报告中。也就是说第一次执行失败的用例,如果第二次执行成功了,在报告中会显示最后结果为成功。
rebot --outputdir D:log --merge D:log ound1output.xml D:log ound2output.xml
5、第四个命令,将失败用例截图复制指定存放结果目录
call copy /y D:log ound2*.png D:log
备注:如果要在CI做持续集成,需要用到call命令,如只在dos窗口运行,可不用call