pytest 相关钩子
目录
初始化钩子
pytest_addoption
- 调用插件和conftest.py文件的初始化挂钩,添加命令行选项
import pytest def pytest_addoption(parser:pytest.Parser): parser.addoption("--xxxx",default="xxxx",name="weburl") @pytest.fixture() def get_weburl(pytestconfig): return pytestconfig.getoption("xxxx")
pytest_configure
- 使用pytest_configure钩子在conftest文件中注册标签
def pytest_configure(config): config.addinivalue_line( "markers", "env(name): mark test to run only on named environment" )
收集钩子
pytest_collection_modifyitems(session, config, items)
- 在执行收集后调用。可以就地过滤或重新订购物品。
from _pytest.config import Config def pytest_collection_modifyitems(config:Config, items): print(config.rootdir) print(items)
pytest_collect_file
- 为给定路径创建一个收集器,如果不相关,则为无,pytest版本要7.0以上详情见官方文档
def pytest_collect_file(file_path, parent): print(file_path) #执行用例路径 print(parent) # 执行用例包
使用pytest_generate_tests参数化测试
- 对测试函数的参数化调用
# conftest.py test_data = [{"test_input": "3+5", "expected": 8, "id": "验证3+5=8" }, {"test_input": "2+4", "expected": 6, "id": "验证2+4=6" }, {"test_input": "6 * 9", "expected": 54, "id": "验证6*9=54" } ] from _pytest.python import Metafunc def pytest_generate_tests(metafunc:Metafunc): ids = [] if "parameters" in metafunc.fixturenames: for data in test_data: print("ddd", metafunc) ids.append(data['id']) # ids 表示测试用例的编号 metafunc.parametrize("parameters", test_data, ids=ids, scope="function")
# test_demo.py import pytest def test_eval(parameters): print("xxxx",parameters) assert eval(parameters['test_input']) == parameters['expected']