搬山行者

无志愁压头,有志能搬山

业余程序员的学习笔记~


pytest中conftest的使用

目录

pytest中conftest的使用

pytest的conftest.py文件是一个特殊文件,用于定义测试夹具(fixtures)和其他配置,以便在整个测试套件中共享。conftest.py 文件可以放在任何目录下,pytest 会自动发现并加载它们。

主要用途

  1. 定义夹具(fixtures)
  2. 自定义测试钩子(hooks)
  3. 修改测试行为

示例:使用 conftest.py 假设项目结构如下

project/
│
├── tests/
│   ├── conftest.py
│   ├── test_example.py
│   └── test_another.py
│
└── app.py

定义夹具(fixtures)

在conftest.py文件中定义夹具,以便在整个测试套件中共享.

# conftest.py
import pytest

# 定义一个简单的夹具
@pytest.fixture
def example_fixture():
    print("Setting up example fixture")
    yield
    print("Tearing down example fixture")

# 定义一个数据库连接夹具

@pytest.fixture
def db_connection():
    print("Connecting to database")
    yield
    print("Disconnecting from database")

# test_example.py

def test_example_function(example_fixture):
    print("Running example test")
    assert True

def test_another_function(db_connection):
    print("Running another test")
    assert True

# test_another.py

def test_third_function(db_connection):
    print("Running third test")
    assert True

自定义测试钩子(hooks)

pytest_addoption

用途:向命令行界面添加自定义选项。 参数:parser - OptionParser实例。

def pytest_addoption(parser):
    parser.addoption("--myoption", action="store", default="default_value", help="my option description")

pytest_configure

用途:在测试会话开始前配置pytest. 参数:config - 当前配置对象.

def pytest_configure(config):
    print("Configuring pytest")

pytest_sessionstart

用途:在测试会话开始时调用。 参数:session - 当前测试会话对象。

def pytest_sessionstart(session):
    print("Starting test session")

pytest_collection

用途:在测试收集开始时调用。 参数:session - 当前测试会话对象

def pytest_collection(session):
    print("Collecting tests")
  

pytest_collection_modifyitems

用途:在测试收集完成后修改测试项。 参数:session, config, items - 当前测试会话对象、当前配置对象和测试项列表。

def pytest_collection_modifyitems(session, config, items):
    print("Modifying test items")

pytest_runtest_protocol

用途:在测试项开始执行前调用。 参数:item, nextitem - 当前测试项和下一个测试项。

def pytest_runtest_protocol(item, nextitem):
    print("Running test protocol")

pytest_runtest_setup

用途:在每个测试项开始前调用。 参数:item - 当前测试项。

def pytest_runtest_setup(item):
    print(f"Setting up test item: {item.name}")

pytest_runtest_call

用途:在每个测试项的实际执行期间调用。 参数:item - 当前测试项。

def pytest_runtest_call(item):
    print(f"Executing test item: {item.name}")

pytest_runtest_teardown

用途:在每个测试项结束后调用。 参数:item, nextitem - 当前测试项和下一个测试项。 def pytest_runtest_teardown(item, nextitem): print(f”Tearing down test item: {item.name}”)

pytest_runtest_makereport

用途:在每个测试项执行后生成报告。 参数:item, call - 当前测试项和调用信息。

def pytest_runtest_makereport(item, call):
    print(f"Making report for test item: {item.name}")

pytest_runtest_logreport

用途:在每个测试项的日志报告生成后调用。 参数:report - 报告对象。

def pytest_runtest_logreport(report):
        print(f"Logging report for test item: {report.nodeid}")

pytest_runtestloop

用途:在所有测试项执行完毕后调用。 参数:无。

def pytest_runtestloop():
    print("Running test loop")

pytest_keyboard_interrupt

用途:在测试过程中发生键盘中断时调用。 参数:excinfo - 异常信息。

def pytest_keyboard_interrupt(excinfo):
    print("Keyboard interrupt detected")

pytest_internalerror

用途:在测试过程中发生内部错误时调用。 参数:excinfo - 异常信息

def pytest_internalerror(excinfo):
    print("Internal error detected")

pytest_sessionfinish

用途:在测试会话结束时调用。 参数:session, exitstatus - 当前测试会话对象和退出状态

def pytest_sessionfinish(session, exitstatus):
    print("Finishing test session")

pytest_unconfigure

用途:在测试会话结束前调用。 参数:config - 当前配置对象。

def pytest_unconfigure(config):
    print("Unconfiguring pytest")

pytest_terminal_summary

用途:在测试结束时打印终端总结。 参数:terminalreporter, exitstatus, config - 终端报告对象、退出状态和当前配置对象

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    print("Terminal summary")

修改测试行为