当前位置: 首页 > news >正文

pytest tmpdir fixture介绍(tmpdir_factory)(自动在测试开始前创建一个临时目录,并在测试结束后删除该目录)

示例代码:

import pytest@pytest.fixture
def tmp_dir(tmpdir):  # 使用内置的 tmpdir fixturereturn tmpdir.mkdir("test_data")def test_tmp_dir(tmp_dir):file = tmp_dir.join("test.txt")file.write("Hello")assert file.read() == "Hello"

参考文章:pytest介绍(python测试框架)(@pytest.mark.parametrize、@pytest.fixtures)

文章目录

      • **代码解析**
        • 1. **导入 pytest 模块**
        • 2. **定义自定义 fixture:`tmp_dir`**
        • 3. **测试函数:`test_tmp_dir`**
      • **调用流程**
      • **如何运行代码**
      • **关键概念总结**
      • **扩展示例**

这段代码使用了 pytest 的内置 tmpdir fixture 来创建临时目录,并验证其功能。下面是对代码的逐行解释和调用流程的说明:


代码解析

1. 导入 pytest 模块
import pytest
  • 导入 pytest 模块,这是使用 pytest 测试框架的基础。

2. 定义自定义 fixture:tmp_dir
@pytest.fixture
def tmp_dir(tmpdir):  # 使用内置的 tmpdir fixturereturn tmpdir.mkdir("test_data")
  • 作用:创建一个临时目录 test_data,并将其返回给测试函数使用。
  • 关键点
    • tmpdirpytest 提供的内置 fixture,它会自动在测试开始前创建一个临时目录,并在测试结束后删除该目录。
    • tmpdir.mkdir("test_data") 在临时目录下创建一个名为 test_data 的子目录。
    • 返回值 tmp_dir 是一个 py.path.local 对象,表示 test_data 目录。

3. 测试函数:test_tmp_dir
def test_tmp_dir(tmp_dir):file = tmp_dir.join("test.txt")file.write("Hello")assert file.read() == "Hello"
  • 作用:在临时目录 test_data 中创建一个文件 test.txt,写入内容并验证内容是否正确。
  • 关键点
    • tmp_dir 是上一步定义的 fixture,它会自动传入当前测试函数。
    • tmp_dir.join("test.txt")test_data 目录下创建一个文件 test.txt
    • file.write("Hello") 向文件写入字符串 "Hello"
    • assert file.read() == "Hello" 验证文件内容是否匹配预期值。

调用流程

  1. 运行测试时

    • pytest 会自动发现以 test_ 开头的测试函数(如 test_tmp_dir)。
    • 执行 test_tmp_dir 时,pytest 会先调用 tmp_dir fixture。
  2. tmp_dir fixture 的执行

    • pytest 自动调用内置的 tmpdir fixture(无需手动调用)。
    • tmpdir.mkdir("test_data") 创建临时目录 test_data
    • 返回 test_data 目录对象给 test_tmp_dir 函数。
  3. 测试函数的执行

    • test_tmp_dir 使用 tmp_dir 参数(即 test_data 目录)。
    • 创建文件 test.txt 并写入内容,最后验证内容是否正确。
  4. 测试结束后的清理

    • 测试完成后,pytest 会自动删除临时目录 test_data 及其所有子目录和文件(包括 test.txt)。

如何运行代码

  1. 保存代码到文件
    将代码保存为 test_tmp.py

  2. 运行测试
    在终端中执行以下命令:

    pytest test_tmp.py -v
    
    • -v 表示输出详细的测试信息。
    • 如果测试通过,你会看到类似 test_tmp.py::test_tmp_dir PASSED 的输出。
  3. 验证临时目录的自动清理

    • 测试运行时,pytest 会生成一个临时目录(路径类似 /tmp/pytest-of-<username>/.../test_data)。
    • 测试结束后,该目录及其内容会被自动删除,无需手动清理。

关键概念总结

  1. tmpdir fixture

    • 自动创建临时目录,测试结束后自动删除。
    • 可用于存放测试过程中需要的临时文件。
  2. Fixture 的作用

    • 将测试的准备工作(如创建临时目录)与测试逻辑分离,提高代码的可读性和可维护性。
  3. 断言验证

    • 使用 assert 验证文件内容是否符合预期,确保测试的正确性。

扩展示例

如果你需要更复杂的临时文件管理,可以结合 tmpdir_factory(会话级临时目录)或 tempfile 模块。例如:

import pytest
import tempfile@pytest.fixture
def session_tmp_dir(tmpdir_factory):return tmpdir_factory.mktemp("session_data")def test_session_tmp_dir(session_tmp_dir):file = session_tmp_dir.join("session_file.txt")file.write("Session Data")assert file.read() == "Session Data"
  • tmpdir_factory 的作用范围是整个测试会话(session),适合需要跨多个测试共享的临时目录。

http://www.lryc.cn/news/622655.html

相关文章:

  • C#单元测试(xUnit + Moq + coverlet.collector)
  • STM32 软件I2C读写MPU6050
  • 云服务平台主流架构的相关知识体系剖析
  • 完整设计 之 智能合约系统:主题约定、代理协议和智能合约 (临时命名)----PromptPilot (助手)答问之2
  • 智能合约:区块链时代的“数字契约革命”
  • C++ STL-string类底层实现
  • 《WebPages 数据库:构建高效网络信息管理平台的关键技术解析》
  • RK3568 NPU RKNN(四):RKNN-ToolKit2性能和内存评估
  • Vue3从入门到精通:5.2 Vue3构建工具与性能优化深度解析
  • 微软Wasm学习-创建一个最简单的c#WebAssembly测试工程
  • PHP域名授权系统网站源码_授权管理工单系统_精美UI_附教程
  • 【C 学习】06-算法程序设计举例
  • [1Prompt1Story] 注意力机制增强 IPCA | 去噪神经网络 UNet | U型架构分步去噪
  • 智慧景区导览系统:基于WebGL的手绘地图导览设计与应用,DeepSeek大模型赋能精准游客引导服务
  • OBOO鸥柏丨75寸/86平板企业办公会议触控一体机核心国产化品牌招投标参数
  • eChart饼环pie中间显示总数_2个以上0值不挤掉
  • VS Code配置MinGW64编译非线性优化库NLopt
  • AI云电脑盒子技术分析——从“盒子”到“算力云边缘节点”的跃迁
  • JetPack系列教程(八):PDF库——让Android应用也能优雅“翻页”
  • 面试问题详解一:什么是 Qt?
  • 数字分类:机器学习经典案例解析
  • 电路方案分析(二十一)笔记本电脑散热风扇参考设计
  • Dify 从入门到精通(第 38/100 篇):Dify 的实时协作功能
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(2):11-20语法
  • 【学习嵌入式day-26-线程间通信】
  • 音视频学习(五十四):基于ffmpeg实现音频重采样
  • 学习游戏制作记录(制作系统与物品掉落系统)8.16
  • Redis 04 Reactor
  • 【Java web】Servlet 详解
  • 数据可视化怎么结合数字孪生?实战心得:从数据到场景的 3 步走