第1章介绍pytest的安装,同时会介绍Tasks项目的数据结构部分(名为Task的namedtuple),并用它作为测试示例。我们会学习如何指定测试文件运行,以及pytest常用的命令行命令,包括重新运行失败测试、遇到失败即停止所有测试、控制堆栈跟踪、控制日志输出,等等。
第2章将使用pip在本地安装Tasks项目,学习在Python项目中如何组织测试目录,这样才能针对实际项目编写测试用例。这一章的所有示例都依赖外部程序,包括数据库写入。
第2章的重点是测试函数,你将学习在pytest中高效使用断言语句。这一章还会讲解marker标记功能的用法,marker标记可以将测试进行归类或分组,方便一起运行,也可以将某些测试标记为skip(跳过不执行),marker标记还可以告诉pytest我们知道某些测试是一定会失败的。如果希望运行指定的测试子集,除了使用marker,还可以将测试代码组织成测试目录、测试模块、测试类,然后运行。
并非所有的测试代码都要放到测试函数中。第3章介绍如何将测试数据、启动逻辑、销毁逻辑放入fixture(pytest定义的一种测试脚手架)。设置系统(或子系统、系统单元)是软件测试的重要环节,第3章将介绍用一个简单的fixture完成这方面的工作(包括对数据库进行初始化,写入数据以备测试之用)。Fixture模块的功能非常强大,你可以利用它简化测试代码,从而提高代码的可读性和可维护性。Fixture像测试函数一样,也有参数。利用参数,你只需要编写一份代码,就可以针对TinyDB和MongoDB(或其他Tasks项目支持的数据库)开展测试。
第4章介绍pytest内置的fixture以满足测试中常见的一些需求,包括生成和销毁临时目录、截取输出流(通过日志判定结果)、使用monkey patch、检查是否发出警告,等等。
第5章讲解如何在pytest中添加命令行选项,如何改进打印输出,如何打包分发自己编写的插件,如何共享定制化的pytest(包括fixture)。这一章开发的插件可以改善Tasks项目测试失败时的输出呈现方式。你还将学习测试自己的测试插件(元测试)。读完这一章,想必你已经等不及编写自己的插件了。附录C收集了一些热门的社区插件,可供参考。
第6章讲解通过pytest.ini文件修改默认配置,自定义pytest的运行方式。pytest.ini文件可以存放某些命令选项,从而减少你重复输入命令的次数;利用它还可以指定pytest忽略某些测试目录,或者指定pytest的低版本,等等。使用tox.ini和setup.cfg文件也可以实现同样的功能。
第7章(后一章)介绍pytest与其他工具的结合使用。我们将借助tox让Tasks项目在多个Python版本上运行;学习如何测试Tasks项目的CLI部分,而不必mock系统的其余部分;借助coverage.py检查Tasks项目代码块的测试覆盖情况;通过Jenkins发起测试并实时显示结果。后,还会学习如何让pytest运行基于unittest的测试用例,以及把pytest的fixture共享给unittest的测试用例使用。
展开
Chris Shaver,Uprising Technology产品总监
“在Python社区中,系统化的软件测试往往要么被完全忽略,要么解决方案不够优雅。许多Python程序员完全没意识到pytest的存在。Brian Okken(本书作者)告诉我们:用pytest进行软件测试,过程既简单易懂,也非常有趣。”
Dmitry Zinoviev,《Data Science Essentials in Python》作者
“本书弥补了Python图书市场的空白。”
Frank Ruiz,Box公司现场可靠性工程师