[英]How to run pytest with an python debugger with tab completion?
我一直在调试我的 Python 脚本大约 2 年,使用普通from IPython import embed; embed()
from IPython import embed; embed()
,它一直工作得很好。 我只是将命令放在我想要检查的行上,当运行脚本时,我将拥有完整的 IPython shell,具有检查变量、定义函数等的能力。最重要的是,IPython shell 带有变量名称选项卡完成功能。
现在,不再总是使用from IPython import embed; embed()
定义“暂停行” from IPython import embed; embed()
from IPython import embed; embed()
,我希望我的 python 脚本在运行测试时暂停执行,当它们遇到异常时。
你如何以这种方式运行pytest
,那
# test_somemodule.py
def test_me(some_variable):
x = 1 + some_variable
return x
test_me('I am a string')
(不,您不会像这样为 pytest 编写测试,但对于此示例性目的,这很好。)
pytest --pdb
(没有安装pdbpp
) 这会在运行到错误时打开基本的pdb
shell。 但它没有制表符完成。
-> x = 1 + some_variable
(Pdb) so[<tab_here_produces_tab>]
pytest --pdb
(安装了pdbpp
) 这会在运行到错误时打开基本的pdbpp
shell。 但没有选项卡完成。
-> x = 1 + some_variable
(Pdb++) so[<tab_here_produces_tab>]
pytest --pdb --pdbcls=IPython.terminal.debugger:Pdb
这会在运行到错误时打开基本的ipdb
shell。 但没有选项卡完成。
103
104 def test_me(some_variable):
--> 105 x = 1 + some_variable
106 return x
107
ipdb> so[<tab_here_produces_tab>]
fancycompleter.interact()
按照此处的建议尝试了fancycompleter.interact()
,但没有运气(使用pdb
、 ipdb
和pdbpp
、 fancycompleter v.0.8
甚至这个补丁版本。)。
pytest --pdb -s
正如Sergey Voronezhskiy评论的那样, pytest
有-s
标志可用。 但是,制表符完成仅部分起作用:如果相同的起始字符有多个选项,它将打印出可能的变量列表。 这缺乏快速选择匹配变量之一的能力(例如,在 IPython shell 中可用):
有没有办法让变量名选项卡完成工作? 我更喜欢ipdb
或pdbpp
而不是 vanilla pdb
,但即使是pdb
的工作解决方案也很好。
这不是最佳解决方案,但总比没有好。 也许有人会给出更好的答案。 这是我所做的
IPython.embed()
别名emb
~/.pdbrc
文件( C:\\Users\\<USER>\\.pdbrc
)alias emb from IPython import embed; embed()
pytest
使用--pdb
标志运行时,它会启动标准库 pdb,或者如果安装了 pdbpp。如果文件.pdbrc存在于用户的主目录或当前目录中,则它会被读入并执行,就像在调试器提示符下键入一样。 这对于别名特别有用。 如果两个文件都存在,则首先读取主目录中的文件,并且本地文件可以覆盖在那里定义的别名。
pdbpp
( pip install pdbpp
)~/.pdbrc.py
1文件( C:\\Users\\<USER>\\.pdbrc.py
)import pdb
class Config(pdb.DefaultConfig):
def setup(self, pdb):
print('Use "emb" to enter IPython shell')
pdbpp 文档说如果你用setup()
方法创建一个~/.pdbrc.py
,它会在你进入调试器时被调用。 因此,可以创建每次进入pdbpp
调试 shell 时调用的脚本。
1注意:这个有.py
扩展名,而第一个与内置 pdb 相关联,没有。
运行pytest --pdb
(与问题中相同的 .py 文件)。 从图中可以看出,变量some_variable
制表符完成是有效的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.