首页/开发/软件测试速查/pytest tmp_path 临时目录
自动化测试66 条

pytest tmp_path 临时目录

内置夹具 tmp_path 为每个用例提供独立的 pathlib 临时目录,结束后自动清理;适合下载、导出、配置文件等落盘类验证,不污染工作区。

软件测试速查开发更新于 2026-10-13

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 目录本身随机命名,跨用例找旧文件不可靠。

延伸场景

  • 多文件导出:按批次生成一组文件,逐一断言命名与数量。
  • 重复导出:同一用例连续导出两次,内容一致且不追加残留。

易错点

  • 用例写死绝对路径,CI 环境没有该目录直接失败
  • 依赖用例间共享同一个临时文件,破坏用例互相隔离的前提
  • 只在断言里检查文件存在,不检查内容与编码,空文件也通过
  • 读取时不指定编码,Windows 与 Linux 默认编码不同导致比对失败
  • 清理逻辑依赖手工删除,异常退出后残留大文件占满磁盘
  • 把 tmp_path 当持久暂存区跨用例复用,清理后数据消失导致用例互相影响

数据来源与参考

  • pytest 官方文档:Temporary directories and files
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