当前位置: 首页 > 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 slow
    fast: 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 time
    time.sleep(5)
    assert True


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

<< 返回目录

相关文章:

  • 编程速递-庆祝Delphi诞生30周年!
  • 2025智能硬件售后服务管理系统选择的六大标准
  • 小项目第一天
  • CAS单点登录(第7版)20.用户界面
  • Centos安装php-8.0.24.tar
  • unity学习41:动画里的曲线curve参数 和 事件 events
  • CAS单点登录(第7版)17.账户注册
  • 深度学习框架探秘|TensorFlow:AI 世界的万能钥匙
  • 安科瑞光伏发电防逆流解决方案——守护电网安全,提升能源效率
  • 算法随笔_51: 表现良好的最长时间段_方法2
  • Java三大特性
  • Uniapp 短视频去水印解析工具开发实现
  • Ubuntu添加桌面快捷方式
  • 2025有哪些关键词优化工具好用
  • XML Schema anyAttribute 元素详解
  • 算法12-贪心算法
  • 解析浏览器中JavaScript与Native交互原理:以WebGPU为例
  • 应用层优秀的共享民宿物联网框架该怎么选?
  • Spring篇--AOP
  • 前端可以不用依赖后端实现导出大数据了
  • 晶圆销量上升,中芯国际一季度营收增长近三成,净利增超1.6倍
  • 国家主席习近平同普京总统共见记者
  • 视频|漫画家寂地:古老丝路上的文化与交流留下的独特印记
  • 抗战回望21︱《“良民”日记》:一个“良民”在沦陷区的见闻与感受
  • 昆廷·斯金纳:作为“独立自主”的自由
  • 观察|22项达全球最优,世行为上海营商环境“盖章”