pytest Hooks

conftest.py

import pytest 
def pytest_runtest_setup(item): 
    print("pytest_runtest_setup") 
def pytest_runtest_logreport(report): 
    print(f'Log Report:{report}') 
def pytest_sessionstart(session): 
    print("pytest_session start") 
def pytest_sessionfinish(session): 
    print("pytest_session finish") 
def pytest_collection_modifyitems(session, config, items): 
    for item in items: 
        print(f"pytest_collection_modify items{item}", item) 
def pytest_collection_finish(session): 
    print('pytest_collection_finish')

输出结果

### Pytest Hooks 的使用与定制 Pytest 是一种强大的 Python 测试框架,提供了丰富的插件机制和钩子函数(hooks),允许开发者扩展或修改其行为。Hooks 可以让使用者在特定事件发生时介入并执行自定义逻辑。 #### 使用内置 Hook 函数 Pytest 提供了一系列标准的 hook 接口来响应不同阶段的操作。例如,在配置文件 `conftest.py` 中实现这些接口即可激活相应的行为: ```python def pytest_addoption(parser): parser.addoption("--browser", action="store", default="chrome", help="Browser option") def pytest_configure(config): config.option.browser = 'firefox' # 修改默认浏览器设置为例 ``` 上述代码展示了两个常用的 hooks:一个是用来向命令行添加选项;另一个则是在初始化过程中调整全局配置[^5]。 #### 自定义 Hook 实现 除了利用现有的 hooks 外,还可以创建自己的 hook 来满足特殊需求。这通常涉及到注册新的 hookspec 和 hookimpl 方法,并确保它们被正确加载到环境中。下面是一个简单的例子说明如何做到这一点: 1. **定义 Hook Specification** 需要在项目的根目录下建立一个名为 `plugin/` 的包,并在此处声明一个新的 hook specification 文件 `_hooks.py`: ```python from typing import Any, Dict def pytest_my_custom_hook(data: Dict[str, Any]) -> None: """A custom hook example.""" ``` 2. **实现 Hook Implementation** 同样位于 `plugin/` 下面新建模块 `_impl.py`, 定义具体要做的工作: ```python def pytest_my_custom_hook(data: dict) -> None: print(f"Custom data received: {data}") ``` 3. **使 Plugin 生效** 将 plugin 注册至 pytest 环境中,可以通过编辑项目中的 `setup.cfg` 或者直接放置于 `conftest.py` 内部完成此过程: ```ini [options.entry_points] pytest11 = my_plugin = plugin._impl ``` 以上步骤完成后,每当调用该 hook 所关联的时间节点时就会触发对应的处理程序[^6]。 #### 解决常见问题 当遇到无法正常运行 hooks 的情况时,建议检查以下几个方面: - 确认所有的 hook 名字拼写无误; - 查看是否遗漏了必要的导入语句; - 如果是第三方库引起的冲突,则尝试更新依赖版本或将相关部分隔离测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值