pytest如何被动调用hook函数
时间: 2023-12-26 17:41:00 浏览: 30
pytest可以通过注册自定义的hook函数来实现被动调用。具体步骤如下:
1. 创建一个pytest插件文件,以.py文件为扩展名,例如`myplugin.py`。
2. 在该插件文件中定义你的hook函数,以`pytest_`开头,并接受相应的参数。例如:
```python
def pytest_myhook():
# 这里是你的hook函数的具体实现
pass
```
3. 在插件文件中,使用`pytest.hookimpl`装饰器将你的hook函数注册为一个pytest hook。例如:
```python
import pytest
@pytest.hookimpl
def pytest_myhook():
# 这里是你的hook函数的具体实现
pass
```
4. 确保你的插件文件与测试代码在同一目录下。
然后,当运行pytest时,pytest会自动加载并调用注册的hook函数。你无需显式地调用hook函数,它们会在特定的事件发生时被触发。
请注意,这里提供的示例仅用于说明目的,实际使用时,你需要根据具体需求和事件来编写自己的hook函数并注册。
相关问题
pytest自动调用
pytest通过命令行和关键字来自动调用测试函数或测试类。通过在命令行中指定测试函数运行,可以使用以下命令:
pytest sample_demo_test.py::test_sample_one
通过添加pytest插件,可以在代码中自定义pytest的行为。例如,可以使用pytest.main()方法来指定插件,如下所示:
```python
import sys
import pytest
class MyHello:
def pytest_addoption(self, parser):
parser.addoption("--host", action="store", default="test", choices=["test", "pre", "pro"])
def main():
pytest.main(
[
"-q",
"./cases",
'--html=./report/report.html',
'--alluredir=./report/allure/allure-report',
"--clean-alluredir",
],
plugins=[MyHello()]
)
if __name__ == '__main__':
sys.exit(main())
```
另外,通过关键字(测试类名、测试方法名或测试函数名),可以使用以下命令来运行测试:
pytest -k "TestDemo" 或 pytest -k "test_sample_one"
说说pytest 里的钩子函数
在pytest中,钩子函数是用来扩展和自定义测试架行为的函数。它们允许你在测试执行的不同阶段插入自己的逻辑代码。以下是pytest中常用的一些钩子函数:
1. pytest_configure(config):在pytest启动时调用,可以用来进行全局的初始化配置。
2. pytest_collection_modifyitems(config, items):在收集到测试用例之后,可以对测试用例进行修改或者重新排序。
3. pytest_runtest_protocol(item, nextitem):在每个测试用例执行之前和之后调用,可以在测试用例执行前后添加额外的逻辑。
4. pytest_addoption(parser):用于添加自定义的命令行选项,可以通过命令行参数来控制测试的行为。
5. pytest_generate_tests(metafunc):用于动态生成测试用例,可以根据参数化的配置生成多个测试实例。
6. pytest_runtest_logstart(nodeid, location):在每个测试用例开始执行时调用,可以用来记录日志或者进行一些准备工作。
7. pytest_runtest_logreport(report):在每个测试用例执行完毕后调用,可以获取测试结果并进行相应的处理。
8. pytest_terminal_summary(terminalreporter):在所有测试执行完毕后调用,可以生成测试报告或者进行一些收尾工作。
以上是pytest中常用的一些钩子函数,你可以根据需要选择合适的钩子函数来扩展和定制你的测试框架。