我有一个python测试,setUp函数需要花费很多时间(几个小时)。我的测试函数失败,并调试它并检查如何修复异常,我使用pdb。
问题是当我在一行中有异常时,我用pdb修复它并更改测试功能,我需要重新运行测试,包括很长的设置,以便到达下一行并且检查它,然后重新开始(它抛出一个异常,用pdb到达它,修复等)。
有没有办法对我的脚本进行修补,并且在没有再次运行大厅脚本的情况下继续下一行?
答案 0 :(得分:0)
您可以将经常更改的代码部分移动到单独的模块中,并使用importlib.reload
。 (在python 3.4之前它是imp.reload
,而在python 2.x中它是一个内置函数。)
请注意,您应该小心导入:此代码仍将使用过时版本的模块 -
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()
和pdb:
>>> ...
>>> def new_version():
... new actions ...
>>> my_module.changeable = new_version
>>> my_module.test_something() # ← this will use updated changeable()