新的PDBP(PDB+)Python调试器!
#python #调试 #pytest #pdb

pdbp(PDB+) - 111111111:新的Python调试器!

pdbp (Pdb+) debugger

PDBP(PDB+)调试示例

SeleniumBase test with the pdbp (Pdb+) debugger

seleniumbase用pdbp

测试咖啡车应用程序

为什么不仅使用Python的内置pdb调试器或其他现有的debugger,例如ipdbpdbpp

pdb开始,它的显示屏有限,没有颜色和有限的能力。这里是python的内置pdb调试器:

Regular pdb

常规PDB调试器

ipdb调试器添加了选项卡的完成,语法突出显示,更好的追溯等(I talked about it in a past blog post.)在这里的外观示例:

ipdb debugger

ipdb调试器

主要缺点是它带有大量的外部依赖项,需要时间才能下载。这里是ipdb依赖项的pipdeptree

> pipdeptree
			IPDB == 0.13.13
			–装饰器[必需:任何安装:5.1.1]
			IPYTHON [必需:> = 7.31.1,已安装:8.14.0]
			AppNope [必需:安装的任何:0.1.3]
			ââ€[必需:安装:0.2.0]
			–装饰器[必需:任何安装:5.1.1]
			JEDI [必需:> = 0.16,安装:0.18.2]
			– parso [必需:> = 0.8.0,<0.9.0,安装:0.8.3]'已安装:0.1.6]â– traitlet [必需:安装:5.9.0]  -  pexpect [必需:> 4.3,已安装:4.8。 0]
			ptyprocess [必需:> = 0.5,安装:0.7.0]
			•需要:安装的任何条件:0.7.5]
			提示toolkit [必需:> = 3.0.30,<3.1.0,!= 3.0.37,已安装:3.0.38] wcwidth [必需:安装:0.2.6]  -  pygments [必需:> = 2.4.0,安装:2.15.1]
			 - 堆栈数据[必需:安装:0.6.2]
			Asttokens [必需:> = 2.1.0,安装:2.2.1]
			 - 六个[必需:任何安装:1.16.0]
			执行[必需:> = 1.2.0,安装:1.2.0]
			pure-eval [必需:任何,安装:0.2.2]
			traitlets [必需:> = 5,安装:5.9.0]
			

如果您已经使用了ipython,这不是一个问题,因为无论如何您都需要下载大多数这些依赖项。但是,如果您不使用ipython!您仍然需要下载这些依赖项。

接下来是pdbpp调试器。它具有选项卡的完成,语法突出显示,更好的例外,显示代码的不同模式,以便您可以获取完整的视图与逐条线等。在这里,它的外观示例:

pdbpp debugger

这里的主要问题是:pdbppfancycompleter具有依赖性,该fancycompleterpyreadlinehttps://github.com/pyreadline/pyreadline)具有windows的依赖性,该问题具有此问题:pyreadline/pyreadline#65,这导致了此错误:AttributeError: module 'collections' has no attribute 'Callable'。对于运行Python 3.11或更新的Windows用户,这是一个主要问题。

在这里我为解决方案进行了修复和改进:(使用pdbp

我创建了 pdbp(pdb+) python debugger,其依赖性对我自己的库tabcompleterhttps://github.com/mdmintz/tabcompleter),该库对改进的pyreadline3https://github.com/pyreadline3/pyreadline3/)具有依赖性,而不是pyreadline。然后一切再次开始工作。作为奖励,我修复了一些错误,在默认配置设置上进行了改进,并添加了一些新功能。

它不仅强大,而且对依赖关系有所了解。这里是pdbppipdeptree

> pipdeptree
			PDBP == 1.4.2
			–jgments [必需:> = 2.15.1,安装:2.15.1]
			TabCompleter [必需:> = 1.2.1,已安装:1.2.1]
			

这是新的pdbp调试器的一些示例:

pdbp (Pdb+) Python debugger

pdbp (Pdb+) Python debugger

pdbp (Pdb+) Python debugger

pdbp (Pdb+) Python debugger

现在我们涵盖了调试者之间的差异,让我们的封面安装:

pip install pdbp(注意:pdbp已包含在seleniumbase中)

然后将import pdbp添加到您项目的__init__.py中,这将自动使Pdb+在断点处成为默认调试器。

现在让我们谈论使用它:

pytest中的调试模式可以通过几种不同的方式触发:

  • 您的测试在将"--pdb"选项传递给"pytest"后提出了一个例外。
  • 您的测试在将"--trace"选项传递给"pytest"之后开始的那一刻。
  • 分别导入"pdb""pdbp"后,从您的测试中调用"pdb.set_trace()""pdbp.set_trace()"。 (Python版本3.7+和新版本也可以使用"breakpoint()"方法进入调试模式。)
  • 在测试结束时,如果您向"pytest"添加了"--final-debug"--ftrace选项。 (仅Seleniumbase)

激活调试模式时,浏览器窗口将保持打开状态(与浏览器自动化结合使用时),您可以从命令行中查看变量的外观。

(请注意,您可能需要将"-s"添加到"pytest" Run命令中以允许断点,除非您已经在其中有"pytest.ini"文件。)

您处于调试模式后,您可以使用几个命令来控制和调试测试:

  • n (next):执行当前方法块的下一行。
  • s (step):逐步并执行当前方法块的下一行(但是如果当前方法调用另一种方法,请沿堆栈下去)。
  • c (continue):离开调试模式,继续测试当前方法。
  • r (return):继续运行测试直到当前方法返回。
  • j (jump):跳到当前方法块的行号。
  • w (where):显示您在当前堆栈跟踪中的位置。
  • u (up):向上移动堆栈。
  • d (down):沿堆栈移动。
  • ll (longlist):请参阅当前方法块的代码。
  • dir():列表名称空间对象。
  • h (help):列出所有可用命令。

这是pdbp添加的一些新命令:

  • sticky:在粘性和非粘性模式之间切换,该模式显示完整的代码块与堆栈中的单个行。
  • trun (truncate):用它在粘性模式下截断或不截断长行之间切换。

此外,您可以在调试模式内执行所需的任何Python代码。

现在,您涵盖了使用pdbp的基础知识,请参阅pdbp GitHub ReadMe有关更多详细信息。

和Python浏览器自动化,请参见SeleniumBase GitHub page