我有一个python测试,其中setUp函数花费了很多时间(几个小时)。我的测试函数失败了,为了调试它并检查如何修复异常,我使用了pdb.
问题是,当我在一行中出现异常时,我用pdb修复它并更改测试函数,我需要再次运行测试,包括非常长的设置,以便到达下一行并检查它,然后再次运行(它抛出一个异常,用pdb, fix等到达它)。
是否有一种方法可以实时修补我的脚本,并继续到下一行,而无需再次运行大厅脚本?
重新加载模块
您可以将频繁更改的部分代码移动到单独的模块并使用importlib.reload
。(在python 3.4之前,它是imp.reload
,而在python 2中。(它是一个内置函数)
请注意,您应该小心导入:此代码仍将使用过时版本的module -
import changing
from changing import func1
...
func1()
...
reload(changing) # ← this will reload import module, but separately imported func1 will remain intact
func1()
和这个应该可以-
import changing
...
changing.func1()
...
reload(changing)
changing.func1() # ← now the new version is called!
<标题>猴子补丁函数另一种方法,在你的特殊情况下不太方便,是移动变化的代码,例如在模块中的顶级函数,然后替换该函数:
# my_module
def changeable():
# do something
def test_something():
...
changeable()
and
>>> ...
>>> def new_version():
... new actions ...
>>> my_module.changeable = new_version
>>> my_module.test_something() # ← this will use updated changeable()
标题>