BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

不要再偷懒,请测试你的软件(借力Docker)

| 作者 Daniel Bryant 关注 739 他的粉丝 ,译者 谢丽 关注 11 他的粉丝 发布于 2015年11月28日. 估计阅读时间: 5 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

DockerCon EU 2015大会上,Laura Frank作了题为“不要再偷懒,请测试你的软件”的演讲。Frank指出,不管公司规模大小,也不管公司处于什么阶段,软件测试都至关重要,而将Docker引入开发流程有助于提高编写和运行测试框架的效率,使组织能够始终如一地向客户提供高质量的软件产品。

Frank是一名来自Codeship的资深软件工程师。他在演讲开始时说,软件测试自首台用于计算的机器出现时就已经开始了。有位女士为第一台通用电子计算机ENIAC编写了程序,用于帮助美国陆军弹道研究实验室计算炮兵射击轨迹。她会定期拿一份已知正确的、手工计算的表格检查计算结果。Frank指出,与其他技术(如结对编程、版本控制、代码审查和高可用架构)一样,测试对交付“可用于生产环境的软件”而言至关重要。

测试的目的包括升级应用程序并避免引入回归缺陷,验证更新的功能,证明重构没有破坏现有的功能。编写测试和测试套件本地运行耗时过长,正常开发流程受到干扰,测试环境难以正确配置,这些往往会让人沮丧。Frank提出,将Linux容器Docker工具箱引入测试创建和执行过程可以部分地缓解这种沮丧。

Docker Compose使用户很容易就可以创建一致的、可重现的容器化环境。Frank表示,许多软件开发人员都使用Docker Compose创建本地开发环境,但却没有将其用于软件测试。在测试中使用Docker同在开发中使用Docker有同样的好处,如创建可预测、可重现的环境,这对质量保证过程非常有益。

Docker可以提供可预测且可重现的测试环境。就是这样。

Frank提醒说,在将Docker Compose用于测试时,可能需要对其工作流做一些修改,甚至需要使用一个不同的Dockerfile指定不同的环境变量和运行目标,Docker Compose通过“docerfile”属性提供这种支持。当容器、应用程序和存储配置复杂时,要注意避免初始化和执行竞态条件。

Docker Compose的docker-compose up命令可以用于执行一个编入Compose YAML配置文件的自动化测试套件,也可以使用Compose的run命令一次运行一个服务,比如:

$ docker-compose up
$ docker-compose run -e “RAILS_ENV=test” app rake db:setup
$ docker-compose run -e “RAILS_ENV=test” app test-command path/to/spec.rb

Frank提到,持续集成与测试相辅相成,依赖CI/CD而测试覆盖率不足通常会出问题——与在生产环境中发现缺陷相比,开发人员更愿意看到持续交付管道运行失败。

需要注意的是,运行测试的环境与生产环境差别越小越好。Frank认为, 如果应用程序将来会运行在容器中(并且在容器中开发),那么构建管道中的测试也就必须在容器中进行。为此,开发人员可能会倾向于运行“Docker-in-Docker”。Frank指出,任何考虑这样做的人都应该读下Jérôme Petazzoni的著作,比如文章“将Docker-in-Docker用于CI或测试环境?请三思而行”。

Frank认为,在开发过程中使用容器时,很容易错误地将容器看作一个运行特定负载的“小型虚拟机”。然而,如果能更准确地将容器视为简单OS进程,那么测试过程就可以获得额外的好处。例如,需要在容器化应用程序上运行的多个测试可以并发执行。在DockerCon欧洲大会质量改进主题的基础上,Frank提出,可以增加一个并发构建管道,当质量下降时(比如测试代码覆盖率降到一定水平之下,linting错误增加,或者违反ratchets中的规则),使构建失败,以此保证软件的质量。

Frank引用Edsger Dijkstra的话对演讲进行了总结。他表示,虽然测试至关重要,但它并不能保证开发出的软件没有缺陷,应该恰当设定测试预期。

测试是一种显示Bug存在的有效方法,但却不足以显示它们不存在。

读者可以从SlideShare上下载Frank演讲用的幻灯片,演讲视频稍后将在Docker YouTube上提供。

查看英文原文:Stop Being Lazy, and Test Your Software (with the Help of Docker)

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

关键是docker基于Linux这一被国内开发者鄙视的系统 by zhou stone

在基层的绝大多数"开发"看来,用Linux就是异怪。基层程序员的素养不高是阻碍国内软件发展的很大一部分因素。这也难怪,遍布全国的java培训班如北大青鸟之流从来都是以收钱为目的的,有件很想不明白的事情就是他们动用了什么样的手段,能将学员的脑洗的那么的彻底?!

Re: 关键是docker基于Linux这一被国内开发者鄙视的系统 by Yu Felix

不明白使用Linux的人为什么有莫名其妙的优越感。作为一名使用汇编语言开发程序的人经常被使用0、1开关开发的程序员鄙视。

laura是女士,不是“他” by Zhang Bin

windows vs linux by Dai Kaixian

从自动化测试聊到了linux vs windows..

Re: 关键是docker基于Linux这一被国内开发者鄙视的系统 by Dai Kaixian

谈一下我的理解吧.我是从Windows转向Linux的,转之前我也很纳闷为什么好好的GUI不用,非要把自己搞得那么难受去玩Command Line.但是当我在工作中接触了一段时间的Linux之后,我的想法有了一些改变。比如转命令行之前,我做爬虫的思维都是基于渲染web UI然后去解析页面,拿想要的数据。但是在linux上玩了ab,玩了curl之后,对http的理解更深了一点,知道再做爬虫的时候直接发出能拿到想要数据的那条http请求就可以了。当然也不是说这种思维的转变只能通过使用linux来实现,而是说,使用linux,能接触到更多相对底层的东西,能绕过很多人为的思维障碍去看到软件的核心所在,能将自己对相对底层相对艰深的东西的畏惧感减小,技术视野开阔了,自然想问题的方式就不一样了。
退一万步来讲,作为一个有志向的程序员,最终都是要去接触服务器的吧。常用的服务器操作命令总该要懂得。现在几乎所有正规的互联网公司,服务器都是用linux吧。我估计就算是微软,用的可能也是自己定制开发过的linux,或者把自己的windows改了改。因为服务器是一个实打实要花钱的东西,花了那么多钱,你还让他空跑那么多cpu去支持很少会被用到的gui程序,这完全就是烧钱嘛。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

5 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT