首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest中的hook清单(下)

3. 分析 pytest 执行的过程

因为整个文件行数有 1K+,通过 Python 脚本辅助分析后发现,有共用 38 个 hook 累计被调用 440 次,

将其简化后,结果如下

根据这个 hook 记录,咱们可以梳理出 pytest 整个执行的过程,大致分为以下几个阶段

加载插件

在第 1 行,

pytest_plugin_registered 以插件为参数,被反复调用

初始化框架

在第 2~6 行

为框架增设 hook、配置项、conftest 文件

从命令行参数、配置文件中,加载配置内容

启动测试框架

在第 7 行

根据配置内容,决定做什么,怎么做

如果是内容输出(例如:版本号、帮助信息),做完马上退出

如果是执行用例,按照下面的阶段继续执行

收集测试用例

在第 8~23 行

找到符合收集规则且包含测试用例的文件

根据文件内容,生成 pytest 内部用例对象:Item

执行测试用例

在第 24~35 行

setup + run + tear down

结束框架

在第 36~38 行

输出测试结果的摘要

释放对标准输出、日志等资源的控制

此外,还有一组在 hook并不是在某个阶段执行,

而是运行在整个框架启动后全程运行,

用来实时的收集、输出报告

在第 10、13、17、23、28~30 行

在终端中输出:

框架信息

用例收集情况

用例执行进度、结果

异常信息

汇总执行结果、执行耗时(最后一行)

你可能还记得前面咱们一共收集到 52 个 hook,

本次执行用例却只执行了 38 个,

稍微修改脚本,筛选出未执行的 hook 有:

pytest_assertion_pass

pytest_assertrepr_compare

pytest_deselected

pytest_enter_pdb

pytest_fixture_post_finalizer

pytest_fixture_setup

pytest_internalerror

pytest_keyboard_interrupt

pytest_leave_pdb

pytest_make_parametrize_id

pytest_markeval_namespace

pytest_report_from_serializable

pytest_report_to_serializable

pytest_warning_recorded

从名字上可以看出,与断言、fixture、调试、筛选、参数化等相关。

可能咱们准备的脚本比较简单,未涉及这些,导致 hook 没能执行,

你有兴趣的话,可以把相关功能用上,然后重新记录和分析。

借助 hook,现在咱们知道了 pytest 的执行脉络,

但具体的细节还藏在实现了 hook 的各个插件中。

下一波,盘盘 pytest 内置的插件,看看它们怎么巧妙地运用各个 hook,实现各种神奇的功能

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ORdUXiUpcEXbDP63feW446mQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券