本文系《pytest源码剖析》系列内容
正在连载,欢迎关注
9. debugging
插件路径:_pytest.debugging
实现的 hook
hook | tryfirst | trylast | optionalhook | hookwrapper | wrapper |
---|---|---|---|---|---|
pytest_addoption | False | False | False | False | False |
pytest_configure | False | False | False | False | False |
调用的 hook
-
pytest_leave_pdb
-
pytest_enter_pdb
插件功能
-
创建命令行参数
--pdb
,遇到异常时触发进入调试状态 -
创建命令行参数
--trace
,每个用例在执行前进入调试状态 -
创建命令行参数
--pdbcls
,指定自定义调试器 -
创建插件
pdbtrace
,在传递--trace
参数时注册 -
创建插件
pdbinvoke
,在传递--pdb
参数时注册 -
创建默认调试器,
_pytest.debugging.pytestPDB
代码片段
class PdbTrace:
@hookimpl(hookwrapper=True)
def pytest_pyfunc_call(self, pyfuncitem) -> Generator[None, None, None]:
wrap_pytest_function_for_tracing(pyfuncitem)
yield
class PdbInvoke:
def pytest_exception_interact(
self, node: Node, call: "CallInfo[Any]", report: BaseReport
) -> None:
...
def pytest_internalerror(self, excinfo: ExceptionInfo[BaseException]) -> None:
tb = _postmortem_traceback(excinfo)
post_mortem(tb)
-
pdbtrace
的插件比较简单,通过 hook,让在框架执行用例时,调用 pdb,进入调试模式 -
pdbinvoke
插件也比较简单,通过 hook,让框架在遇到异常时,调用 pdb,进入调试模式
简评
这个插件和上一个 terminal
风格非常相似,
-
创建新的插件
-
创建参数
-
然后根据参数来决定是否注册(启用)插件
真正的活儿不是自己干,而是委托给自己创建的两个插件
...
这两个插件是在传递参数化之后才会被注册,所以之前的分析脚本漏掉了它们
不过它们的内容也比较简单,适时的调用 pdb 即可
...
pdb 是 Python 的标准库中用来进行调试的工具,可以:
-
在对 python 进行断点和单步执行
-
检视堆栈帧、源码
-
执行任意 python 代码
说实话我对它的了解还仅限于基本使用,底层细节还未深入,更不要通过代码进行定制了
如果你对于 pdb 感兴趣,可以点击下面的【阅读原文】访问官方文档
首发于公众号:测试开发研习社
原创不易,喜欢请星标+点赞+在看