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

pytest中文使用文档----6临时目录和文件

  • 1. 相关的fixture
    • 1.1. tmp_path
    • 1.2. tmp_path_factory
    • 1.3. tmpdir
    • 1.4. tmpdir_factory
    • 1.5. 区别
  • 2. 默认的基本临时目录

1. 相关的fixture

1.1. tmp_path

tmp_path是一个用例级别的fixture,其作用是返回一个唯一的临时目录对象(pathlib.Path);

我们看下面的例子:

# src/chapter-6/test_tmp_path.pyCONTENT = "content"def test_create_file(tmp_path):d = tmp_path / "sub"  d.mkdir()  # 创建一个子目录p = d / "hello.txt"p.write_text(CONTENT)assert p.read_text() == CONTENTassert len(list(tmp_path.iterdir())) == 1  # iterdir() 迭代目录,返回迭代器assert 0  # 为了展示,强制置为失败

执行:

λ pytest -q -s src/chapter-6/test_tmp_path.py
F
==================================== FAILURES =====================================
________________________________ test_create_file _________________________________tmp_path = WindowsPath('C:/Users/luyao/AppData/Local/Temp/pytest-of-luyao/pytest-4/test_create_file0')def test_create_file(tmp_path):d = tmp_path / "sub"d.mkdir()  # 创建一个子目录p = d / "hello.txt"p.write_text(CONTENT)assert p.read_text() == CONTENTassert len(list(tmp_path.iterdir())) == 1  # iterdir() 迭代目录,返回迭代器
>       assert 0  # 为了展示,强制置为失败
E       assert 0src\chapter-6\test_tmp_path.py:32: AssertionError
1 failed in 0.06s

可以看出:

  • tmp_path在不同的操作系统中,返回的是不同类型的pathlib.Path对象,这里Windows系统下返回的是WindowsPath对象,它是Path的子类对象;
  • Path对象可以使用/操作符代替常用的os.path.join()的方法;更多关于pathlib的使用方法可以查看:https://docs.python.org/3.7/library/pathlib.html

1.2. tmp_path_factory

tmp_path_factory是一个会话级别的fixture,其作用是在其它fixture或者用例中创建任意的临时目录;

查看上一章tmp_path fixture的源码,我们能够看到tmp_path就是使用tmp_path_factory的一个例子:

# _pytest.tmpdir@pytest.fixture
def tmp_path(request, tmp_path_factory):"""Return a temporary directory path objectwhich is unique to each test function invocation,created as a sub directory of the base temporarydirectory.  The returned object is a :class:`pathlib.Path`object... note::in python < 3.6 this is a pathlib2.Path"""return _mk_tmp(request, tmp_path_factory)@pytest.fixture(scope="session")
def tmp_path_factory(request):"""Return a :class:`_pytest.tmpdir.TempPathFactory` instance for the test session."""return request.config._tmp_path_factory

可以看出:

  • tmp_path调用了tmp_path_factory

  • tmp_path_factory返回一个_pytest.tmpdir.TempPathFactory对象;

  • 进一步查看_mk_tmp的源码:

    def _mk_tmp(request, factory):name = request.node.namename = re.sub(r"[\W]", "_", name)MAXVAL = 30name = name[:MAXVAL]return factory.mktemp(name, numbered=True)
    

    可以看出,tmp_path最终调用了TempPathFactory.mktemp()方法,它返回的是一个pathlib.Path对象;

1.3. tmpdir

tmp_path是一个用例级别的fixture,其作用是返回一个唯一的临时目录对象(py.path.local),它提供os.path的方法;

上面的例子也可以修改成如下这样:

# src/chapter-6/test_tmpdir.pyCONTENT = "content"def test_create_file(tmpdir):p = tmpdir.mkdir("sub").join("hello.txt")  # 创建子文件夹,并新建文件p.write(CONTENT)assert p.read() == CONTENTassert len(tmpdir.listdir()) == 1  # iterdir() 迭代目录,返回列表assert 0  # 为了展示,强制置为失败

执行:

λ pytest -q -s src/chapter-6/test_tmpdir.py
F
==================================== FAILURES =====================================
________________________________ test_create_file _________________________________
tmpdir = local('C:\\Users\\luyao\\AppData\\Local\\Temp\\pytest-of-luyao\\pytest-6\\test_create_file0')def test_create_file(tmpdir):p = tmpdir.mkdir("sub").join("hello.txt")  # 创建子文件夹,并新建文件p.write(CONTENT)assert p.read() == CONTENTassert len(tmpdir.listdir()) == 1  # iterdir() 迭代目录,返回列表
>       assert 0  # 为了展示,强制置为失败
E       assert 0src\chapter-6\test_tmpdir.py:30: AssertionError
1 failed in 0.06s

