Robot Framework自动化测试

Robot Framework基于Docker的UI自动化

2018-10-27  本文已影响2人  我为峰2014

初衷

RF是一款非常容易简单上手的框架,特别在UI自动化方面,基本上算是立下过汗马功劳。在单机使用RF来完成UI自动化基本上是不存在问题的,如果涉及到大量的用例,就可能需要考虑到并发。

参考

在浏览论坛的时候看别人做了一套,基于Docker的UI自动化,又此也可以扩展了自己的思路,基于Docker的原理很简单,就把Selenium Grid和各个版本的浏览器打包成Docker的镜像,把代码运行在Docker镜像中,到达并发的效果。

具体操作过程

Centos7处理环境问题

搜索docker
yum search docker

安装docker
yum install -y docker

启动docker
systemctl start docker

查看状态

systemctl status docker

查看版本

docker version

查看docker信息

docker info

下载selemiunUI测试需要的镜像

命令docker pull:从docker hub中下载镜像。

首先搜索需要pull的image

命令:docker search selenium

针对docker selenium ,这里需要pull的image分别是:

selenium/hub

selenium/node-chrome-debug

selenium/node-firefox-debug

查看镜像
docker images

说明:默认的tag是latest;dockerhub服务器在海外,所以网速时好时坏,有时还会timeout报错,多试几次一定能成功。

由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长

启动主hub容器

"docker run -d -P --name selenium-hub selenium/hub"

-d 表示容器以守护态(Daemonized)形式运行。
-P 表示 Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。。

启动分支node chrome 容器

"docker run -d -p 5901:5900 --name node1  --link selenium-hub:hub selenium/node-chrome"

--link 通过 link 关联 selenium-hub 容器,并为其设置了别名hub

查看容器

"docker ps -a"

vnc连接

VNC远程浏览器环境
debug结尾的镜像都带有VNC服务端,本机安装VNC客户端,即可远程连接。
下载地址:https://www.realvnc.com/en/connect/download/vnc/
输入192.168.99.100:5901-->回车-->输入密码:secret-->确认-->进入chrome:58容器桌面
输入192.168.99.100:5901-->回车-->输入密码:secret-->确认-->进入firefox:52容器桌面

vncserver的密码:12345678

设计方案

第一步:docker-compose自动构建浏览器测试环境容器
首先还是先看一下前言中的链接如何使用selenium gird+docker,对于selenium gird的容器的启动,可以用docker-compose.yml做容器自动编排(比上面单独启动方便很多),这样就不用手工一步一步去启动容器和link了

具体的docker-compose.yml描述

docker-compose.yml
hub:
  image: selenium/hub
  ports:
    - 4444:4444
firefox:
  image: selenium/node-firefox-debug
  ports:
    - 5901:5900
  links:
    - hub
chrome:
  image: selenium/node-chrome-debug
  ports:
    - 5902:5900

其中hub就是selenium gird的容器,启动的时候使用4444端口,其他的是浏览器的镜像,而且这里也说明一下浏览器容器的5900端口,在docker.io获取浏览器镜像时,会有debug版,debug的话是可以通过VNC Viewer连接映射的端口来查看调试浏览器和用例的具体执行情况,一般也建议直接用debug版,上面分别用了2个chrome和1个firefox的容器集群构建成分布式的web自动化测试环境
启动完整之后打开selenium gird,就能看到具体浏览器容器的启动情况,当然,这一步也是要做到自动检查是否启动成功的

image

至于Xvfb,VNC,noVNC的区别,建议观看这篇文章,已经讲的很详细了。
Testerhome文章链接

第二步:并发框架设计(借用大神的思路)

*** Settings ***
Library           Selenium2Library

*** Test Cases ***
open_baidu
    [Tags]    node1
    Open Browser    https://www.baidu.com    firefox    remote_url=http://lunkrtech.rd.mt:4444/wd/hub
    sleep    6
    [Teardown]    Close Browser

open_lunkr
    [Tags]    local
    Open Browser    https://www.lunkr.cn    chrome
    sleep    3
    Wait Until Page Contains Element    id=setting    3
    [Teardown]    Close Browser

open_coremail
    [Tags]    node2
    Open Browser    http://www.coremail.cn    chrome    remote_url=http://lunkrtech.rd.mt:4444/wd/hub
    sleep    6
    [Teardown]    Close Browser

tags标记好用例之后,那就是并发框架的设计了,核心代码如下:

def run(arg):
   os.system(str(arg))

threads = []
testsuite=sys.argv[1]
tags=sys.argv[2]
taglist=tags.split(',')

for tag in taglist:
   cmd='pybot -i {0} -o .\\resultDir\\output-{0}.xml -l .\\resultDir\\log-{0}.html -r .\\resultDir\\report-{0}.html {1}'.format(tag,sys.argv[1]) 
   t= threading.Thread(target=run,args=(cmd,))
   threads.append(t)

-------这里省略产生多线程的代码-----------

os.system(u"rebot --output .\\resultDir\\output.xml  -l .\\resultDir\\log.html -r .\\resultDir\\report.html --merge .\\resultDir\\output-*.xml")

脚本robot_mutil_dev.py接收两个参数,第一个,执行的测试套件或文件夹,第二个,以逗号分隔的多个标签,然后有多少个标签,就启动多少个线程根据不同的标签执行 pybot -i tag的命令,至于怎么使用python的多线程这里就不用多说了,大家估计比我还熟悉,最后所有自动化测试的线程都结束之后执行rebot的命令来合并自动化测试报告

个人认为的第二方案

大神的方案很好,但是里面的技术细节可能相对于比较复杂,我更加倾向于有没有开源开源代替的方案。

确实原理都是一样的,是希望可以通过启动不同的进程,来分别执行不同的测试用例,根据测试机的CPU核数确定启动的进程数,实现真正的并行执行。这样最大化节约了机器资源。

这里我们主要用到了开源工具pabot来实现测试用例的并行执行。

github地址

1.png

而且此框架也在不断的持续维护中,贴切的满足我们的需求。

同样的也是采用执行rebot的命令来合并自动化测试报告,区别就是不需要自己维护一个并发框架。

Robot Framework集成了rebot工具,可以使用它来进行报告的整合。
例如:rebot output1.xml output2.xml 即可联合输出一份报告
rebot --merge output1.xml output2.xml 即可合并输出一份报告

以上两者的区别是前者是或的关系,后者是与的关系也可以指定name输出报告:rebot --name
还可以指定部分case或者排除部分case输出报告:
rebot --include或者rebot --exclude

三、执行过程演示

结合Jenkins+docker技术,我们可以很方便的基于上面的两套方案,打造分布式并行自动化测试集群。

上面有2个浏览器就是通过VNC viewer来连接到容器中查看远程浏览器的情况的,在连接到selenium gird的时候,gird会自动判断哪个浏览器是空闲的,那gird就会把用例分配到对应空闲的浏览器中执行

那这样就万事大吉了,执行完测试之后具体生成的文件,在jenkins把对应路径配置好上传必须的文件就好了:

image

提升的速度不多,原因是我分配到各节点的用例不均匀,但这个起码从本质上提高了自动化测试执行的效率,只要分配好执行的用例,效率肯定会很明显的提高的

image
上一篇下一篇

猜你喜欢

热点阅读