python - 在 python 中实时修补

标签 python testing pdb

我有一个 python 测试,其中 setUp 函数需要花费很多时间(几个小时)。我的测试函数失败,为了调试它并检查如何修复异常,我使用 pdb。

问题是当我在一行中出现异常时,我用 pdb 修复它并更改测试函数,我需要重新运行测试,包括非常长的设置,以便进入下一行并且检查它,然后重新开始(它抛出异常,用 pdb、修复等到达它)。

有没有办法实时修补我的脚本,并继续下一行而无需重新运行 hall 脚本?

最佳答案

重新加载模块

您可以将经常更改的代码部分移动到单独的模块中,并为其使用 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() 

关于python - 在 python 中实时修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31807931/

相关文章:

python - 如何在AWS-Glue脚本中编写用户定义函数?

c# - 对 'legacy' WPF 应用程序进行单元测试

python - 在 emacs 中调试 python 程序

python - PDB - 在交互模式下设置或更改变量

python - 在带有日期索引的 Pandas 中删除一行,python

python - 使用 cx_Oracle 制作字典列表

java - Selenium(Edge)无法设置上传文件

testing - 使用 go test 跳过一些测试

python - 如何通过pdb在python类成员函数中设置断点?

python - 如何向 Windows 通知气球添加换行符?