其实,tmpdir也调用了tmp_path,只是对返回值做了一次py.path.local()封装:

# _pytest.tmpdir@pytest.fixture
def tmpdir(tmp_path):"""Return a temporary directory path objectwhich is unique to each test function invocation,created as a sub directory of the base temporarydirectory.  The returned object is a `py.path.local`_path object... _`py.path.local`: https://py.readthedocs.io/en/latest/path.html"""return py.path.local(tmp_path)

1.4. tmpdir_factory

tmpdir_factory是一个会话级别的fixture,其作用是在其它fixture或者用例中创建任意的临时目录;

假设,一个测试会话需要使用到一个很大的由程序生成的图像文件,相比于每个测试用例生成一次文件,更好的做法是每个会话只生成一次:

import pytest@pytest.fixture(scope="session")
def image_file(tmpdir_factory):img = compute_expensive_image()fn = tmpdir_factory.mktemp("data").join("img.png")img.save(str(fn))return fndef test_histogram(image_file):img = load_image(image_file)# compute and test histogram

1.5. 区别

fixture作用域返回值类型
tmp_path用例级别(function)pathlib.Path
tmp_path_factory会话级别(session)TempPathFactory
tmpdir用例级别(function)py.local.path
tmpdir_factory会话级别(session)TempDirFactory

2. 默认的基本临时目录

上述fixture在创建临时目录时,都是创建在系统默认的临时目录(例如:Windows系统的%temp%目录)下;你可以通过指定--basetemp=mydir选项自定义默认的基本临时目录;

λ pytest -q -s --basetemp="/d/temp" src/chapter-6/test_tmpdir.py
F
==================================== FAILURES =====================================
________________________________ test_create_file _________________________________
tmpdir = local('D:\\temp\\test_create_file0')def test_create_file(tmpdir):p = tmpdir.mkdir("sub").join("hello.txt")  # 创建子文件夹,并新建文件p.write(CONTENT)assert p.read() == CONTENTassert len(tmpdir.listdir()) == 1  # iterdir() 迭代目录,返回列表
>       assert 0  # 为了展示,强制置为失败
E       assert 0src\chapter-6\test_tmpdir.py:30: AssertionError
1 failed in 0.04s

相关文章:

pytest中文使用文档----6临时目录和文件

1. 相关的fixture 1.1. tmp_path1.2. tmp_path_factory1.3. tmpdir1.4. tmpdir_factory1.5. 区别 2. 默认的基本临时目录 1. 相关的fixture 1.1. tmp_path tmp_path是一个用例级别的fixture&#xff0c;其作用是返回一个唯一的临时目录对象&#xff08;pathlib.Path&#xf…...

从0开始搭建基于VUE的前端项目

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(vue/cli 5.0.8) ,参考&#xff08;https://cli.vuejs.org/zh/&#xff09;vue版本&#xff08;2.7.16&#xff09;&#xff0c;vue2的最后一个版本 初始化项目 创建一个git项目&#xff08;可以去gitee/github上创建&#xff…...

elementUI this.$msgbox msgBox自定义 样式自定义 富文本

