除了系統(tǒng)提過的HOOK函數(shù)外,也可以通過自定義HOOK的方式實現(xiàn)想要的功能扣泊。
首先創(chuàng)建一個py文件友雳,里面定義自己的HOOK函數(shù),主要pytest里面的hook函數(shù)必須以pytest開頭。
#myhook.pydefpytest_myhook(user):"""自定義HOOK函數(shù)"""defpytest_myhook2():"""自定義HOOK函數(shù)"""
其次創(chuàng)建自己的插件類仅胞,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文件中注冊鉤子和引用實現(xiàn)它干旧。其中注冊方法要放在最前面渠欺。
先添加構(gòu)造,在注冊插件椎眯,
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")
執(zhí)行結(jié)果: