自动化测试是开发人员工具带中非常重要的工具。拥有一套自动化测试不仅可以提高生产率和软件质量;它还可以作为开发人员的安全网,并为代码重构提供信心。Python 附带了一个标准的unittest模块,用于编写自动化测试,但还有一个替代方案:pytest。pytest 框架入门简单,可以从简单的单元测试扩展到复杂的集成测试。许多人认为它的方法是真正的 Pythonic,具有简单的功能、简单的断言、固定装置、插件和大量的特性。越来越多的开发人员正在采用完整的测试方法,那么为什么不使用一个简单而强大的框架,并被许多人认为是真正的使用乐趣呢?
本书适用于希望开始使用 pytest 来提高日常工作流程中的测试技能的任何人。它涵盖了从安装 pytest 及其更重要的功能到将现有基于unittest的套件转换为 pytest 的技巧和窍门的所有内容。基于作者多年的测试和 pytest 经验,本文还介绍了一些技巧和讨论。我们在本书中介绍了几个代码示例,只需要一个中级 Python,不过如果你有一些unittest经验,你会更喜欢这本书。
第一章介绍了 pytest,讨论了为什么测试很重要,快速概述了标准unittest模块,最后介绍了 pytest 的主要功能。
第 2 章编写和运行测试介绍了 pytest 的安装、pytest 如何仅使用assert语句检查值、测试模块组织以及一些非常有用的命令行选项来提高生产率。
第 3 章、标记和参数化,解释 pytest标记如何工作,如何根据特定条件跳过测试,并讨论预期失败和片状测试之间的差异(以及如何处理)。最后,我们将学习如何使用parametrize标记将不同的输入集应用于同一段测试代码,避免重复,并邀请我们涵盖更多的输入案例。
第 4 章装置探讨了 pytest 更受欢迎的功能之一装置。我们还介绍了一些内置装置,最后介绍了一些技巧和窍门,以便从测试套件中的装置中获得更多信息。
第 5 章插件展示了如何在丰富的插件生态系统中安装和搜索有用的插件,同时也介绍了作者在日常工作中发现的有趣和/或必须拥有的一系列插件。
第 6 章将 unittest 套件转换为 pytest将介绍一系列技术,这些技术将帮助您开始使用 pytest,即使您的所有测试都是在unittest框架中编写的。它涵盖了从开箱即用运行测试套件到将它们转换为使用经过时间测试的技术的 pytest 特性的所有内容。
第 7 章结束,如果你想巩固你的 pytest 技能,请回顾下一步可能的步骤。我们还将介绍友好的 pytest 社区,以及您如何更多地参与其中。
以下是您需要开始的简短列表:
- 台式计算机或笔记本电脑:pytest 在 Linux、Windows 和 macOS-X 中工作,所以选择您喜欢的任何系统。
- Python3:所有示例都是用 Python3.6 编写的,但是它们应该与 Python3.4 或更高版本一起使用,如果有的话,可以进行一些小的修改。大多数示例也可以移植到 Python2,只需稍加努力,但强烈建议使用 Python3。
- 您最喜欢的文本编辑器或 IDE 来处理代码。
- 熟悉 Python:不需要太高级的东西,但是 Python 概念,比如
with语句和 decorator 是很重要的。
您可以从您的账户www.packtpub.com下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,将文件通过电子邮件直接发送给您。
您可以通过以下步骤下载代码文件:
- 登录或注册www.packtpub.com。
- 选择“支持”选项卡。
- 点击代码下载和勘误表。
- 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。
下载文件后,请确保使用以下最新版本解压或解压缩文件夹:
- WinRAR/7-Zip for Windows
- 适用于 Mac 的 Zipeg/iZip/UnRarX
- 适用于 Linux 的 7-Zip/PeaZip
该书的代码包也托管在 GitHub 上的**https://github.com/PacktPublishing/pytest-Quick-Start-Guide** 。如果代码有更新,它将在现有 GitHub 存储库中更新。
我们的丰富书籍和视频目录中还有其他代码包,请访问**https://github.com/PacktPublishing/** 。看看他们!
本书中使用了许多文本约定。
CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:“在命令提示符中键入此命令以创建一个virtualenv
代码块设置如下:
# contents of test_player_mechanics.py
def test_player_hit():
player = create_player()
assert player.health == 100
undead = create_undead()
undead.hit(player)
assert player.health == 80当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:
def test_empty_name():
with pytest.raises(InvalidCharacterNameError):
create_character(name='', class_name='warrior')
def test_invalid_class_name():
with pytest.raises(InvalidClassNameError):
create_character(name='Solaire', class_name='mage')任何命令行输入或输出的编写方式如下:
λ pip install pytest我们欢迎读者的反馈。
一般反馈:发送电子邮件feedback@packtpub.com并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发送电子邮件至questions@packtpub.com。
勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/submit-errata,选择您的书籍,点击 errata 提交表单链接,然后输入详细信息。
盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com与我们联系,并提供该材料的链接。
如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。
有关 Packt 的更多信息,请访问packtpub.com。