• 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 感兴趣,可以点击下面的【阅读原文】访问官方文档

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

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

  • 相关阅读:
    万字长文总结分布式事务,总有一款适合你
    达梦数据库整合在springboot的使用教程
    基于SaaS平台的iHRM管理系统测试学习
    java面试题背不下来怎么办?java面试题总结
    Redis哨兵机制配置实战-实测(Redis6.2.5版本)
    HTML5期末考核大作业:基于Html+Css+javascript的网页制作(化妆品公司网站制作)
    [FineReport]安装与使用(连接Hive3.1.2)
    RabbitMQ如何保证消息不丢
    提取log文件中的数据,画图
    Go 团队发布组织 / 构建 Go module 的官方指南
  • 原文地址:https://blog.csdn.net/python_sanmu/article/details/138181785