GMTC深圳站本周日开幕,14大专题全部上线,完整日程>> 了解详情
写点什么

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

  • 2015 年 11 月 27 日
  • 本文字数:1541 字

    阅读完需:约 5 分钟

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)

2015 年 11 月 27 日 18:002502
用户头像

发布了 1008 篇内容, 共 327.4 次阅读, 收获喜欢 300 次。

关注

评论

发布
暂无评论
发现更多内容

Rust从0到1-集合-字符串

rust string 集合 字符串 Collections

人工智能基础1 - DAY8

Qien Z.

人工智能 5月日更

玩转直播系列之RTMP协议和源码解析(2)

vivo互联网技术

RTMP 直播技术

网络攻防学习笔记 Day17

穿过生命散发芬芳

5月日更 网络攻防

极光开发者周刊【No.0514】

极光开发者

开发者

由一张精益MVP图所浮想联翩

Man

敏捷开发 研发管理

基于Agora Web SDK自定义直播画面

dajyaretakuya

WebRTC 声网 Agora 数字合成

如何让研发新同学快速 Onboarding

GrowingIO技术专栏

研发管理

15年云原生实践,在关键节点我们做对了什么? | 云原生大咖说

阿里巴巴中间件

ElasticSearch架构剖析

五分钟学大数据

大数据 elasticsearch 5月日更

做个开发喜欢的产品

MavenTalker

产品经理 产品设计 系统开发

JavaScript实现:如何写出漂亮的条件表达式

华为云开发者社区

代码 JavaScrip 条件表达式 多条件语句 多属性对象

浅入浅出 MySQL 索引

SH的全栈笔记

MySQL 索引

进大厂的iOS程序员,原来是这样“跳槽”的!

iOS猿_员

「打碎质疑」,阿里云未来何止600亿?

ToB行业头条

云计算 阿里云 盈利模式

开发者测试:你必须知道7件事

华为云开发者社区

软件工程 测试 工程师 代码 开发者测试

☕️【Java技术之旅】带你看透Lambda表达式的本质

浩宇天尚

Java Lambda java8 Lambda函数 5月日更

重磅成果 | 《数据安全治理白皮书3.0》正式对外发布!

DT极客

打破思维定式(十一)

Changing Lin

对比解读《2020年CNCF中国云原生调查报告》

阿里巴巴中间件

全链路压测二十问干货汇总(上)

数列科技

再谈synchronized锁升级

码农参上

synchronized

看见技术的价值 | 音视频技术有奖征文来啦~

InfoQ写作平台官方

音视频 活动专区 声网

SpringCloud微服务架构实战:Feign+Hystrix实现RPC调用保护

小Q

Java 学习 面试 微服务 spring cloud alibaba

云小课 | 一个三分钟快速定制OCR应用的神器,要不?

华为云开发者社区

modelarts OCR ModelArts Pro AI开发 开发套件

Python--TKinter

若尘

Python编程 5月日更

针对 Restful 协议下的接口测试平台设计

GrowingIO技术专栏

RESTful

上手 WebRTC DTLS 遇到很多 BUG?浅谈 DTLS Fragment

阿里云视频云

阿里云 音视频 WebRTC SRS流媒体服务器 视频云

Dubbo Stub与Mock

青年IT男

dubbo

2021 iOS 进阶学习视频推荐

程序员 ios开发

Keycloak 13 自定义用户身份认证流程(User Storage SPI)

Zhang

MySQL spi keycloak 13.0.0 user storage spi

2021星空论坛:破局创新,论道数字化转型

2021星空论坛:破局创新,论道数字化转型

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