Docker与Web自动化测试:一键创建Selenium Grid集群-阿里云开发者社区

开发者社区> 阿里云容器服务 ACK> 正文

Docker与Web自动化测试:一键创建Selenium Grid集群

简介: Docker的容器技术的优秀特性,例如秒级启动、应用隔离、良好的可移植性等,可以在DevOps中大显身手,并推动持续集成,持续交付等理念落地。今天我们就将结合Selenium Grid来介绍Docker在自动化测试中的使用场景。

Docker的容器技术的优秀特性,例如秒级启动、应用隔离、良好的可移植性等,可以在DevOps中大显身手,并推动持续集成,持续交付等理念落地。今天我们就将结合Selenium Grid来介绍Docker在自动化测试中的使用场景。

Selenium Grid 简介

Selenium 是针对Web应用的自动化测试框架和工具集合,支持多种浏览器和编程语言。Selenium的测试用例直接运行在浏览器中,并模拟用户的操作。

Selenium Grid是一个分布式Web测试工具,可以将测试透明地分发到多个主机上,并行地执行。Selenium Grid架构中包含两个主要角色:Hub是中心点控制节点,而Node是Selenium的工作节点,它们注册到Hub上,并会操作浏览器执行由Hub下发的自动测试用例。

14583886947794

以传统的方式部署分布式Selenium Grid集群有一定的技术难度。而且一个浏览器在操作系统上只能安装一个版本且只能有一个运行实例。比如为了针对不同版本的Chrome进行测试,需要将指定版本的Chrome浏览器安装到不同物理机或虚拟机上,这样要耗费大量时间和机器成本来准备测试环境。

在去年Selenium Conf 2015上,Marek Jastrzebaki介绍并演示了利用Docker技术来部署Selenium Grid的示例,可以优雅地解决上述问题。

让我们也尝试一下Docker带给我们不同的测试体验吧 :-)

利用阿里容器服务搭建自动测试环境

我们将在阿里容器服务上面搭建Selenium Grid的示例,并运行自动化测试用例。

下面的DockerCompose模板描述了一个Selenium Grid集群的部署方式:它会创建一组容器,其中包含1个Selenium Hub容器,3个Firefox Node和3个Chrome Node。这里所有的Docker镜像可以从 https://github.com/denverdino/docker-selenium 获得,它们在Selenium官方镜像基础上,修复了节点和Hub容器在重新启动后的一些问题。这些修改稍后会提交社区。

hub:
  image: registry.aliyuncs.com/denverdino/selenium-hub
  ports:
    - 4444:4444
  labels:
    aliyun.routing.port_4444: http://selenium/
firefox:
  image: registry.aliyuncs.com/denverdino/selenium-node-firefox
  links:
    - hub
  labels: 
    aliyun.scale: "3"
chrome:
  image: registry.aliyuncs.com/denverdino/selenium-node-chrome
  links:
    - hub
  labels: 
    aliyun.scale: "3"

注:你可以利用Docker Compose在本地Docker环境上测试上述脚本,但是需要手工伸缩节点。

在阿里云容器服务上部署完成之后,很快我们就可以看到容器应用所包含的所有容器都已经启动成功。

14583894550228

我们可以通过点击hub服务来获得Grid Console的访问信息。

14583980964870

点击访问端点后,在浏览器中可以看到,Selenium Grid的控制台里已经有6个节点就绪,其中3个是Firefox节点,3个是Chrome节点。

14583981369820

下面我们来运行Web测试。我提供了一个非常简单的测试示例:利用Python的Selenium bindings和nose并行测试框架,它会并行地调用Firefox和Chrome在百度和云栖社区上搜索和docker相关的内容。

为了简化使用,我也提供Docker镜像来调用Selenium测试脚本。详见 https://github.com/denverdino/docker-selenium/tree/master/test

我们选择之前Selenium测试应用,点击配置变更后将docker-compose模板更新为如下内容。它会添加test service来调用hub分发执行测试用例。

hub:
  image: registry.aliyuncs.com/denverdino/selenium-hub
  ports:
    - 4444:4444
  labels:
    aliyun.routing.port_4444: http://selenium/
firefox:
  image: registry.aliyuncs.com/denverdino/selenium-node-firefox
  links:
    - hub
  labels: 
    aliyun.scale: "3"
chrome:
  image: registry.aliyuncs.com/denverdino/selenium-node-chrome
  links:
    - hub
  labels: 
    aliyun.scale: "3"
test:
  image: registry.aliyuncs.com/denverdino/selenium-test
  links:
    - hub
    - firefox
    - chrome

14584321377231
注意:修改应用配置后,需要更新应用版本便于追踪。

变更配置完成后过几十秒钟,我们发现“test”服务已经停止运行,在日志中我们可以看到所有自动化测试已经执行完毕。

14584322685740

总结

通过Docker可以大大简化Selenium Grid分布式测试的部署,削减机器资源消耗,减少配置虚拟机所花的时间,极大的提高了测试效率。

Docker和测试领域还可以有很多结合点:比如利用Docker镜像良好的可移植性,我们可以在开发、测试、生产环节中保证一致性;利用容器编排,我们可以低成本、快速的构建集成测试环境,来对应用进行有效验证,等等。

以后我们还会介绍如何利用阿里云容器服务把DevOps过程串联起来,让开发者简单从一个简单的git commit开始,自动化地触发并执行完整的应用构建、测试、和更新流程。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云容器服务 ACK
使用钉钉扫一扫加入圈子
+ 订阅

云端最佳容器应用运行环境,安全、稳定、极致弹性

官方博客
官网链接