参考资料:
《The Docker Book》- Testing with Docker
《Docker从入门到实践》– 标准化开发测试和生产环境
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/environment.html
构建基于 Docker + Jenkins + Sahi 的 Web UI 自动化测试环境
http://www.ibm.com/developerworks/cn/opensource/os-cn-JenkinsDockerSahi/index.html
利用 Docker 构建高度集成化的 Chef 开发测试环境
http://www.ibm.com/developerworks/cn/cloud/library/1410_zhangyq_dockerwithchef/
深入浅出Docker(四):Docker的集成测试部署之道
http://www.infoq.com/cn/articles/docker-integrated-test-and-deployment/
Move fast and don’t break things! Testingwith Jenkins, Ansible and Docker
https://developer.rackspace.com/blog/move-fast-and-dont-break-things-testing-with-jenkins-ansible-and-docker/
Testing Made Awesome with Docker
http://blogs.plos.org/tech/testing-made-awesome-with-docker/
Container Technology: Integration Testingwith Docker
http://clypd.com/container-technology-integration-testing-with-docker/
ECS Docker实践文档
http://help.aliyun.com/knowledge_detail/5974866.html
1、Docker目前有以下应用场景:
测试:Docker很适合用于测试发布,将 Docker 封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署。
测试数据分离:在测试中,经常由于测试场景变换,需要修改依赖的数据库数据或者清空变动 memcache、Redis 中的缓存数据。Docker 相较于传统的虚拟机,更轻量与方便。可以很容易的将这些数据分离到不同的镜像中,根据不同需要随时进行切换。
开发:开发人员共同使用同一个 Docker 镜像,同时修改的源代码都被挂载到本地磁盘。不再因为环境的不同而造成的不同程序行为而伤透脑筋,同时新人到岗时也能迅速建立开发、编译环境。
PaaS云服务:Docker 可以支持命令行封装与编程,通过自动加载与服务自发现,可以很方便的将封装于 Docker 镜像中的服务扩展成云服务。类似像 Doc 转换预览这样的服务封装于镜像中,根据业务请求的情况随时增加和减少容器的运行数量,随需应变。
使用 Docker 来做分布式集群模拟
2、Docker在测试领域的应用:
1)快速搭建兼容性测试环境(各类Web服务器、中间件、数据库的组合环境)
2)快速搭建复杂分布式测试环境
3)持续集成(快速创建和撤销容器)
3、Docker对测试方式的影响:
1)、容器级测试
2)、测试前移(功能模块-容器)
3)、集成测试
4)、自动化测试、并行测试
5)、可扩展性测试
6)、兼容性测试(例如验证兼容MySQL和Postgres)
标准化容器开发和测试环境
Docker就像工厂中的流水线,将一个个集装箱(模块化的功能)传输到发货区(上线发布)。
传统模式和Docker模式在测试方式上的区别:
基于Docker的测试场景:
在开始测试之前,测试工程师需要确保自己的测试机上已经安装了Docker并处于运行状态,必要时需保证Docker的版本与最终生产环境一致。
测试环境搭建好之后,根据测试请求说明的镜像地址拉取镜像,并按要求运行,根据镜像的目的测试所实现的业务。
如果在测试过程中发现bug或不符合需求,应尽快反馈给开发人员,开发人员修正后,重新将镜像推送到注册服务器,测试人员从镜像库拉取最新修改的镜像继续测试。反复几轮直到达到可发布的版本。最后,测试人员发布测试合格报告,并注明最终的镜像版本。
如果多个测试工程师同时测试,各自使用自己的测试容器,还能保证测试之间不被干扰。
Docker模式下,开发-测试-运维的协作模式:
以一个简单的应用开发、测试和发布来说明 Dock er 在阿里云 E CS 上的运用:
1) 运维人员在 ECS 上搭建私有 Docker Registry。
2) 开发人员在开发 ECS 上从阿里云或私有 Docker Registry 获取应用需要的基础镜像。
3) 开发人员开发 ECS 上构造应用容器,自测后ᨀ交容器为新的镜像并推送到私有 Docker Registry,通知 QA 测试。
4) QA 在自己的测试 ECS 上启动容器,测试后,有问题则 a),没问题则 b)。
a) 通知开发修复,回到步骤 3)。
b) 交到私有 Docker Registry,准备发布。
5) 发布人员下载最新版本镜像并在生产ECS 上启动容器。
Docker时代,对测试的技能要求:
1、基于Docker的测试环境搭建能力
2、微服务架构的测试能力
3、基于容器与开发、运维的协作能力
最后,关于Docker在测试领域的应用,我们还缺乏比较多的尝试和实践,例如:
基于容器的应用,对其实施自动化测试与传统应用有哪些差异?
基于容器的应用,在性能上与传统方式的部署,差异有多大?
基于容器的应用,在安全测试方面,跟传统应用有哪些差异?