pytest测试函数参数顺序与命名规则官方文档位置查询
pytest 中 fixture 与 parametrize 的参数顺序规则
你的假设是完全正确的,二者在测试函数的参数列表中排列顺序没有强制要求,运行结果不会受参数顺序影响。
核心原理
pytest 对测试函数的参数是按名称匹配注入值,而非按位置匹配:
@pytest.mark.parametrize传入的参数会先注册对应名称的参数值@pytest.fixture定义的可注入对象也对应唯一的 fixture 名称
二者的解析逻辑完全独立,不管在测试函数的参数列表里谁在前谁在后,pytest 都会根据参数名自动匹配对应的值,不会出现匹配错误。
示例验证
import pytest # 自定义 fixture,yield 实现 teardown @pytest.fixture def calc_base(): yield 10 # 这里可写 teardown 逻辑 # 参数化装饰器 @pytest.mark.parametrize("add_num, expected", [ (1, 11), (2, 12), (3, 13) ]) # 参数顺序调换也能正常运行 def test_calc(add_num, expected, calc_base): assert calc_base + add_num == expected
上述代码无论把calc_base放在参数列表的第一个、中间还是最后一个位置,运行结果完全一致。
关于可选命名参数的说明
fixture 本身支持配置可选参数,比如给 fixture 设置scope、params、autouse等属性,也可以在 fixture 函数中接收其他 fixture 作为参数,不过这些配置都不影响测试函数的参数匹配规则,依然按名称对应即可。
内容的提问来源于stack exchange,提问作者mike rodent
相关产品推荐
相关产品推荐

