第 8 章 面向 DevOps 的 Pytest
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
持续集成、持续交付、部署以及任何经过深思熟虑的管道工作流程都会充满验证。这种验证可能发生在每一个步骤和实现重要目标的过程中。
例如,如果在生成部署的一长串步骤中,调用了curl 命令来获取一个非常重要的文件,那么如果失败了,你认为构建工作应该继续吗?可能不会!curl 有一个标志,可以在发生 HTTP 错误时生成非零的退出状态 (--fail)。这种简单的标志用法是一种验证形式:确保请求成功,否则构建步骤失败。关键词是确保成功,这也是本章的核心内容:验证和测试策略可以帮助你构建更好的基础架构。
当 Python 加入其中,利用pytest 等测试框架来处理系统验证时,对验证的思考就会变得更加令人满意。
本章回顾了使用现象级pytest 框架在 Python 中进行测试的一些相关基础知识,然后深入探讨了该框架的一些高级功能,最后详细介绍了TestInfra项目,它是pytest 的一个插件,可以进行系统验证。
用 pytest 测试超能力
我们对pytest 框架赞不绝口。该框架由 Holger Krekel 创建,现在由许多人共同维护,他们出色地开发出了高质量的软件,而这些软件通常是我们日常工作的一部分。作为一个功能齐全的框架,我们很难在不重复项目完整文档的情况下缩小介绍范围,从而提供有用的介绍。
提示
pytest 项目的文档中有大量值得查看的信息、示例和功能细节。随着项目不断推出新版本和改进测试的不同方法,总有新东西值得学习。
当 Alfredo 第一次接触这个框架时,他还在为编写测试而苦恼,他发现坚持使用 Python 内置的unittest 测试方式很麻烦(本章后面会详细介绍两者的区别)。他花了几分钟就迷上了pytest的神奇报告。这并没有强迫他放弃原来编写测试的方式,而且开箱即用,无需修改!这种灵活性在整个项目中都得到了体现,即使在今天可能无法实现的情况下,您也可以通过插件或配置文件扩展其功能。
通过了解如何编写更简单的测试用例,并利用命令行工具、报告引擎、插件扩展性和框架实用程序,你就会想编写更多的测试,而这些测试无疑都会更好。
pytest 入门
pytest 最简单的形式是一个命令行工具,用于发现 Python 测试并执行它们。它并不强迫用户了解其内部结构,因此很容易上手。本节将演示一些最基本的功能,从编写测试到布局文件(以便自动发现它们),最后看看它与 Python 内置测试框架 之间的主要区别。unittest
提示
大多数 集成开发环境(IDE),如 PyCharm 和 Visual Studio Code,都内置了运行pytest 的支持。如果使用 Vim 等文本编辑器,则可通过 pytest.vim插件提供支持。在编辑器中使用pytest 可以节省时间,更容易调试故障,但要注意并非每个选项或插件都受支持。
使用 pytest 进行测试
确保已安装pytest 并可在命令行中使用:
$ python3 -m venv testing $ source testing/bin/activate
创建一个名为test_basic.py 的文件,它应该是这样的
deftest_simple():assertTruedeftest_fails():assertFalse
如果pytest 不带任何参数运行,则会显示通过和失败:
$ (testing) ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access