You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pytest测试用例执行顺序确认及夹具参数化场景咨询

Pytest测试用例执行顺序详解

无参数化夹具的基础测试顺序

  • 模块级别:按测试模块文件名的字典序执行,例如test_a.py会优先于test_b.py运行。
  • 模块内部:按测试函数/方法在代码中的定义顺序执行,也就是从上到下的书写顺序,比如先定义test_login()再定义test_logout(),则先执行test_login()。

含夹具参数化(含间接参数化)的测试顺序

核心逻辑是:先按测试函数的定义顺序处理每个测试单元,再对每个测试单元,遍历其依赖的参数化夹具的参数组合生成测试实例,实例的执行顺序遵循以下规则:

  • 单个参数化夹具:按夹具params列表的定义顺序遍历参数,生成的测试实例依次执行。比如夹具@pytest.fixture(params=[1,2]),对应的测试实例会按test_func[1]→test_func[2]的顺序运行。
  • 多个参数化夹具:pytest会生成参数的笛卡尔积组合,顺序为优先遍历第一个夹具的参数,再遍历第二个,以此类推。例如依赖两个夹具fixture_a(params=[1,2])和fixture_b(params=['x','y']),实例顺序为test_func[1-x]→test_func[1-y]→test_func[2-x]→test_func[2-y]。
  • 间接参数化:通过@pytest.mark.parametrize(..., indirect=True)将参数传给夹具时,依然遵循参数列表的定义顺序生成夹具实例,对应测试实例按此顺序执行。比如参数列表为[3,4],则test_func[3]先执行,再执行test_func[4]。
  • 混合场景(多测试函数+参数化夹具):先按测试函数的定义顺序逐个处理,每个函数的所有参数化实例执行完成后,再执行下一个测试函数。例如先定义test_profile()(依赖参数化夹具),再定义test_settings()(无参数化),则先跑完test_profile的所有实例,再执行test_settings。

注:如果需要自定义执行顺序,可以使用pytest-ordering插件,但以上是pytest的默认行为。

内容的提问来源于stack exchange,提问作者felix001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:55:18