写点什么

不要再偷懒,请测试你的软件(借力 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:002592
用户头像

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

关注

评论

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

IDEA中Maven依赖下载失败解决方案

爱好编程进阶

Java 程序员 后端开发

JAVA 序列化、反序列化以及serialVersionUID

爱好编程进阶

Java 程序员 后端开发

毕业设计-设计电商秒杀系统

孙强

#架构实战营

场景化组件开源,融云持续回馈开源生态

融云 RongCloud

DDIA 读书笔记(一):可靠、可扩展、可维护

木鸟杂记

数据库 分布式系统 数据系统 DDIA 设计数据密集型应用

Docker(1)——CentOS7

爱好编程进阶

Java 程序员 后端开发

Github神作!2021Java秋招高级面试指南,吃透至少阿里P6

爱好编程进阶

程序员 后端开发

Java异常面试题

爱好编程进阶

Java 程序员 后端开发

Java架构师面试题系列之Mybatis面试专题(36题,含详细答案解析

爱好编程进阶

Java 程序员 后端开发

融云洞察:打造社交元宇宙,从「读懂 00 后」开始

融云 RongCloud

BAT大厂Java面试必备10道Spring问题,有你不知道的吗?

爱好编程进阶

Java 程序员 后端开发

Ceph实战(二)-高可用集群部署

爱好编程进阶

程序员 后端开发

Java中级面试题及答案整理

爱好编程进阶

程序员 后端开发

Java并行程序基础

爱好编程进阶

Java 程序员 后端开发

[Day26]-[BST] 验证BST

方勇(gopher)

LeetCode BFS 数据结构与算法

Java学习笔记-集合

爱好编程进阶

Java 程序员 后端开发

Java实现栈和队列

爱好编程进阶

Java 程序员 后端开发

Go 语言入门很简单:net/url 包

宇宙之一粟

url Go 语言 4月月更

Java如何支持函数式编程?

爱好编程进阶

Java 程序员 后端开发

Java开发5年从星瑞15K跳槽去腾讯32K+16,啃完这份笔记你也可以

爱好编程进阶

Java 程序员 后端开发

融云实践:实时音频混音在 Web 端的探索与实践

融云 RongCloud

Docker下多机器免密码SSH登录

爱好编程进阶

Java 程序员 后端开发

Java基础19 IO基础

爱好编程进阶

程序员 后端开发

Java基础面试题——集合

爱好编程进阶

Java 程序员 后端开发

CentOS 8 更新提示 appstream 错误

HoneyMoose

在线Excel转HtmlTable工具

入门小站

工具

Elasticsearch聚合学习之三:范围限定

爱好编程进阶

Java 程序员 后端开发

Fluid — 云原生环境下的高效“数据物流系统

爱好编程进阶

Java 程序员 后端开发

Java中级面试题及答案整理(1)

爱好编程进阶

Java 程序员 后端开发

redis优化系列五Sentinel 实现原理常见问题

乌龟哥哥

4月月更

考试试卷存储方案

小虾米

架构实战营

不要再偷懒,请测试你的软件(借力Docker)_测试_Daniel Bryant_InfoQ精选文章