pytest可以使用@pytest.mark.parametrize对用例进行参数化
parametrize()方法:
def parametrize(self,argnams,argvalues,indirect=False,ids=None)
主要参数:
- argnams 参数名,是一个字符串,若有多个参数中间用逗号分隔
- argvalue 参数值,是一个列表,列表中有几个元素,便会生成几个用例
- indirect 默认为False,若为True则表示参数名是一个函数
- ids 可以将用例重命名
1、一个参数的情况:
@pytest.mark.parametrize("param",[1,2,3,4])
def test_demo1(param):
print(f"传入的参数为:{param}")
运行结果:
image.png
2、多个参数的情况:
@pytest.mark.parametrize("param1,param2,param3",[(1,1,1),(0.1,0.2,0.3),(-1,-2,-3)])
def test_demo2(param1,param2,param3):
print(f"传入的第一个参数为:{param1}")
print(f"传入的第二个参数为:{param2}")
print(f"传入的第参个参数为:{param3}")
运行结果:
image.png
3、用例重命名
@pytest.mark.parametrize("param",[1,2,3,4],ids=["用例一","用例二","用例三","用例四"])
def test_demo1(param):
print(f"传入的参数为:{param}")
运行结果:
image.png
4、参数驱动
当数据量比较大的时候,我们可以将测试数据单独存在放一个文件中,如yaml、json、excel等,通过读取文件数据的方式,将参数传入测试用例中,这一操作可以称为数据驱动。

image.png
测试用例:
@pytest.mark.parametrize("add1,add2,sum", yaml.safe_load(open("./test_yaml.yaml")))
def test_demo3(add1, add2, sum):
print(f"传入加数为:{add1, add2}")
print(f"传入和为:{sum}")
assert sum == add1 + add2
运行结果:
image.png