返回介绍

8.4 推进测试自动化

发布于 2024-01-21 17:11:03 字数 2042 浏览 0 评论 0 收藏 0

测试要做到让任何人都能随时执行。因为这种任何人都能随时执行的测试可以自动化。后面的章节中我们将介绍 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文