Robot Framework基于Docker的UI自动化

初衷

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,就能看到具体浏览器容器的启动情况,当然,这一步也是要做到自动检查是否启动成功的

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

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

  • 并发的框架也是利用了python多线程的方法去实现的,其实具体的思想可以参考简单入手移动端并发自动化测试,不过比起这个当然是有改良的,之前用了bat脚本,这样执行的时候一旦并发多了总是弹窗口,显然就不好用了,后面就结合robot的tag来改良了并发框架
  • 首先是robot的测试用例或测试套件分别贴上tags,代表分布在不同的容器上执行,其中node1和node2在远程容器中执行,所以要加上remote_url,local是指在本地执行,本地执行还是必要的,像一些上传本地文件的操作,放到远程机器上是执行不了的,所以保留本地执行
*** 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技术,我们可以很方便的基于上面的两套方案,打造分布式并行自动化测试集群。

  • 具体的执行过程就是执行python脚本就好了,当然我们可以用jenkins来做自动构建触发自动化测试的执行,jenkins的流程。

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

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

  • 最后一步当然是执行完成以后看到的测试报告

    也可以从测试报告的tags中看到,有多少个用来在对于的tags执行的,而且在具体的用例日志中也看到报告是通过合并得到的,大致的过程就是这样子啦

  • 在我们自己产品的使用中,有具体的效率对比

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


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容