pytest的内置插件盘点9. debugging

本文系《pytest源码剖析》系列内容

正在连载,欢迎关注

图片

9. debugging

插件路径:_pytest.debugging

实现的 hook

hooktryfirsttrylastoptionalhookhookwrapperwrapper
pytest_addoptionFalseFalseFalseFalseFalse
pytest_configureFalseFalseFalseFalseFalse

调用的 hook

  • pytest_leave_pdb

  • pytest_enter_pdb

插件功能

  1. 创建命令行参数 --pdb,遇到异常时触发进入调试状态

  2. 创建命令行参数 --trace,每个用例在执行前进入调试状态

  3. 创建命令行参数 --pdbcls,指定自定义调试器

  4. 创建插件 pdbtrace,在传递 --trace 参数时注册

  5. 创建插件 pdbinvoke,在传递 --pdb 参数时注册

  6. 创建默认调试器,_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)
  1. pdbtrace 的插件比较简单,通过 hook,让在框架执行用例时,调用 pdb,进入调试模式

  2. pdbinvoke 插件也比较简单,通过 hook,让框架在遇到异常时,调用 pdb,进入调试模式

简评

这个插件和上一个 terminal 风格非常相似,

  1. 创建新的插件

  2. 创建参数

  3. 然后根据参数来决定是否注册(启用)插件

真正的活儿不是自己干,而是委托给自己创建的两个插件

...

这两个插件是在传递参数化之后才会被注册,所以之前的分析脚本漏掉了它们

不过它们的内容也比较简单,适时的调用 pdb 即可

...

pdb 是 Python 的标准库中用来进行调试的工具,可以:

  1. 在对 python 进行断点和单步执行

  2. 检视堆栈帧、源码

  3. 执行任意 python 代码

说实话我对它的了解还仅限于基本使用,底层细节还未深入,更不要通过代码进行定制了

如果你对于 pdb 感兴趣,可以点击下面的【阅读原文】访问官方文档

首发于公众号:测试开发研习社

原创不易,喜欢请星标+点赞+在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值