tmp_path 是什么
tmp_path 是 pytest 内置夹具:为每个用例提供独立的 pathlib 临时目录,结束后自动清理,适合下载、导出、配置文件等落盘类验证。它让「写文件」的测试不再污染工作区,也不会被并行执行互相踩文件,是落盘类用例的标准做法。
基本信息
| 类型 | pytest 内置夹具,用例级独立目录 |
|---|---|
| 返回值 | pathlib.Path 对象,可直接做路径运算 |
| 生命周期 | 用例结束自动清理,无需手工删除 |
| 同族夹具 | tmp_path_factory(会话级,跨用例共享) |
| 适用场景 | 下载、导出、日志、配置落盘验证 |
落盘验证
落盘验证
def test_export(tmp_path):
# 组合路径,不污染工作区
out = tmp_path / "report.csv"
export_report(out)
# 落盘后按内容断言
assert out.exists()
assert out.read_text(encoding="utf-8").startswith("id,")典型使用场景
- 导出功能:CSV、Excel、PDF 落盘后校验内容与命名。
- 下载流程:验证文件确实生成且大小、头部合规。
- 上传暂存:本地暂存文件的生命周期与清理。
- 配置写入:程序写出的配置文件落在预期目录。
- 日志断言:解析日志文件内容,验证关键事件。
- 并行安全:xdist 并行下每个用例目录互不冲突。
断言层次
| 层次 | 检查什么 | 常见遗漏 |
|---|---|---|
| 存在性 | 文件确实生成 | 空文件也要拦住 |
| 命名 | 文件名与扩展名符合约定 | 下载场景常被忽略 |
| 内容 | 头部、行数、编码 | 按业务规则抽样 |
| 清理 | 临时目录不残留 | 依赖夹具自动清理 |
同族夹具还有 tmp_path_factory(会话级),用于跨用例共享的临时目录。
Windows 与 Linux 路径分隔符不同:用 pathlib 组合路径,别手写反斜杠。
tmp_path 与项目目录无关:相对拼接都在临时目录内,不要用当前工作目录去猜文件位置。
需要固定文件名时自己拼接:tmp_path 目录本身随机命名,跨用例找旧文件不可靠。
延伸场景
- 多文件导出:按批次生成一组文件,逐一断言命名与数量。
- 重复导出:同一用例连续导出两次,内容一致且不追加残留。