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