Docker的容器技术的优秀特性,例如秒级启动、应用隔离、良好的可移植性等,能够在DevOps中大显身手,并推进持续集成,持续交付等理念落地。今天咱们就将结合Selenium Grid来介绍Docker在自动化测试中的使用场景。git
Selenium 是针对Web应用的自动化测试框架和工具集合,支持多种浏览器和编程语言。Selenium的测试用例直接运行在浏览器中,并模拟用户的操做。github
Selenium Grid是一个分布式Web测试工具,能够将测试透明地分发到多个主机上,并行地执行。Selenium Grid架构中包含两个主要角色:Hub是中心点控制节点,而Node是Selenium的工做节点,它们注册到Hub上,并会操做浏览器执行由Hub下发的自动测试用例。docker
以传统的方式部署分布式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容器在从新启动后的一些问题。这些修改稍后会提交社区。框架
注:你能够利用Docker Compose在本地Docker环境上测试上述脚本,可是须要手工伸缩节点。编程语言
在阿里云容器服务上部署完成以后,很快咱们就能够看到容器应用所包含的全部容器都已经启动成功。分布式
咱们能够经过点击hub服务来得到Grid Console的访问信息。
点击访问端点后,在浏览器中能够看到,Selenium Grid的控制台里已经有6个节点就绪,其中3个是Firefox节点,3个是Chrome节点。
下面咱们来运行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分发执行测试用例。
注意:修改应用配置后,须要更新应用版本便于追踪。
变动配置完成后过几十秒钟,咱们发现“test”服务已经中止运行,在日志中咱们能够看到全部自动化测试已经执行完毕。
经过Docker能够大大简化Selenium Grid分布式测试的部署,削减机器资源消耗,减小配置虚拟机所花的时间,极大的提升了测试效率。
Docker和测试领域还能够有不少结合点:好比利用Docker镜像良好的可移植性,咱们能够在开发、测试、生产环节中保证一致性;利用容器编排,咱们能够低成本、快速的构建集成测试环境,来对应用进行有效验证,等等。
之后咱们还会介绍如何利用阿里云容器服务把DevOps过程串联起来,让开发者简单从一个简单的git commit开始,自动化地触发并执行完整的应用构建、测试、和更新流程。
阿里百川(baichuan.taobao.com)是阿里巴巴集团“云”+“端”的核心战略是阿里巴巴集团无线开放平台,基于世界级的后端服务和成熟的商业组件,经过“技术、商业及大数据”的开放,为移动创业者提供可快速搭建App、商业化APP并提高用户体验的解决方案;同时提供多元化的创业服务-物理空间、孵化运营、创业投资等,为移动创业者提供全面保障。