pytest中文使用文档----6临时目录和文件
- 1. 相关的
fixture- 1.1.
tmp_path - 1.2.
tmp_path_factory - 1.3.
tmpdir - 1.4.
tmpdir_factory - 1.5. 区别
- 1.1.
- 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,其作用是返回一个唯一的临时目录对象(pathlib.Path…...
从0开始搭建基于VUE的前端项目
准备与版本 安装nodejs(v20.11.1)安装vue脚手架(vue/cli 5.0.8) ,参考(https://cli.vuejs.org/zh/)vue版本(2.7.16),vue2的最后一个版本 初始化项目 创建一个git项目(可以去gitee/github上创建ÿ…...
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都是流行的编程语言,但它们在设计哲学、应用领域和性能特点上有所不同。以下是Lua和Python之间的对比: 1. **设计哲学**: - Lua被设计为一个轻量级的嵌入式脚本语言,重点在于简单性和效率。它有一个小巧的标准库,通…...
Python学习(二)
数据容器 数据容器根据特点的不同,如: 是否支持重复元素是否可以修改是否有序,等 分为5类,分别是: 列表(list)、元组(tuple)、字符串(str)、集…...
管理阿里云服务器ECS -- 网站选型和搭建
小云:我已经学会了如何登录云服务器ECS了,但是要如何搭建网站呢? 老王:目前有很多的个人网站系统软件,其中 WordPress 是使用非常广泛的一款,而且也可以把 WordPress 当作一个内容管理系统(CMS…...
WPF中继承ItemsControl子类控件数据模板获取选中属性
需求场景 列表类控件,如 ListBox、ListView、DataGrid等。显示的行数据中,部分内容依靠选中时触发控制,例如选中行时行记录复选,部分列内容控制显隐。 案例源码以ListView 为例。 Xaml 部分 <ListView ItemsSource"{Bi…...
Android卡顿掉帧问题分析之实战篇
本文将结合典型实战案例,分析常见的造成卡顿等性能问题的原因。从系统工程师的总体角度来看 ,造成卡顿等性能问题的原因总体上大致分为三个大类:一类是流程执行异常;二是系统负载异常;三是编译问题引起。 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文件,生成后在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使用是有条件的,当entry数据量太大时就会启用哈希结构,占用内存空间 1.设置bigkey的上限 在redis.config中设置 2.拆分为string类型 String底层结果没有太多优化,占用内存多 想要批量获取数据麻烦 3.拆分为小的hash 将id/100作为…...
二十四种设计模式与六大设计原则(一):【策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式】的定义、举例说明、核心思想、适用场景和优缺点
目录 策略模式【Strategy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 代理模式【Proxy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 单例模式【Singleton Pattern】 定义 举例说明 核心思想 适用场景 优缺点 多例模式【Multition Pattern】…...
mac怎么删除python
mac 默认安装了python2;自己后面又安装了python3;为了方便,现在想将python3换成Anaconda3。 Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 Python3安装之后,在系统中不同目…...
【笔记】Android U RILJ 中与运营商名称SPN显示相关的日志分析
源码阅读:AOSPXRef 常用日志关键字 Note:">"下发MD,"<"MD上报,[]中的id有请求和返回的对应关系 KEYComment> OPERATOR下发MD,请求运营商信息< OPERATORMD上报运营商注册信息> DA…...
蓝桥杯【奇怪的捐赠】c语言
我会将这题的解题的核心思路解为将10进制转化成7进制,毕竟题目上说的很清楚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、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 创新应用赛(2场比赛)数据分析赛&#…...
vue3 视频播放功能整体复盘梳理
回顾工作中对视频的处理,让工作中处理的问题的经验固化成成果,不仅仅是完成任务,还能解答任务的知识点。 遇到的问题 1、如何隐藏下载按钮? video 标签中的controlslist属性是可以用来控制播放器上空间的显示,在原来默…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
