Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践

先介绍下分布式自动化框架

分布式自动化测试要解决什么问题?

1、减少脚本执行耗时

2、减少对单机器的资源消耗

3、实现分布式兼容性测试

分布式自动化测试实现重点:

1、控制多机器并行运行,资源监控

2、测试用例执行顺序控制

3、测试报告收集合并

纵观开源技术,拿现在最流行的selenium\docker 来实践分布式自动化测试框架。

首先,介绍一下两个开源技术

selenium grid是selenium的三大组件之一,它的作用就是分布式测试执行,它是由一个hub节点和若干个node代理节点组成,Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

分布式环境搭建

1、创建容器,利用容器技术我们可以快速的构建我们selenium hub和node 环境,其实selenium官网已经为我们制作好了镜像,我们只需要在docker环境中拉取即可,以下为selenium官网为我们提供的镜像名称

Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践_第1张图片

 拉取镜像,docker pull <镜像名称>

 如图为已经拉取完成

 注意:拉取带vnc server的镜像,后面我们会用到VNC做为我们的镜像控制工具

2、启动容器

docker run -d -p 4444:4444 --name selenium-hub selenium/hub
docker run -d -P -p 5901:5900 --link selenium-hub:hub selenium/node-firefox-debug
docker run -d -P -p 5902:5900 --link selenium-hub:hub selenium/node-chrome-debug

3、查看容器运行状态

[root@shine shine]# docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
c9e64e30ab31        selenium/node-firefox-debug   "/opt/bin/entry_poin…"   6 weeks ago         Up 9 seconds        0.0.0.0:5902->5900/tcp   firefox
a85532e41344        selenium/node-chrome-debug    "/opt/bin/entry_poin…"   6 weeks ago         Up 43 seconds       0.0.0.0:5901->5900/tcp   chrome
0832be5bde56        selenium/hub                  "/opt/bin/entry_poin…"   6 weeks ago         Up About a minute   0.0.0.0:5555->4444/tcp   hub

4、查看Selenium hub 、node 启动状态

浏览器输入hub地址:http://192.168.174.128:5555/grid/console

Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践_第2张图片

5、启动VNC Server

 连接我们启动的容器IP:PORT,密码默认为sercet

Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践_第3张图片

Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践_第4张图片

到此,我们自动化测试的运行环境已经配置完毕,接下来看我们自动化测试脚本如何设计

6、测试脚本设计Robotframework

  6.1设计driver,根据传入的浏览器版本识别启动容器

class Driver(object):
    def __init__(self):
        pass

    def dockerDriver(self):
        dc = {'browserName': 'firefox', 'version': '', 'platfrom': 'ANY', 'javascriptEnabled': True}
        driver = webdriver.Remote(command_executor='http://192.168.174.128:5555/wd/hub',
                                  desired_capabilities=dc)
        return driver

 执行脚本 

def execRobot():
    cmd_list =[]
    tag_list=['firefox','chrome']

    for tag in tag_list:
        cmd = 'robot -i {0} -o ./resultDir/result/output-{0}.xml -l ./result/log-{0}.html -r ./resultDir/result/report-{0}.html  D://PycharmProjects//autotestfordocker//testcase//'.format(tag)
        cmd_list.append(cmd)
    try:
        MutilThreadings().mutil(cmd_list)
    except Exception as e:
        print(str(e))

  6.2测试案例

*** Settings ***
Library   Selenium2Library
Library   Screenshot
Library   keywords.baidu
*** Test Cases ***
baidu-chrome
    [Tags]  chrome
    打开浏览器    https://www.baidu.com
baidu-firefox
    [Tags]  firefox
    打开浏览器    https://www.baidu.com

 6.3运行效果,同时打开两个容器

Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践_第5张图片

6.4 测试报告

 截图Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践_第6张图片 

log/report

 Docker系列(五):基于Docker+Selenium Grid的分布式自动化测试实践_第7张图片

你可能感兴趣的:(docker,RobotFramework,自动化测试)