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

pytest测试专题 - 2.1 一种推荐的测试目录结构

<< 返回目录

1 pytest测试专题 - 2.1 一种推荐的测试目录结构

2 pytest 项目目录结构及文件功能

以下是典型 pytest 项目中常见的文件和目录结构及其功能的概述:


2.1 文件/目录结构

文件/目录功能描述
test_ 文件* 主测试文件,命名通常以 test_ 开头(如 test_sample.py)。
* 包含测试函数,命名也以 test_ 开头(如 test_function()
conftest.py* 项目级配置文件,用于定义公共的 fixtures、hooks 和插件。
* 对所有测试文件和子目录生效。
pytest.ini* 配置文件,用于指定 pytest 的行为(如默认标记、命令行选项)。
* 优先级高于默认配置。
__init__.py* 使目录成为 Python 包,允许模块导入。
* 通常用于测试目录结构中的子目录。
fixtures/* 自定义的 fixtures 目录,用于存储可重用的测试资源(如数据库连接、配置等)
mocks/* 存储测试中使用的模拟对象(Mock 对象),用于模拟外部依赖(如 API、数据库)
plugins/* 存储自定义的 pytest 插件,扩展框架功能(如自定义报告、命令行参数等)
data/* 存储测试数据文件(如 JSON、CSV),供测试用例动态加载和使用
logs/* 存储测试运行日志,方便调试和分析测试结果
reports/* 存储生成的测试报告(如 HTML、XML),通过插件(如 pytest-html)生成
.gitignore* 忽略不需要版本控制的文件或目录(如临时文件、日志)
requirements.txt* 列出项目依赖的第三方库,用于快速安装依赖(如 pytest, pytest-cov

2.2 目录结构示例

project/
├── tests/
│ ├── conftest.py
│ ├── test_sample.py
│ ├── fixtures/
│ │ └── db_connection.py
│ ├── mocks/
│ │ └── mock_api.py
│ ├── data/
│ │ └── test_data.json
│ └── init.py
├── src/
│ └── my_module.py
├── pytest.ini
├── requirements.txt
├── .gitignore
└── README.md


2.3 文件作用详解

  1. test_ 文件
  • 包含实际的测试用例,名称必须以 test_ 开头(如 test_login.py)。
  • 测试函数名也必须以 test_ 开头(如 test_user_login)。
  1. conftest.py
  • 用于定义全局的 fixtures,如数据库连接、测试配置等。
  • 可以被所有测试文件共享。
  1. pytest.ini
  • 配置文件,用于定义默认命令行参数(如 addopts = -v)或标记(如 markers = slow)。
  1. fixtures/
  • 存储可重用的测试资源,如数据库连接、HTTP 客户端等。
  • 通过 @pytest.fixture 装饰器定义。
  1. mocks/
  • 存储模拟对象,用于测试中的外部依赖(如 API 调用)。
  • 常用库:unittest.mockpytest-mock
  1. data/
  • 存储测试所需的静态数据文件(如 JSON、CSV)。
  • 测试用例可以通过文件加载数据。
  1. logs/
  • 存储测试运行产生的日志,方便调试和分析问题。
  1. reports/
  • 存储生成的测试报告(如 HTML、XML),通过插件(如 pytest-html)生成。
  1. requirements.txt
  • 列出项目依赖的库(如 pytest 及其插件)。
  • 通过 pip install -r requirements.txt 安装。

2.4 配置示例

2.4.1 pytest.ini 示例

[pytest]
addopts = -v --tb=short
markers =slow: marks tests as slowfast: marks tests as fast**conftest.py 示例**
```py
import pytest@pytest.fixture
def db_connection():# 模拟数据库连接yield "db_conn"# 清理资源

test_sample.py 示例

def test_add():assert 1 + 1 == 2@pytest.mark.slow
def test_slow_function():import timetime.sleep(5)assert True

作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.

<< 返回目录

相关文章:

pytest测试专题 - 2.1 一种推荐的测试目录结构

<< 返回目录 1 pytest测试专题 - 2.1 一种推荐的测试目录结构 2 pytest 项目目录结构及文件功能 以下是典型 pytest 项目中常见的文件和目录结构及其功能的概述&#xff1a; 2.1 文件/目录结构 文件/目录功能描述test_ 文件* 主测试文件&#xff0c;命名通常以 test_…...

Dify本地安装

目录 方式一docker安装&#xff1a; 方式二源码安装&#xff1a; Dify本地安装可以用docker方式&#xff0c;和源码编译方式。 先到云厂商平台申请一台Centos系统云主机&#xff0c;网络选择海外&#xff0c;需要公网IP&#xff0c;再按一下流程操作&#xff1a; 方式一doc…...

MySQL、MariaDB 和 TDSQL 的区别

MySQL、MariaDB 和 TDSQL 是三种不同的数据库管理系统&#xff0c;它们在设计理念、功能、性能和使用场景上有一些显著的区别。 以下是对这三者的详细比较和介绍。 1. MySQL 概述 类型&#xff1a;关系型数据库管理系统&#xff08;RDBMS&#xff09;。开发者&#xff1a;最…...

Java 设计模式之桥接模式

文章目录 Java 设计模式之桥接模式概述UML代码实现 Java 设计模式之桥接模式 概述 桥接模式(Bridge)&#xff1a;将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。通过桥接模式&#xff0c;可以避免类爆炸问题&#xff0c;并提高系统的可扩展性。 UML 核心…...

【Linux】网络基础

目录 一、协议分层 &#xff08;一&#xff09;计算机网络 &#xff08;二&#xff09;协议分层 &#xff08;三&#xff09;OSI模型 &#xff08;四&#xff09;TCP/IP协议 二、网络传输过程 三、IP地址和MAC地址 &#xff08;一&#xff09;IP地址 &#xff08;二&a…...

[C++]多态详解

目录 一、多态的概念 二、静态的多态 三、动态的多态 3.1多态的定义 3.2虚函数 四、虚函数的重写&#xff08;覆盖&#xff09; 4.1虚函数 4.2三同 4.3两种特殊情况 &#xff08;1&#xff09;协变 &#xff08;2&#xff09;析构函数的重写 五、C11中的final和over…...

Python常见面试题的详解7

1. 内置的数据结构有哪几种 Python 中有多种内置的数据结构&#xff0c;主要分为以下几种&#xff1a; 1.1 数值类型 整数&#xff08;int&#xff09;&#xff1a;用于表示整数&#xff0c;没有大小限制。例如&#xff1a;1, -5, 100。浮点数&#xff08;float&#xff09;…...

C++ ——构造函数

1、作用&#xff1a;创建对象时&#xff0c;给对象的属性进行初始化 2、特点 &#xff08;1&#xff09;构造函数与类同名 &#xff08;2&#xff09;如果没有显式给出构造函数&#xff0c;编译器会给出默认的构造函数&#xff08;参数为空&#xff0c;并且函数体也为空&#…...

PostgreSQL如何关闭自动commit

PostgreSQL如何关闭自动commit 在 PostgreSQL 中&#xff0c;默认情况下&#xff0c;每个 SQL 语句都会自动提交&#xff08;即 AUTOCOMMIT 是开启的&#xff09;。如果希望关闭自动提交&#xff0c;以便手动控制事务的提交和回滚&#xff0c;可以通过以下方法实现。 1 使用 …...

HCIA项目实践--静态路由的总结和简单配置

七、静态路由 7.1 路由器获取未知网段的路由信息&#xff1a; &#xff08;1&#xff09;静态路由&#xff1a;网络管理员手工配置的路由条目&#xff0c;它不依赖网络拓扑的变化进行自动更新&#xff0c;而是根据管理员预先设定的路径来转发数据包。其优点是配置简单、占用系…...

B站视频同步思维导图(全)

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z 文章目录 前言分段视频一张思维导图版本手写版本联系作者 分段视频 Java基础 并发编程 MySQL redis…...

C++游戏开发流程图

C游戏开发流程图如下&#xff1a; #mermaid-svg-by3hx6H65qEwr5mV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-by3hx6H65qEwr5mV .error-icon{fill:#552222;}#mermaid-svg-by3hx6H65qEwr5mV .error-text{fill:#5…...

回顾Golang的Channel与Select第二篇

深入掌握Go Channel与Select&#xff1a;从原理到生产级实践 一、Channel基础&#xff1a;不只是数据管道 1.1 通道的完整生命周期&#xff08;可运行示例&#xff09; package mainimport ("fmt""time" )func main() {// 创建缓冲通道ch : make(chan i…...

将OpenWrt部署在x86服务器上

正文共&#xff1a;1234 字 40 图&#xff0c;预估阅读时间&#xff1a;2 分钟 如果你问ChatGPT有哪些开源的SD-WAN方案&#xff0c;他会这样答复你&#xff1a; 我们看到&#xff0c;OpenWrt也属于比较知名的开源SD-WAN解决方案。当然&#xff0c;在很久之前&#xff0c;我就发…...

Spring Boot 常用依赖详解:如何选择和使用常用依赖

在Spring Boot项目中&#xff0c;依赖&#xff08;Dependencies&#xff09;是项目的核心组成部分。每个依赖都提供了一些特定的功能或工具&#xff0c;帮助我们快速开发应用程序。本文将详细介绍Spring Boot中常用的依赖及其作用&#xff0c;并指导你如何根据项目需求选择合适…...

day51 第十一章:图论part02

99. 岛屿数量 深搜 每一块的上下左右都遍历过了之后&#xff0c;这块陆地就遍历完了。是深搜&#xff0c;不是广搜 深搜&#xff1a;递归 def dfs(): if .....: 终止条件 dfs(子节点) directions [[0,1],[1,0],[0,-1],[-1,0]]def dfs(grid, visited, x, y):if grid[x][y]…...

介绍一下 Octave

已思考完成 收起 好的&#xff0c;我现在要回答用户关于介绍Octave的问题。首先&#xff0c;我需要整理提供的参考内容&#xff0c;看看有哪些关键点需要覆盖。 用户给的参考内容很多&#xff0c;包括知乎文章和网页资料&#xff0c;涵盖了Octave的历史、功能、语法、与MATLAB的…...

垃圾回收器

一、GC分类与性能指标 1.垃圾回收器概述: 垃圾收集器没有在规范中进行过多的规定&#xff0c;可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中&#xff0c;因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器&#xff0c;可以将…...

前端为什么要使用new Promise包裹一个函数

在前端开发中&#xff0c;使用 new Promise 包裹一个函数主要是为了将原本不支持 Promise 规范的操作转化为支持 Promise 规范的操作&#xff0c;从而可以更好地处理异步操作&#xff0c;提升代码的可读性和可维护性。下面详细介绍这么做的常见原因和应用场景&#xff1a; 1. …...

【设计模式】【行为型模式】访问者模式(Visitor)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…...

深入理解 MQTT 协议:物联网通信的核心

目录 一、什么是 MQTT&#xff1f; 二、MQTT 的核心特点 2.1 轻量级 2.2 发布/订阅模式 2.3 可靠传输 2.4 安全性 三、MQTT 协议架构 3.1 核心组件 3.2 通信流程 四、MQTT 协议详解 4.1 消息格式 4.2 消息类型 4.3 QoS 级别 五、MQTT 的应用场景 六、MQTT 的实现 6.1 常用 Bro…...

25/2/16 <算法笔记> MiDas原理

MiDaS&#xff08;Monocular Depth Sensing&#xff09;是一种基于单目深度估计的技术&#xff0c;它通过深度学习方法使用单张RGB图像&#xff08;普通2D图像&#xff09;来估算场景的深度图&#xff08;Depth Map&#xff09;。相比于传统的依赖专用深度传感器&#xff08;如…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_ssl_init 函数

#if (NGX_OPENSSL)ngx_ssl_init(log); #endif objs/ngx_auto_config.h 中 #ifndef NGX_OPENSSL #define NGX_OPENSSL 1 #endif 所以这个条件编译成立 NGX_OPENSSL 是一个宏定义&#xff0c;用于控制与 OpenSSL 相关的功能是否被启用 若用户通过./configure参数&#xff08;如-…...

时间盲注Boolen盲注之获取表、列、具体数据的函数

时间盲注 时间盲注&#xff08;Time-Based Blind SQL Injection&#xff09;是一种利用数据库响应时间的差异来推断数据的SQL注入技术。它的核心原理是通过构造特定的SQL查询&#xff0c;使得数据库在执行查询时产生时间延迟&#xff0c;从而根据延迟的有无来推断数据。 时间…...

人工智能在文化遗产保护中的创新:科技与文化的完美融合

人工智能在文化遗产保护中的创新:科技与文化的完美融合 引言 文化遗产是人类历史的见证,是我们了解过去、感知现在、展望未来的重要宝贵资源。然而,随着时间的流逝,自然灾害、战争、气候变化以及人为因素等,都对文化遗产的保护造成了严峻挑战。传统的文化遗产保护方法虽…...

linux下OSD使用SDL_ttf生成点阵数据,移植+开发代码详解

前言 在做音视频开发的时候&#xff0c;一般会在视频上增加osd水印&#xff0c;时间或者logo之类的&#xff0c;这种水印其实就是由点阵数据构成&#xff0c;本文使用freetypeSDLSDL_ttf生成文字点阵数据&#xff0c;并保存为bmp格式图片。使用这种方式的优点&#xff1a; 方便…...

渗透测试方向的就业前景怎么样?

互联网各领域资料分享专区(不定期更新)&#xff1a; Sheet 前言 渗透测试作为网络安全领域的重要分支&#xff0c;近年来就业前景持续向好&#xff0c;尤其在数字化转型加速、安全威胁加剧的背景下&#xff0c;市场需求显著增长。以下是详细分析&#xff1a; 一、市场需求旺盛 …...

SQL Server:查看当前连接数和最大连接数

目录标题 **1. 查看当前连接数****使用系统视图****使用动态管理视图** **2. 查看最大连接数****通过配置选项****通过服务器属性** **3. 查看连接数的实时变化****4. 设置最大连接数****5. 查看连接的详细信息****6. 使用 SQL Server Management Studio (SSMS)****7. 使用 SQL…...

Windows环境搭建ES集群

搭建步骤 下载安装包 下载链接&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.27-windows-x86_64.zip 解压 解压并复制出3份 es-node1配置 config/elasticsearch.yml cluster.name: xixi-es-win node.name: node-1 path.data: D:\\wor…...

【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】

一、开篇:为什么我们需要关注这场"量子+AI"的世纪联姻? 各位技术爱好者们,今天我们要聊的这个话题,可能是未来十年最值得押注的技术革命——量子深度学习。这不是简单的"1+1=2"的物理叠加,而是一场可能彻底改写AI发展轨迹的范式转移。 想象这样一个…...

DeepSeek与ChatGPT:AI语言模型的全面对决

DeepSeek与ChatGPT&#xff1a;AI语言模型的全面对决 引言&#xff1a;AI 语言模型的时代浪潮一、认识 DeepSeek 与 ChatGPT&#xff08;一&#xff09;DeepSeek&#xff1a;国产新星的崛起&#xff08;二&#xff09;ChatGPT&#xff1a;AI 界的开拓者 二、DeepSeek 与 ChatGP…...

DeepSeek-V3模型底层架构的核心技术一(多Token预测(MTP)技术)

一、DeepSeek-V3的框架结构 DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。这些创新使得模型在处理长序列、平衡计算负载以及生成连贯文本方面表现出色。 1. 基础架构 DeepSeek-V3的基础架构仍然基于Transformer框…...

QT c++ QMetaObject::invokeMethod函数 线程给界面发送数据

在项目开发时&#xff0c;常常需要用线程采集数据&#xff0c;如果要给界面发送数据&#xff0c;本文是方法之二&#xff0c;动态调用。 第一步&#xff1a;在界面类里定义一个带Q_INVOKABLE关键字的函数接收信息 第二步&#xff1a;在线程类里&#xff0c;用 QMetaObject::i…...

netcore https配置

一、生成证书 1. 安装 OpenSSL 如果尚未安装 OpenSSL&#xff0c;可以通过以下命令安装&#xff1a;Ubuntu/Debian:sudo apt update sudo apt install openssl CentOS/RHEL:sudo yum install openssl 2. 生成私钥 使用以下命令生成私钥文件&#xff08;private.key&#xff09…...

centos部署open-webui

提示&#xff1a;本文将简要介绍一下在linux下open-webui的安装过程,安装中未使用虚拟环境。 文章目录 一、open-webui是什么&#xff1f;二、安装流程1.openssl升级2.Python3.11安装3.sqlite安装升级4.pip 下载安装open-webui 总结 一、open-webui是什么&#xff1f; Open W…...

sql语言语法的学习

sql通用语法 sql分类 DDL(操作数据库和表) 操作数据库 操作表_查询 操作表_创建 举例&#xff1a; 操作表_删除 操作表_修改 DML(增删改表中数据) DML添加数据 DML删除数据 DML修改数据 DQL 单表查询 基础查询 条件查询 案例演示&#xff1a; 排序查询 聚合函数 分组查询…...

vueDevtools和文档整合(前端常用工具/插件)

3.vueDevtools安装 chrome插件vue-devtools下载地址&#xff1a; https://chrome.zzzmh.cn/info/nhdogjmejiglipccpnnnanhbledajbpd下载完放到chrome的拓展程序中即可&#xff0c;注意点&#xff1a;vue2和vue3下载版本不同&#xff0c;vue2的话使用稍微老点的版本才行。 详细…...

算法刷题--哈希表--字母异位词和两个数组的交集

哈希表概念 哈希表是根据关键码的值而直接进行访问的数据结构。 直白来讲数组就是一种哈希表。 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断一个元素是否出现集合里。 那么一般都是将一个集合里面的元素映射为哈希表的索引。 那么设计哈希表的时候需要…...

150,[5] BUUCTF WEB [BJDCTF2020]EasySearch

进入靶场 有个文件 和之前一道题如出一辙 <?php// 开启输出缓冲&#xff0c;将后续所有的输出内容先暂存到缓冲区&#xff0c;而不是直接发送到浏览器ob_start();/*** 生成一个基于随机字符串和唯一标识符的哈希值* return string 返回生成的 sha1 哈希值*/function get_…...

kibana es 语法记录 elaticsearch

目录 一、认识elaticsearch 1、什么是正向索引 2、什么是倒排索引 二、概念 1、说明 2、mysql和es的对比 三、mapping属性 1、定义 四、CRUD 1、查看es中有哪些索引库 2、创建索引库 3、修改索引库 4、删除索引库 5、新增文档 6、删除文档 5、条件查询 一、认识…...

以若依移动端版为基础,实现uniapp的flowable流程管理

1.前言 此代码是若依移动端版为基础&#xff0c;实现flowable流程管理&#xff0c;支持H5、APP和微信小程序三端。其中&#xff0c;APP是在安卓在雷电模拟器环境下完成的&#xff0c;其他环境未测试&#xff0c;此文章中所提及的APP均指上述环境。移动端是需要配合若依前后端分…...

SaaS 平台开发要点

如何在 SaaS 平台的前端开发中,编写高性能、高质量且高度通用化的 Vue 组件 一、组件设计原则 单一职责原则:每个组件只负责一个核心功能受控/非受控模式:同时支持 v-model 和自主状态管理组合式 API:使用 Composition API 提升逻辑复用性可访问性:遵循 WAI-ARIA 规范Typ…...

【Kubernetes】k8s 部署指南

1. k8s 入门 1.1 k8s 简介 需要最需要明确的就是&#xff1a;kubernetes&#xff08;简称 k8s &#xff09; 是一个 容器编排平台 &#xff0c;换句话说就是用来管理容器的&#xff0c;相信学过 Docker 的小伙伴对于容器这个概念并不陌生&#xff0c;打个比方&#xff1a;容器…...

【Linux】进程间关系与守护进程

文章目录 1. 进程组2. 会话2.1 什么是会话2.2 如何创建会话2.3 守护进程 3. 作业控制 1. 进程组 我们运行下面的命令 sleep 10000 | sleep 20000 | sleep 30000然后查看进程的信息&#xff1a; 可以看到&#xff0c;其实每一个进程除了有进程PID、PPID之外&#xff0c;还属于…...

如何通过AI让PPT制作更轻松:从AI生成PPT到一键智能生成

如何通过AI让PPT制作更轻松&#xff1a;从AI生成PPT到一键智能生成&#xff01;在这个信息爆炸的时代&#xff0c;PPT几乎成了每个人办公必备的工具。但说到制作PPT&#xff0c;很多人头疼不已——排版、设计、内容的整理&#xff0c;时间一不小心就被浪费掉了。有没有一种方法…...

解决前后端日期传输因时区差异导致日期少一天的问题

前端处理 1. 发送日期字符串而非时间戳 在前端使用日期选择器&#xff08;如 el-date-picker&#xff09;获取日期后&#xff0c;将日期转换为特定格式的字符串&#xff08;如 YYYY-MM-DD&#xff09;发送给后端&#xff0c;避免直接发送带有时区信息的时间戳或日期对象。这样…...

vue2和vue3生命周期的区别通俗易懂

用最直白的对比帮你理解 Vue2 和 Vue3 生命周期的区别&#xff0c;就像对比手机系统的升级&#xff1a; 一、生命周期阶段对比表&#xff08;老手机 vs 新手机&#xff09; 阶段Vue2&#xff08;老系统&#xff09;Vue3&#xff08;新系统&#xff09;变化说明初始化beforeCre…...

在 Ubuntu 20.04 为 Clash Verge AppImage 创建桌面图标教程

在 Ubuntu 20.04 为 AppImage 创建桌面图标教程 一、准备工作 确保你已经下载了 xxxx.AppImage 文件&#xff0c;并且知道它所在的具体路径。同时&#xff0c;你可以准备一个合适的图标文件&#xff08;.png 格式&#xff09;用于代表该应用程序&#xff0c;如果没有合适的图…...

Dockerfile 编写推荐

一、导读 本文主要介绍在编写 docker 镜像的时候一些需要注意的事项和推荐的做法。 虽然 Dockerfile 简化了镜像构建的过程&#xff0c;并且把这个过程可以进行版本控制&#xff0c;但是不正当的 Dockerfile 使用也会导致很多问题。 docker 镜像太大。如果你经常使用镜像或者…...

Flutter 中的生命周期

在 Flutter 中&#xff0c;StatefulWidget 和 StatelessWidget 这两种 Widget 的生命周期不同&#xff0c;主要关注的是 StatefulWidget&#xff0c;因为它涉及到状态的管理和更新。 StatefulWidget 的生命周期&#xff1a; 1. 创建阶段 (Create) createState()&#xff1a;…...