Pytest 钩子函数指南:打造高效的测试体验

218 阅读4分钟

前言

最近一直再更新pytest钩子函数相关的文章,pytest有很多钩子函数,之前已经讲解过一些钩子函数了,这里篇文章主要是一个类似目录的作用,可以直达想要了解的钩子函数。

引导挂钩

引导挂钩调用了足够早注册的插件。

  • pytest_load_initial_conftests 调用以在命令行选项解析之前实现初始conftest文件的加载
  • pytest_cmdline_parse 返回初始化的配置对象,解析指定的参数。
  • pytest_cmdline_main 调用以执行主命令行操作。默认实现将调用configure hooks和runtestu mainloop。

初始化挂钩

初始化钩子需要插件和conftest.py文件

  • pytest_addoption 注册argparse样式的选项和ini样式的配置值,这些值在测试运行开始时被调用一次。
  • pytest_addhooks 在插件注册时调用,以允许通过调用 pluginmanager.add_hookspecs(module_or_class, prefix) .
  • pytest_configure 允许插件和conftest文件执行初始配置。
  • pytest_unconfigure 在退出测试进程之前调用。
  • pytest_sessionstart 在 Session 对象已创建,在执行收集和进入运行测试循环之前。
  • pytest_sessionfinish 在整个测试运行完成后,在将退出状态返回到系统之前调用。
  • pytest_plugin_registered 注册了一个新的pytest插件

收集挂钩

pytest 调用以下挂钩以收集文件和目录

  • pytest_collection 为给定会话执行收集阶段。
  • pytest_ignore_collect 正在考虑返回True以阻止此集合。
  • pytest_collect_file 为给定路径创建一个收集器,如果不相关,则不创建收集器
  • pytest_pycollect_makemodule 返回给定路径的模块收集器或无。
  • pytest_pycollect_makeitem 返回模块中Python对象的自定义项/收集器,或者返回None。
  • pytest_generate_tests 生成对测试函数的(多个)参数化调用
  • pytest_make_parametrize_id 返回val 将由@ pytest.mark.parametrize调用使用的给定用户友好的字符串表示形式,如果挂钩不知道,则返回None val。
  • pytest_collection_modifyitems 在执行收集后调用。可以过滤或重新排序。。
  • pytest_collection_finish 在执行和修改收集后调用。

测试运行(runtest)挂钩

  • pytest_runtestloop 执行主运行测试循环(收集完成后)。
  • pytest_runtest_protocol 对单个测试项执行runtest协议。
  • pytest_runtest_logstart 在为单个项运行runtest协议开始时调用。
  • pytest_runtest_logfinish 在运行单个项的runtest协议结束时调用。
  • pytest_runtest_setup 调用以执行测试项的设置阶段。
  • pytest_runtest_call 调用以运行测试项的测试(调用阶段)。
  • pytest_runtest_teardown 调用以执行测试项的拆卸阶段。
  • pytest_runtest_makereport 调用以创建 _pytest.reports.TestReport 对于测试项的每个安装、调用和拆卸runtest阶段。
  • pytest_pyfunc_call 调用底层测试函数。

报告挂钩

  • pytest_collectstart 收集器开始收集。
  • pytest_make_collect_report 执行collector.collect()并返回一个CollectReport。
  • pytest_itemcollected 我们刚刚收集了一个测试项目。
  • pytest_collectreport 收集器完成收集。
  • pytest_deselected 调用取消选择的测试项,例如按关键字。
  • pytest_report_header 返回要显示为终端报告标题信息的字符串或字符串列表。
  • pytest_report_collectionfinish 返回要在成功完成收集后显示的字符串或字符串列表。
  • pytest_report_teststatus 返回结果类别,简写形式和详细词以进行状态报告。
  • pytest_terminal_summary 在终端摘要报告中添加一节。
  • pytest_fixture_setup 执行夹具设置执行。
  • pytest_fixture_post_finalizer 在fixture teardown之后,但在清除缓存之前调用,因此fixture结果 fixturedef.cached_result 仍然可用(不可用 None
  • pytest_warning_recorded 处理内部pytest warnings插件捕获的警告
  • pytest_runtest_logreport 处理 _pytest.reports.TestReport 为项目的每个安装、调用和拆卸运行测试阶段生成。
  • pytest_assertrepr_compare 返回失败断言表达式中比较的说明。
  • pytest_assertion_pass(实验性的)在断言通过时调用。

调试/交互挂钩

很少有可以用于特殊报告或与异常交互的挂钩:

  • pytest_internalerror 要求内部错误。返回True以禁止对将INTERNALERROR消息直接打印到sys.stderr的回退处理。
  • pytest_keyboard_interrupt 要求键盘中断。
  • pytest_exception_interact 当引发可交互处理的异常时调用。
  • pytest_enter_pdb 调用了pdb.set_trace()。

最后

这篇文章后续会不断更新,已经讲解过的钩子函数会增加链接。好多钩子函数,一个个攻克吧。