pytest简易教程(13):parametrize参数化
pytest简易教程汇总,详见
今天我们分享parametrize参数化,也就是在测试函数/测试类进行参数化 parametrize是一个内置标记,在命令pytest --markers结果中可以看到@pytest.mark.parametrize(argnames, argvalues) 常用参数: argvalues:参数对应值,类型必须为list indirect:默认是False,如果设置成True,表示把被parametrize修饰器修饰的方法形参当函数执行(parametrize中参数名和这个形参同名),同时,必须有这个函数,且被@pytest.fixture()修饰,否则报错:fixture 'xxx' not found,xxx表示形参名 ids:用例id,用于标识用例,增加可读性(测试结果中会展示id),是字符串列表,ids的长度要与测试数据列表长度一致 2、修饰测试类时,会将测试数据传给此类下所有测试方法 3、函数、方法、测试类上可以加多个参数化修饰器 4、如果只有一个修饰器,参数值为N个(也就是列表长度),测试方法就会运行N次 5、如果多个修饰器,参数个数分别是X、Y、Z,会运行X*Y*Z次 测试方法形参名要和parametrize里面的参数一样 结果: 参数放列表中,且列表嵌套元组或者列表 示例一:修饰器放函数上,参数值是基本类型 结果: 示例二:修饰器放函数上,参数值是字典 结果: 示例三:修饰器放测试类上 结果: 示例四:测试类下多个方法,会将测试数据传给此类下所有测试方法 结果: 结果: 结果: 添加配置 结果: 只执行某个标记的参数:pytest case\test_qzcsbj.py -vs -m division 应用场景:比如注册接口,考虑不同入参的组合 示例: 结果:运行9次 注意:此时fixture修饰器中有params参数 示例: 结果: 关于parametrize参数化

源码
class _ParametrizeMarkDecorator(MarkDecorator):
def __call__( # type: ignore[override]
self,
argnames: Union[str, Sequence[str]],
argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
*,
indirect: Union[bool, Sequence[str]] = ...,
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[Any], Optional[object]],
]
] = ...,
scope: Optional[_ScopeName] = ...,
) -> MarkDecorator:
...
方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
argnames:参数名,格式为:"arg1,arg2,arg3,...",通过逗号分隔多个参数多参数写法汇总:参数名可以是字符串、元组、列表、字符串放元组中
@pytest.mark.parametrize("input,expected", [("1+1", 2), ("2-4", -2), ("2*3", 6)])
@pytest.mark.parametrize(("input","expected"), [("1+1", 2), ("2-4", -2), ("2*3", 6)])
@pytest.mark.parametrize(["input","expected"], [("1+1", 2), ("2-4", -2), ("2*3", 6)])
@pytest.mark.parametrize(("input,expected"), [("1+1", 2), ("2-4", -2), ("2*3", 6)])
当参数为一个时格式:[v1]
当参数个数大于一个时,格式为:[(v1_1, v2_1, ...), (v1_2, v2_2, ...)],一组参数值放元组或者列表中,也就是说,最外层列表可以嵌套元组或者列表@pytest.mark.parametrize("name,technology",[['韧','测试开发'],['全栈测试笔记','性能测试']]) # 列表嵌列表
@pytest.mark.parametrize("name,technology",[('韧','测试开发'),('全栈测试笔记','性能测试')]) # 列表嵌套元组
使用方法:
1、@pytest.mark.parametrize(argnames, argvalues)可以修饰函数、方法、测试类单个参数的参数化

多个参数的参数化




参数放变量中

调用函数获取参数数据

mark标记参数
[pytest]
addopts = -s --strict-markers
markers =
minus
multiplication
division


笛卡尔积:多个parametrize参数化修饰器

笛卡尔积:parametrize与fixture混合

__EOF__
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
加薪必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!