- 引言
- 本书涉及的内容
- 第 1 部分 Python 开发入门
- 第 1 章 Python 入门
- 第 2 章 开发 Web 应用
- 第 3 章 Python 项目的结构与包的创建
- 第 4 章 面向团队开发的工具
- 第 5 章 项目管理与审查
- 第 6 章 用 Mercurial 管理源码
- 第 7 章 完备文档的基础
- 第 8 章 模块分割设计与单元测试
- 第 9 章 Python 封装及其运用
- 第 10 章 用 Jenkins 持续集成
- 第 11 章 环境搭建与部署的自动化
- 第 12 章 应用的性能改善
- 第 13 章 让测试为我们服务
- 第 14 章 轻松使用 Django
- 第 15 章 方便好用的 Python 模块
- 附录 A VirtualBox 的设置
- 附录 B OS(Ubuntu)的设置
8.4 推进测试自动化
测试要做到让任何人都能随时执行。因为这种任何人都能随时执行的测试可以自动化。后面的章节中我们将介绍 CI 工具(Continuous Integration Tool,持续集成工具),它能够在我们向版本库提交代码时自动执行测试,并返回一个规整的测试结果报告。
执行测试和提交测试代码通常都是开发者的工作。此时各位不妨回想一下昨天的情况。测试用例增加了吗?测试用例中通过测试的比例变了吗?覆盖率怎么样?
自动化的 CI 工具会为我们持续保存这些测试结果。它能帮助我们更有效地利用测试结果,并且可以使用已提交至版本库的正式代码进行测试(毕竟谁都难免有忘记提交的时候),从而及早发现源码乃至开发效率上的种种问题。
CI 工具的用法我们放到后面的章节再学习。本章剩余的部分,我们用来给 CI 工具铺路,学习一下如何搭建让任何人都能随时执行测试的环境。
8.4.1 用 tox 自动生成执行测试的环境
tox 能便捷地为我们准备好执行测试所需的环境。tox 会在多个 virtualenv 环境中搭建测试环境,然后在这些环境中执行测试并显示结果。它能够把测试工具的选项及环境变量等内容统一起来,所以我们只需执行 tox 命令即能轻松完成所需的测试。
如下所示,可以用 pip 安装 tox 。
$ pip install tox
安装完成后,tox 命令就能用了。执行 tox 时需要用到 tox.ini 文件,我们要在这个文件中描述测试环境的设置。各个环境的设置由所用 Python 的版本、环境变量、测试所需的库、执行测试的代码等组成。
下面是 tox.ini 文件的一个例子。
[tox] envlist = py26,py27,flake8 skipsdist = true [testenv] deps = pytest webtest testfixtures mock -rrequirements.txt commands = py.test [testenv:flake8] basepython = python2.7 deps = flake8 commands = flake8
[tox] 节的 envlist 用于设置测试环境列表。这里我们用到了 py27、py26 和 flake8 这 3 个环境。py27 是个特殊的名字,它会找出当前已安装的 python2.7 命令并生成 virtualenv。
另外,我们在 skipsdist 选项中进行了设置,保证即使没有 setup.py 也能执行测试。在没有 setup.py 的情况下,依赖库由 requirements.txt 等进行管理。关于依赖库的管理,我们将在 9.2 节再次进行学习。
[testenv] 节用来进行测试环境的设置。如果存在 [testenv:flake8] 这种指定了环境名的节,则优先采用该节的设置。环境未被特别指定时,使用 [testenv] 节的通用设置。
在这个 tox.ini 文件所在的目录下执行 tox 之后,以下测试将会被执行。
· 在 python2.6 生成的 virtualenv 内执行 py.test
· 在 python2.7 生成的 virtualenv 内执行 py.test
· 在 python2.7 生成的 virtualenv 内执行 flake8
另外,使用 -e 选项可以对指定环境进行测试。
$ tox -e py27 $ tox -e flake8
可见,tox 能将多种不同的测试执行方法统一成一个。另外,由于每个测试都被分离在各自的 virtualenv 内,所以更改一个测试的设置不会对其他测试造成影响。用 Python 2.6 和 2.7 两个版本进行测试就是很好的例子。不仅如此,即便是 Web 应用框架等大程序库的不同版本测试,tox 同样能发挥作用。
8.4.2 可重复使用的测试环境
要想让测试能够重复进行,必须能够随时准备出完全相同的环境。如果上一次测试生成的文件或数据残留在环境中,很可能会对新一次测试造成影响。所以测试结束后,千万记得要用 tearDown 方法清理测试环境。另外,考虑到前一次测试可能由于出错等原因以中断的形式残留在里面,最好在测试开始时和结束时都调用一遍清理方法。清理的对象包括测试用数据库、目录、外部系统的过程等。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论