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
相关产品推荐
相关产品推荐

