如何在Pytest中查看包含fixture的完整测试执行顺序计划
Pytest 查看含fixture的完整执行计划解决方案
现成内置方案
pytest 5.1及更高版本已经原生支持你需要的能力,无需安装任何第三方插件:
- 使用内置参数
--setup-plan即可在不执行任何测试和fixture代码的前提下,输出和实际执行顺序完全一致的流程,包含各层级fixture的setup、测试用例执行顺序,也能对应fixture栈式销毁的teardown逻辑。 - 如果你需要在执行测试的同时同步查看fixture和测试的执行流程,可以用
--setup-show参数,运行时会输出带缩进层级的完整流程。
默认的--setup-plan输出示例:
SETUP M Fixture1 (module) SETUP C Fixture2 (class) SETUP F Fixture3 (function) test_file.py::TestClass1::TestCase1 (fixtures used: Fixture1, Fixture2, Fixture3) TEARDOWN F Fixture3 test_file.py::TestClass1::TestCase2 (fixtures used: Fixture1, Fixture2) TEARDOWN C Fixture2 test_file.py::TestClass2::TestCase3 (fixtures used: Fixture1) test_file.py::TestClass2::TestCase4 (fixtures used: Fixture1) TEARDOWN M Fixture1
和你期望的输出结构几乎一致,仅格式标识略有区别,完全可以满足fixture逻辑校验的需求。
自定义输出格式实现
如果你需要完全匹配你示例的输出格式,可以通过开发轻量pytest钩子插件实现:
- 用
pytest_collection_modifyitems钩子拿到所有收集完成的测试用例列表 - 调用pytest内置的依赖解析方法,递归获取每个测试用例依赖的所有fixture,按作用域优先级
session > module > class > function排序 - 按栈逻辑合并重复作用域的fixture(同module下的测试共享module级fixture),最后按执行顺序拼接teardown阶段的fixture列表
- 按你需要的缩进规则格式化输出即可
内容的提问来源于stack exchange,提问作者Radek Liska
相关产品推荐
相关产品推荐

