除了系统提过的HOOK函数外,也可以通过自定义HOOK的方式实现想要的功能。
首先创建一个py文件,里面定义自己的HOOK函数,主要pytest里面的hook函数必须以pytest开头。
#myhook.pydefpytest_myhook(user):"""自定义HOOK函数"""defpytest_myhook2():"""自定义HOOK函数"""
其次创建自己的插件类,user类的重写__init__方法,注册钩子的时候带入pytest的config配置。在该方法中设置钩子入口:self
.config.hook.pytest_myhook().
#插件类classuser:name ="herry"age =18def__init__(self, config):self.config = configself.config.hook.pytest_myhook(user=self)self.config.hook.pytest_myhook2()@pytest.mark.Adeftest_B(): print("BBB")if__name__=="__main__": pytest.main([("pytest模块分享之hook2.py"), ("-s"), ("-m=A")])
最后在conftest.py文件中注册钩子和引用实现它。其中注册方法要放在最前面。
先添加构造,在注册插件,
defpytest_addhooks(pluginmanager):from.importmyhook pluginmanager.add_hookspecs(myhook)defpytest_configure(config):config.user_ = user(config) config.pluginmanager.register(config.user_)defpytest_myhook(user):print("username------%s"%user.name) print("age------%s"% user.age)defpytest_myhook2():print("myhook2")
执行结果: