Pytest tmp_path 实战指南:测试中的临时目录管理
概述
在编写涉及文件操作的测试时,我们经常会遇到一些问题:
- 测试写入的文件污染了本地环境
- 不同测试之间因文件路径冲突导致互相干扰
- 测试结束后需要手动清理临时文件
Pytest 提供了一个非常实用的内置,它能帮助我们自动创建和清理临时目录,确保每个测试都在独立、干净的环境中运行
基本原理
什么是 tmp_path
tmp_path
是 Pytest 提供的一个内置 fixture,它为每个测试函数提供一个唯一的临时目录路径(Pathlib 对象),用于创建、读写、删除文件等操作
tmp_path的特点
特性 | 描述 |
---|---|
自动创建 | 每个测试运行前自动创建一个新目录 |
自动清理 | 测试结束后自动删除该目录及其内容 |
独立隔离 | 每个测试都有自己的临时目录,互不干扰 |
类型为 pathlib.Path | 支持现代 Python 文件操作方式 |
基本使用方式
def test_write_file(tmp_path):file = tmp_path / "test.txt"file.write_text("Hello, Pytest!")assert file.read_text() == "Hello, Pytest!"
在这个例子中:
tmp_path
是由 Pytest 提供的临时目录。file
是该目录下的一个文件。- 测试结束后,整个目录(包括文件)会被自动删除。
常见使用方式
创建临时文件和目录
def test_create_file(tmp_path):file = tmp_path / "data.txt"file.touch()