【Pytest】结构介绍

server/2025/1/24 20:36:44/

1.目录结构介绍

project_root/
│
├── tests/           # 测试用例存放目录
│   ├── __init__.py
│   ├── test_module1.py
│ 
├── module1.py       # 被测试的模块
├── conftest.py      # pytest配置文件,可定义fixture和钩子函数
├── pytest.ini       # pytest全局配置文件
└── run.py           # 运行测试的脚本

pytestini_15">2. pytest.ini

pytest.ini 是 pytest 测试框架的配置文件,它允许你对 pytest 的行为进行全局或项目级别的定制。
作用
全局配置:借助 pytest.ini 文件,你可以为整个项目设定通用的配置选项,从而避免在每次运行 pytest 时都要在命令行输入相同的参数。
提高可维护性:把配置信息集中存放在一个文件里,能让项目的配置更加清晰,便于维护和管理。
定制测试行为:可以自定义测试发现规则、指定插件、设置日志级别等,以满足不同项目的特定需求。

addopts

此配置项用于添加额外的命令行选项,这些选项会在每次运行 pytest 时自动生效。

[pytest]
addopts = -v -s

-v:表示以详细模式运行测试,会输出更多的测试信息。
-s:表示捕获标准输出,允许测试用例中的 print 语句正常输出。

testpaths

该配置项用于指定 pytest 搜索测试文件的路径。

[pytest]
testpaths = tests

这意味着 pytest 只会在 tests 目录及其子目录下查找测试文件。

norecursedirs

此配置项用于指定 pytest 不进行递归搜索的目录。

[pytest]
norecursedirs = .git venv

这表明 pytest 不会在 .git 和 venv 目录及其子目录下查找测试文件。

3.conftest.py

conftest.py 是 pytest 里一个非常重要的文件,它能对 pytest 的测试行为进行灵活配置与扩展。

  1. 共享 Fixture 函数
    Fixture 是 pytest 里用于提供测试数据、初始化测试环境等的可复用函数。在 conftest.py 里定义的 Fixture 函数能够被同目录及其子目录下的所有测试文件使用,无需在每个测试文件中重复定义。
    Fixture 函数可以有参数,并且可以设置作用域(如 function、class、module、session)
# conftest.py
import pytest@pytest.fixture(scope="module")
def db_connection():# 模拟数据库连接print("建立数据库连接")yield  # 在此处执行测试用例print("关闭数据库连接")
  1. 自定义钩子函数
    钩子函数是 pytest 提供的一些特殊函数,能在测试执行的不同阶段插入自定义逻辑。在 conftest.py 里定义钩子函数可对 pytest 的默认行为进行修改。
# conftest.py
import pytestdef pytest_sessionstart(session):"""在测试会话开始时执行"""print("测试会话开始")def pytest_sessionfinish(session, exitstatus):"""在测试会话结束时执行"""print("测试会话结束")
  1. 也可以 在这里,全局配置和初始化
    可在 conftest.py 中进行一些全局配置和初始化操作,例如设置日志、加载配置文件等,让所有测试文件都能使用这些配置。
    注意事项
    conftest.py 文件不需要手动导入,pytest 会自动发现并加载它。
    不同目录下的 conftest.py 文件有不同的作用范围,子目录下的 conftest.py 文件会覆盖父目录中同名的配置。
    合理使用 Fixture 的作用域,避免不必要的资源浪费。

4.run.py

  1. 统一测试入口
    在大型项目里,测试用例可能分布在多个不同的目录和文件中。借助 run.py 文件,你可以把所有测试的启动逻辑集中起来,让测试的执行更加统一和便捷。开发人员或测试人员只需运行这个文件,就能启动整个项目的测试流程。
  2. 定制测试运行参数
    run.py 文件允许你根据不同的需求定制 pytest 的运行参数,例如指定测试文件、设置测试报告路径、控制测试的详细程度等。
import pytestif __name__ == "__main__":# 只运行 tests 目录下的测试用例,并生成 HTML 报告pytest.main(['-v', '-s', '--html=report.html', 'tests'])

在上述代码中:
-v 表示以详细模式运行测试,会输出更多的测试信息。
-s 表示捕获标准输出,允许测试用例中的 print 语句正常输出。
–html=report.html 表示生成一个名为 report.html 的 HTML 测试报告。
tests 表示只运行 tests 目录下的测试用例。

  1. 执行测试前的预处理操作
    在 run.py 文件中,你可以添加一些测试前的预处理操作,比如初始化测试环境、加载配置文件、启动服务等。类似于conftest.py作用
  2. 执行测试后的清理操作
    同样,你也可以在 run.py 文件中添加测试后的清理操作,如关闭服务、删除临时文件等,确保测试环境恢复到初始状态。

http://www.ppmy.cn/server/161103.html

相关文章

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2…

mac 通过 Homebrew 安装 git 遇到的问题

问题真多啊 !!! 解决方式 见 1. / 2. / 3 . / 4. / 5. remote: Enumerating objects: 290323, done. remote: Counting objects: 100% (473/473), done. remote: Compressing objects: 100% (253/253), done. error: RPC failed; curl 92 H…

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展 在人工智能领域,大模型的竞争一直备受关注。最近,DeepSeek 团队发布了 DeepSeek-R1 模型,并开源了模型权重,这一举动无疑为 AI 领域带来了新的活力。今…

C++函数——fill

在C中,std::fill 是标准库提供的一个算法适用于几乎所有类型的容器,只要这些容器支持迭代器操作。具体来说,std::fill 的适用性取决于容器是否提供了满足其要求的迭代器类型,用于将指定范围内的所有元素设置为某个特定值。它是一个…

Wireshark TS | 虚假的 TCP Spurious Retransmission

前言 在写《TCP Analysis Flags 系列》文章时梳理出不少有趣的案例,当然过程当中也有很多的疑问,嗯,自得其乐。考虑到不同的系列偏重不太一样,因此在 TroubleShooting 系列中我再把有些案例单独展开说说。 问题背景 TCP Spurio…

Maven运行任何命令都报错“Internal error: java.lang.ArrayIndexOutOfBoundsException”

今天遇到一个奇怪的问题,在maven工程下运行任何mvn命令都报“Internal error: java.lang.ArrayIndexOutOfBoundsException”错误,具体错误如下: $ mvn install [INFO] Scanning for projects... [ERROR] Internal error: java.lang.ArrayInd…

【C++】类和对象(二)

示例&#xff1a;对属性和行为加以权限限制 #include<iostream> #include<string> using namespace std; class person { public :string m_name;//姓名 protected:string m_car;//汽车 private :int m_password;//银行卡密码 public:void func(){m_name "…

LLMs的星辰大海:大语言模型的前世今生

文章目录 一. LLM 的演进&#xff1a;从规则到智能的跃迁 &#x1f4ab;1.1 语言模型的蹒跚起步 &#x1f476;1.2 RNN 与 LSTM&#xff1a;序列建模的尝试 &#x1f9d0;1.3 Transformer 的横空出世&#xff1a;自注意力机制的革命 &#x1f4a5;1.4 LLM &#xff1a;从预测到…