看这个效果是不是很炫?突出重点提示内容,对于用户交互相当的棒! 下来说说具体实现: let self = this const h = self.$createElement; this.$msgbox({title: null,message: h("p", {style: "margin-top:10px"}, [h("i", {class: "el-i…...

Lua与Python区别

Lua和Python都是流行的编程语言&#xff0c;但它们在设计哲学、应用领域和性能特点上有所不同。以下是Lua和Python之间的对比&#xff1a; 1. **设计哲学**: - Lua被设计为一个轻量级的嵌入式脚本语言&#xff0c;重点在于简单性和效率。它有一个小巧的标准库&#xff0c;通…...

Python学习(二)

数据容器 数据容器根据特点的不同&#xff0c;如&#xff1a; 是否支持重复元素是否可以修改是否有序&#xff0c;等 分为5类&#xff0c;分别是&#xff1a; 列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字符串&#xff08;str&#xff09;、集…...

管理阿里云服务器ECS -- 网站选型和搭建

小云&#xff1a;我已经学会了如何登录云服务器ECS了&#xff0c;但是要如何搭建网站呢&#xff1f; 老王&#xff1a;目前有很多的个人网站系统软件&#xff0c;其中 WordPress 是使用非常广泛的一款&#xff0c;而且也可以把 WordPress 当作一个内容管理系统&#xff08;CMS…...

WPF中继承ItemsControl子类控件数据模板获取选中属性

需求场景 列表类控件&#xff0c;如 ListBox、ListView、DataGrid等。显示的行数据中&#xff0c;部分内容依靠选中时触发控制&#xff0c;例如选中行时行记录复选&#xff0c;部分列内容控制显隐。 案例源码以ListView 为例。 Xaml 部分 <ListView ItemsSource"{Bi…...

Android卡顿掉帧问题分析之实战篇

本文将结合典型实战案例&#xff0c;分析常见的造成卡顿等性能问题的原因。从系统工程师的总体角度来看 &#xff0c;造成卡顿等性能问题的原因总体上大致分为三个大类&#xff1a;一类是流程执行异常&#xff1b;二是系统负载异常&#xff1b;三是编译问题引起。 1 流程执行异…...

OpenKylin安装Kafka

一、操作系统 openKylin 1.0.1 X86 二、下载安装包 # 安装依赖jdk sudo apt-get update sudo apt-get install default-jdk # 下载kafka mkdir -p /data/software/kafka wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.13-2.4.1.tgz三、解压安装 # 解压缩Kafka…...

嵌入式硬件中常见的面试问题与实现

1 01 请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌) ▶电阻 美国:AVX、VISHAY威世 日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK 台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMT…...

【Node.JS】koa

文章目录 概述koa和express对比koa下载安装使用1.创建koa项目文件目录2. 创建koa服务3. 添加路由 koa-router4. 数据库服务 mongodb5. 添加请求参数json处理 koa-bodyparser6. 用户接口举例7.引入koa一些常用插件8.用户登录验证 koa-jwt9.webpack生产打包 来源 概述 Koa 是一个…...

工作日志- 不定期更新

1. protobuf中使用import引用其他proto文件&#xff0c;生成后在go语言的go modules中import 包名报错问题。 public.proto文件 //protoc --go_outpluginsgrpc:. public.proto syntax "proto3";package public;option go_package "self/game-service/msg/pu…...

Qt使用opencv打开摄像头

1.效果图 2.代码 #include "widget.h"#include <QApplication>#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp>#include <QImage> #include <QLabel> #incl…...

Redis的Hash数据结构中100万对field和value,field是自增时如何优化?优化Hash结构。

ZipList使用是有条件的&#xff0c;当entry数据量太大时就会启用哈希结构&#xff0c;占用内存空间 1.设置bigkey的上限 在redis.config中设置 2.拆分为string类型 String底层结果没有太多优化&#xff0c;占用内存多 想要批量获取数据麻烦 3.拆分为小的hash 将id/100作为…...

二十四种设计模式与六大设计原则(一):【策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式】的定义、举例说明、核心思想、适用场景和优缺点

目录 策略模式【Strategy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 代理模式【Proxy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 单例模式【Singleton Pattern】 定义 举例说明 核心思想 适用场景 优缺点 多例模式【Multition Pattern】…...

mac怎么删除python

mac 默认安装了python2&#xff1b;自己后面又安装了python3&#xff1b;为了方便&#xff0c;现在想将python3换成Anaconda3。 Anaconda是一个开源的Python发行版本&#xff0c;其包含了conda、Python等180多个科学包及其依赖项。 Python3安装之后&#xff0c;在系统中不同目…...

【笔记】Android U RILJ 中与运营商名称SPN显示相关的日志分析

源码阅读&#xff1a;AOSPXRef 常用日志关键字 Note&#xff1a;">"下发MD&#xff0c;"<"MD上报&#xff0c;[]中的id有请求和返回的对应关系 KEYComment> OPERATOR下发MD&#xff0c;请求运营商信息< OPERATORMD上报运营商注册信息> DA…...

蓝桥杯【奇怪的捐赠】c语言

我会将这题的解题的核心思路解为将10进制转化成7进制&#xff0c;毕竟题目上说的很清楚7的几次方 然后附上我认为的最优解 #include<stdio.h> int main() {int n 1000000;int sum 0;while (n ! 0){int a;a n % 7;n n / 7;sum a ;}printf("%d", sum);retu…...

【3月比赛合集】5场可报名的「创新应用」、「数据分析」和「程序设计」大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 创新应用赛&#xff08;2场比赛&#xff09;数据分析赛&#…...

vue3 视频播放功能整体复盘梳理

回顾工作中对视频的处理&#xff0c;让工作中处理的问题的经验固化成成果&#xff0c;不仅仅是完成任务&#xff0c;还能解答任务的知识点。 遇到的问题 1、如何隐藏下载按钮&#xff1f; video 标签中的controlslist属性是可以用来控制播放器上空间的显示&#xff0c;在原来默…...

半桥LLC谐振变换器基波分析法下的交流等效电压增益与品质因数Q和电感比k的关系——MATLAB...

半桥llc谐振变换器基波分析法下交流等效电压增益与品质因数Q和电感比k的关系&#xff0c;用matlab做得文件&#xff0c;可以改不同的值&#xff0c;得到不同的曲线。 此外还有开环和闭环仿真模型半桥LLC这玩意儿搞电源的兄弟肯定不陌生&#xff0c;但基波分析法算是个让人又爱又…...

跨国广域网架构:基于MIPS的嵌入式设备多协议栈兼容与状态监测实现

摘要&#xff1a; 针对出海硬件面临的全球各大运营商复杂的 NAT 老化与链路保持策略差异&#xff0c;单机的默认网络配置极易导致通信假死。本文分享一种在存储受限环境下实现的跨平台兼容 C 语言守护进程。该方案通过对虚拟底层接口的心跳探测&#xff0c;确保设备在异国网络环…...

Symfony Translation终极指南:微前端应用翻译共享的完整解决方案

Symfony Translation终极指南&#xff1a;微前端应用翻译共享的完整解决方案 【免费下载链接】translation symfony/translation: 是一个用于 PHP 的翻译库&#xff0c;支持多种消息源和翻译格式&#xff0c;可以用于构建多语言的 Web 应用程序和 API。 项目地址: https://gi…...

PDF-Extract-Kit-1.0 OCR模块深度评测:多语言文本识别效果对比

PDF-Extract-Kit-1.0 OCR模块深度评测&#xff1a;多语言文本识别效果对比 1. 测试背景与工具介绍 最近在处理一些多语言PDF文档时&#xff0c;遇到了一个挺头疼的问题——不同语言的文字识别准确率差异很大。特别是有些扫描版的文档&#xff0c;文字模糊不说&#xff0c;还混…...

零基础入门:如何将私有化Qwen3-VL大模型接入飞书工作台?

零基础入门&#xff1a;如何将私有化Qwen3-VL大模型接入飞书工作台&#xff1f; 1. 准备工作与环境确认 1.1 确认私有化部署完成 在开始接入飞书之前&#xff0c;请确保您已经按照上篇教程完成了以下准备工作&#xff1a; 已在CSDN星图AI云平台完成Qwen3-VL:30B模型的私有化…...

Unity多线程避坑指南:为什么你的子线程总崩溃?

Unity多线程避坑指南&#xff1a;为什么你的子线程总崩溃&#xff1f; 在Unity开发中&#xff0c;多线程编程就像一把双刃剑——用得好可以大幅提升性能&#xff0c;用得不好则会让你的游戏频繁崩溃。很多开发者都遇到过这样的困惑&#xff1a;明明代码逻辑看起来没问题&#x…...

黑客入门避坑指南:别再当“工具小子”了,手把手教你搭建正确的知识体系

学习网络安全技术是一条充满挑战但极具价值的道路&#xff0c;但首先需要明确一个核心原则&#xff1a;“黑客”精神在于探索与创造&#xff0c;而非破坏与窃取。 真正的安全专家&#xff08;常被称为白帽子&#xff09;致力于保护系统、数据和用户。任何未授权的访问、破坏或…...

C++多态性实战:从抽象类Shape到计算圆柱和球体体积(附完整代码)

C多态性实战&#xff1a;从抽象类Shape到计算圆柱和球体体积&#xff08;附完整代码&#xff09; 面向对象编程的魅力在于它能模拟现实世界的复杂性&#xff0c;而多态性则是这种模拟的魔法钥匙。想象一下&#xff0c;你正在开发一个几何计算库&#xff0c;需要处理各种形状的体…...

AI绘画进阶:用Stable Diffusion的LoRA模型打造专属画风(附最新v4.10模型包)

AI绘画进阶&#xff1a;用Stable Diffusion的LoRA模型打造专属画风 最近在Civitai社区看到不少创作者用LoRA模型生成的惊艳作品——从赛博朋克风的城市夜景到水墨风格的奇幻角色&#xff0c;这些作品背后都离不开对LoRA模型的深度调校。作为SD玩家&#xff0c;掌握LoRA模型的运…...

SiameseAOE实战:电商评论分析神器,自动识别好评差评属性

SiameseAOE实战&#xff1a;电商评论分析神器&#xff0c;自动识别好评差评属性 1. 电商评论分析的痛点与解决方案 每天&#xff0c;电商平台都会产生海量的用户评论数据。这些评论蕴含着宝贵的用户反馈&#xff0c;但人工阅读和分析这些评论既耗时又低效。传统的关键词匹配方…...