概要
在本模块中,你探索了可帮助你编写更具表现力且可维护的测试的 pytest 功能。 您使用 @pytest.mark.parametrize 运行同一测试函数,并传入多个输入值。 Pytest 将每个参数集收集为单独的测试用例,以便报告可以准确识别传递或失败的输入。
你还使用了固定例程。 固定例程提供可重用的 setup 代码,通过函数参数显式声明测试依赖项,并且可以使用基于 yield 的 teardown 和适当的固定例程作用域来管理清理工作。 你通过如下方式运用了这些理念:编写参数化测试,并将一个基于类的测试从 xUnit 风格的 setup_method() 和 teardown_method() 方法重构为自定义固定例程,该固定例程使用 pytest 的 tmp_path 固定例程来处理临时文件。 你还回顾了内置固定例程,包括 tmp_path(它为每次测试函数调用提供一个 pathlib.Path 临时目录),以及 monkeypatch(它临时更改属性、字典值、环境变量、sys.path 或当前工作目录,并在提出请求的测试或固定例程完成后还原这些更改)。
您现在可以:
- 使用参数化覆盖多个输入,而无需重复测试函数。
- 读取 pytest 输出以诊断哪些参数值传递或失败。
- 创建自定义装置以共享设置和清理逻辑。
- 根据 setup 的运行频率以及执行清理的时间来选择固定例程作用域。
- 将共享固定例程放置在
conftest.py中,这样同一目录及其子目录中的测试即可在不显式导入这些固定例程的情况下请求使用它们。 - 使用内置固定例程(包括
tmp_path,用于处理临时文件;以及monkeypatch,用于处理作用域内的状态更改)来隔离依赖于文件、环境变量、导入或外部状态的测试。
有关详细信息,请参阅 pytest 文档以了解参数化测试、固定例程、内置固定例程、临时目录和文件、xUnit 风格的 setup 和 monkeypatch。