超详细的 Pytest 钩子函数 (三) 测试运行钩子

本贴最后更新于 850 天前,其中的信息可能已经沧海桑田

超详细的Pytest钩子函数(三)测试运行钩子

前言

前面咱们已经介绍了pytest中的初始化钩子,和用例收集钩子。这篇文章主要给大家介绍一下pytest中用例执行相关的钩子函数

所有与运行测试相关的钩子都会接收一个pytest.Item对象。

1、pytest_runtestloop

收集完成后执行主运行测试循环的钩子函数。
参数
  • session:pytest 会话对象
触发时机:
  • 用例收集完后执行

默认钩子实现对会话 ( ) 中收集的所有项目执行 runtest 协议session.items,除非收集失败或collectonly设置了 pytest 选项。如果在任何时候pytest.exit()调用,循环将立即终止。如果在任何点session.shouldfailsession.shouldstop设置,循环在当前项目的运行测试协议完成后终止。

2、pytest_runtest_protocol

这个钩子函数是用来执行单个用例的,对单个测试项执行

runtest 协议

参数
  • Item:执行的用例
  • nextitem: 指定的下一条执行的测试用例

pytest默认的runtest协议为如下三个阶段:

1、设置阶段:
这个阶段主要执行用例:前置夹具
  • call = pytest_runtest_setup(item)
  • report = pytest_runtest_makereport(item, call)
  • pytest_runtest_logreport(report)
  • pytest_exception_interact(call, report)
2、调用阶段
这个阶段负责执行测试用例
  • call = pytest_runtest_call(item)
  • report = pytest_runtest_makereport(item, call)
  • pytest_runtest_logreport(report)
  • pytest_exception_interact(call, report)
3、拆解阶段

这个阶段主要执行用例:后置夹具

  • call = pytest_runtest_teardown(item, nextitem)
  • report = pytest_runtest_makereport(item, call)
  • pytest_runtest_logreport(report)
  • pytest_exception_interact(call, report)

3、pytest_runtest_logstart

在单个项目运行

runtest 协议开始时调用

4、 pytest_runtest_logfinish

在单个项目运行

runtest 协议结束时调用

5、pytest_runtest_setup

在运行runTest协议时,

设置阶段执行的钩子函数。该钩子函数默认实现的行为是负责执行前置的测试夹具,以及获取前置夹具中yeild返回的数据。

参数
  • Item:执行的用例

6、pytest_runtest_call

在运行runTest协议时,调用阶段执行的钩子函数,该钩子函数的默认实现的行为是执行:item.runtest()

参数
  • Item:执行的用例

7、pytest_runtest_teardown

8、pytest_runtest_makereport

该钩子函数,在用例执行

runTest协议的过程中,每个阶段都会调用一次。期作用是为了创建测试执行记录器,记录每个阶段执行的结果。

参数
  • Item:执行的用例
  • call: 用例执行的阶段。

为了更深入地理解,您可以查看这些钩子的默认实现,也可以查看_pytest.runner其中_pytest.pdb的交互_pytest.capture 及其输入/输出捕获,以便在发生测试失败时立即进入交互式调试。

9、pytest_pyfunc_call

该钩子函数的作用是为了调用底层的测试执行函数。

参数
  • pyfuncitem: 最终执行的用例函数
回帖
请输入回帖内容 ...